Mercurial > projects > ldc
diff dmd/statement.h @ 309:d59c363fccad trunk
[svn r330] Implemented synchronized statements.
Changed the tryfinally handlers to a more generalized EnclosingHandler.
Changed ClassInfoS to be mutable so they can be used as locks.
Added new BB after throw ala return/break etc.
author | lindquist |
---|---|
date | Sat, 28 Jun 2008 11:37:53 +0200 |
parents | 2b72433d5c8c |
children | aaade6ded589 |
line wrap: on
line diff
--- a/dmd/statement.h Sat Jun 28 05:57:16 2008 +0200 +++ b/dmd/statement.h Sat Jun 28 11:37:53 2008 +0200 @@ -50,6 +50,8 @@ struct InterState; struct CaseStatement; struct LabelStatement; +struct VolatileStatement; +struct SynchronizedStatement; enum TOK; @@ -77,6 +79,35 @@ #endif struct code; +// LLVMDC 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; @@ -196,7 +227,7 @@ struct UnrolledLoopStatement : Statement { Statements *statements; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; UnrolledLoopStatement(Loc loc, Statements *statements); Statement *syntaxCopy(); @@ -241,7 +272,7 @@ { Expression *condition; Statement *body; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; WhileStatement(Loc loc, Expression *c, Statement *b); Statement *syntaxCopy(); @@ -263,7 +294,7 @@ { Statement *body; Expression *condition; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; DoStatement(Loc loc, Statement *b, Expression *c); Statement *syntaxCopy(); @@ -287,7 +318,7 @@ Expression *condition; Expression *increment; Statement *body; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; ForStatement(Loc loc, Statement *init, Expression *condition, Expression *increment, Statement *body); Statement *syntaxCopy(); @@ -312,7 +343,7 @@ Arguments *arguments; // array of Argument*'s Expression *aggr; Statement *body; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; VarDeclaration *key; VarDeclaration *value; @@ -409,7 +440,7 @@ Expression *condition; Statement *body; DefaultStatement *sdefault; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; Array gotoCases; // array of unresolved GotoCaseStatement's Array *cases; // array of CaseStatement's @@ -484,7 +515,7 @@ struct GotoDefaultStatement : Statement { SwitchStatement *sw; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; GotoDefaultStatement(Loc loc); Statement *syntaxCopy(); @@ -500,7 +531,7 @@ { Expression *exp; // NULL, or which case to goto CaseStatement *cs; // case statement it resolves to - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; SwitchStatement *sw; GotoCaseStatement(Loc loc, Expression *exp); @@ -525,7 +556,7 @@ struct ReturnStatement : Statement { Expression *exp; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; ReturnStatement(Loc loc, Expression *exp); Statement *syntaxCopy(); @@ -546,7 +577,7 @@ struct BreakStatement : Statement { Identifier *ident; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; BreakStatement(Loc loc, Identifier *ident); Statement *syntaxCopy(); @@ -564,7 +595,7 @@ struct ContinueStatement : Statement { Identifier *ident; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; ContinueStatement(Loc loc, Identifier *ident); Statement *syntaxCopy(); @@ -583,6 +614,7 @@ { Expression *exp; Statement *body; + EnclosingHandler* enclosinghandler; SynchronizedStatement(Loc loc, Expression *exp, Statement *body); Statement *syntaxCopy(); @@ -599,6 +631,7 @@ elem *esync; SynchronizedStatement(Loc loc, elem *esync, Statement *body); void toIR(IRState *irs); + llvm::Value* llsync; }; struct WithStatement : Statement @@ -656,7 +689,7 @@ { Statement *body; Statement *finalbody; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; TryFinallyStatement(Loc loc, Statement *body, Statement *finalbody); Statement *syntaxCopy(); @@ -705,6 +738,7 @@ struct VolatileStatement : Statement { Statement *statement; + EnclosingHandler* enclosinghandler; VolatileStatement(Loc loc, Statement *statement); Statement *syntaxCopy(); @@ -723,7 +757,7 @@ Identifier *ident; LabelDsymbol *label; TryFinallyStatement *tf; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; GotoStatement(Loc loc, Identifier *ident); Statement *syntaxCopy(); @@ -741,7 +775,7 @@ Identifier *ident; Statement *statement; TryFinallyStatement *tf; - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; block *lblock; // back end int isReturnLabel; @@ -798,7 +832,7 @@ struct AsmBlockStatement : CompoundStatement { - TryFinallyStatement *enclosingtryfinally; + EnclosingHandler* enclosinghandler; AsmBlockStatement(Loc loc, Statements *s); Statements *flatten(Scope *sc);