Mercurial > projects > ddmd
view dmd/StaticIfDeclaration.d @ 0:10317f0c89a5
Initial commit
author | korDen |
---|---|
date | Sat, 24 Oct 2009 08:42:06 +0400 |
parents | |
children | 427f8aa74d28 1628b221808d |
line wrap: on
line source
module dmd.StaticIfDeclaration; import dmd.ConditionalDeclaration; import dmd.ScopeDsymbol; import dmd.AttribDeclaration; import dmd.Scope; import dmd.Condition; import dmd.Array; import dmd.Dsymbol; class StaticIfDeclaration : ConditionalDeclaration { ScopeDsymbol sd; int addisdone; this(Condition condition, Array decl, Array elsedecl) { super(condition, decl, elsedecl); //printf("StaticIfDeclaration::StaticIfDeclaration()\n"); } Dsymbol syntaxCopy(Dsymbol s) { assert(false); } bool addMember(Scope sc, ScopeDsymbol sd, int memnum) { //printf("StaticIfDeclaration.addMember() '%s'\n",toChars()); /* This is deferred until semantic(), so that * expressions in the condition can refer to declarations * in the same scope, such as: * * template Foo(int i) * { * const int j = i + 1; * static if (j == 3) * const int k; * } */ this.sd = sd; bool m = false; if (memnum == 0) { m = AttribDeclaration.addMember(sc, sd, memnum); addisdone = 1; } return m; } void semantic(Scope sc) { Array d = include(sc, sd); //printf("\tStaticIfDeclaration.semantic '%s', d = %p\n",toChars(), d); if (d) { if (!addisdone) { AttribDeclaration.addMember(sc, sd, 1); addisdone = 1; } for (uint i = 0; i < d.dim; i++) { Dsymbol s = cast(Dsymbol)d.data[i]; s.semantic(sc); } } } string kind() { assert(false); } }