Mercurial > projects > ddmd
diff dmd/ForeachStatement.d @ 66:efb1e5bdf63c
more implementations
author | korDen |
---|---|
date | Mon, 23 Aug 2010 20:38:30 +0400 |
parents | cab4c37afb89 |
children | 2e2a5c3f943a |
line wrap: on
line diff
--- a/dmd/ForeachStatement.d Mon Aug 23 20:29:38 2010 +0400 +++ b/dmd/ForeachStatement.d Mon Aug 23 20:38:30 2010 +0400 @@ -2,6 +2,7 @@ import dmd.Statement; import dmd.TOK; +import dmd.Token; import dmd.Loc; import dmd.LINK; import dmd.ArrayTypes; @@ -782,27 +783,39 @@ bool hasBreak() { - assert(false); + return true; } bool hasContinue() { - assert(false); + return true; } bool usesEH() { - assert(false); + return body_.usesEH(); } BE blockExit() { - assert(false); + BE result = BEfallthru; + + if (aggr.canThrow()) + result |= BEthrow; + + if (body_) + { + result |= body_.blockExit() & ~(BEbreak | BEcontinue); + } + return result; } bool comeFrom() { - assert(false); + if (body_) + return body_.comeFrom(); + + return false; } Expression interpret(InterState istate) @@ -810,9 +823,32 @@ assert(false); } - void toCBuffer(OutBuffer uf, HdrGenState* hgs) + void toCBuffer(OutBuffer buf, HdrGenState* hgs) { - assert(false); + buf.writestring(Token.toChars(op)); + buf.writestring(" ("); + for (int i = 0; i < arguments.dim; i++) + { + Argument a = cast(Argument)arguments.data[i]; + if (i) + buf.writestring(", "); + if (a.storageClass & STCref) + buf.writestring((global.params.Dversion == 1) ? "inout " : "ref "); + if (a.type) + a.type.toCBuffer(buf, a.ident, hgs); + else + buf.writestring(a.ident.toChars()); + } + buf.writestring("; "); + aggr.toCBuffer(buf, hgs); + buf.writebyte(')'); + buf.writenl(); + buf.writebyte('{'); + buf.writenl(); + if (body_) + body_.toCBuffer(buf, hgs); + buf.writebyte('}'); + buf.writenl(); } Statement inlineScan(InlineScanState* iss)