diff dmd/statement.h @ 1141:f99a3b393c03

Reorganize EnclosingHandlers to require less changes to the frontend and allow us to implement the synchronized storage class for functions.
author Christian Kamm <kamm incasoftware de>
date Tue, 24 Mar 2009 21:18:18 +0100
parents b30fe7e1dbb9
children c6d6a68bb5db
line wrap: on
line diff
--- a/dmd/statement.h	Tue Mar 24 14:34:16 2009 +0100
+++ b/dmd/statement.h	Tue Mar 24 21:18:18 2009 +0100
@@ -94,35 +94,6 @@
     BEany = (BEfallthru | BEthrow | BEreturn | BEgoto | BEhalt),
 };
 
-// LDC this is used for tracking try-finally, synchronized and volatile scopes
-// definitions in gen/llvmhelpers.cpp
-struct EnclosingHandler : Object
-{
-    virtual void emitCode(IRState* p) = 0;
-    virtual EnclosingHandler* getEnclosing() = 0;
-};
-struct EnclosingTryFinally : EnclosingHandler
-{
-    TryFinallyStatement* tf;
-    void emitCode(IRState* p);
-    EnclosingHandler* getEnclosing();
-    EnclosingTryFinally(TryFinallyStatement* _tf) : tf(_tf) {}
-};
-struct EnclosingVolatile : EnclosingHandler
-{
-    VolatileStatement* v;
-    void emitCode(IRState* p);
-    EnclosingHandler* getEnclosing();
-    EnclosingVolatile(VolatileStatement* _tf) : v(_tf) {}
-};
-struct EnclosingSynchro : EnclosingHandler
-{
-    SynchronizedStatement* s;
-    void emitCode(IRState* p);
-    EnclosingHandler* getEnclosing();
-    EnclosingSynchro(SynchronizedStatement* _tf) : s(_tf) {}
-};
-
 struct Statement : Object
 {
     Loc loc;
@@ -255,7 +226,6 @@
 struct UnrolledLoopStatement : Statement
 {
     Statements *statements;
-    EnclosingHandler* enclosinghandler;
 
     UnrolledLoopStatement(Loc loc, Statements *statements);
     Statement *syntaxCopy();
@@ -300,7 +270,6 @@
 {
     Expression *condition;
     Statement *body;
-    EnclosingHandler* enclosinghandler;
 
     WhileStatement(Loc loc, Expression *c, Statement *b);
     Statement *syntaxCopy();
@@ -322,7 +291,6 @@
 {
     Statement *body;
     Expression *condition;
-    EnclosingHandler* enclosinghandler;
 
     DoStatement(Loc loc, Statement *b, Expression *c);
     Statement *syntaxCopy();
@@ -346,7 +314,6 @@
     Expression *condition;
     Expression *increment;
     Statement *body;
-    EnclosingHandler* enclosinghandler;
 
     ForStatement(Loc loc, Statement *init, Expression *condition, Expression *increment, Statement *body);
     Statement *syntaxCopy();
@@ -371,7 +338,6 @@
     Arguments *arguments;	// array of Argument*'s
     Expression *aggr;
     Statement *body;
-    EnclosingHandler* enclosinghandler;
 
     VarDeclaration *key;
     VarDeclaration *value;
@@ -499,7 +465,6 @@
     Statement *body;
 
     DefaultStatement *sdefault;
-    EnclosingHandler* enclosinghandler;
 
     Array gotoCases;		// array of unresolved GotoCaseStatement's
     Array *cases;		// array of CaseStatement's
@@ -574,7 +539,6 @@
 struct GotoDefaultStatement : Statement
 {
     SwitchStatement *sw;
-    EnclosingHandler* enclosinghandler;
 
     GotoDefaultStatement(Loc loc);
     Statement *syntaxCopy();
@@ -590,7 +554,6 @@
 {
     Expression *exp;		// NULL, or which case to goto
     CaseStatement *cs;		// case statement it resolves to
-    EnclosingHandler* enclosinghandler;
     SwitchStatement *sw;
 
     GotoCaseStatement(Loc loc, Expression *exp);
@@ -615,7 +578,6 @@
 struct ReturnStatement : Statement
 {
     Expression *exp;
-    EnclosingHandler* enclosinghandler;
 
     ReturnStatement(Loc loc, Expression *exp);
     Statement *syntaxCopy();
@@ -636,7 +598,6 @@
 struct BreakStatement : Statement
 {
     Identifier *ident;
-    EnclosingHandler* enclosinghandler;
 
     BreakStatement(Loc loc, Identifier *ident);
     Statement *syntaxCopy();
@@ -654,7 +615,6 @@
 struct ContinueStatement : Statement
 {
     Identifier *ident;
-    EnclosingHandler* enclosinghandler;
 
     ContinueStatement(Loc loc, Identifier *ident);
     Statement *syntaxCopy();
@@ -673,7 +633,6 @@
 {
     Expression *exp;
     Statement *body;
-    EnclosingHandler* enclosinghandler;
 
     SynchronizedStatement(Loc loc, Expression *exp, Statement *body);
     Statement *syntaxCopy();
@@ -749,7 +708,6 @@
 {
     Statement *body;
     Statement *finalbody;
-    EnclosingHandler* enclosinghandler;
 
     TryFinallyStatement(Loc loc, Statement *body, Statement *finalbody);
     Statement *syntaxCopy();
@@ -799,7 +757,6 @@
 struct VolatileStatement : Statement
 {
     Statement *statement;
-    EnclosingHandler* enclosinghandler;
 
     VolatileStatement(Loc loc, Statement *statement);
     Statement *syntaxCopy();
@@ -817,8 +774,8 @@
 {
     Identifier *ident;
     LabelDsymbol *label;
-    TryFinallyStatement *tf;
-    EnclosingHandler* enclosinghandler;
+    TryFinallyStatement *enclosingFinally;
+    Statement* enclosingScopeExit;
 
     GotoStatement(Loc loc, Identifier *ident);
     Statement *syntaxCopy();
@@ -835,8 +792,8 @@
 {
     Identifier *ident;
     Statement *statement;
-    TryFinallyStatement *tf;
-    EnclosingHandler* enclosinghandler;
+    TryFinallyStatement *enclosingFinally;
+    Statement* enclosingScopeExit;
     block *lblock;		// back end
     int isReturnLabel;
 
@@ -895,8 +852,8 @@
 
 struct AsmBlockStatement : CompoundStatement
 {
-    EnclosingHandler* enclosinghandler;
-    TryFinallyStatement* tf;
+    TryFinallyStatement* enclosingFinally;
+    Statement* enclosingScopeExit;
 
     AsmBlockStatement(Loc loc, Statements *s);
     Statements *flatten(Scope *sc);