Mercurial > projects > ddmd
diff dmd/ArrayLengthExp.d @ 162:438eaa11eed4
updated build script to use dmd2.039
some missing methods implemented
author | korDen |
---|---|
date | Tue, 21 Sep 2010 14:59:56 +0400 |
parents | 60bb0fe4563e |
children | d237b38b5858 |
line wrap: on
line diff
--- a/dmd/ArrayLengthExp.d Mon Sep 20 01:19:36 2010 +0400 +++ b/dmd/ArrayLengthExp.d Tue Sep 21 14:59:56 2010 +0400 @@ -2,6 +2,8 @@ import dmd.common; import dmd.Expression; +import dmd.GlobalExpressions; +import dmd.IntegerExp; import dmd.BinExp; import dmd.backend.elem; import dmd.UnaExp; @@ -95,7 +97,29 @@ override Expression interpret(InterState istate) { - assert(false); + Expression e; + Expression e1; + +version (LOG) { + printf("ArrayLengthExp.interpret() %s\n", toChars()); +} + e1 = this.e1.interpret(istate); + if (e1 is EXP_CANT_INTERPRET) + goto Lcant; + if (e1.op == TOKstring || e1.op == TOKarrayliteral || e1.op == TOKassocarrayliteral) + { + e = ArrayLength(type, e1); + } + else if (e1.op == TOKnull) + { + e = new IntegerExp(loc, 0, type); + } + else + goto Lcant; + return e; + + Lcant: + return EXP_CANT_INTERPRET; } override void toCBuffer(OutBuffer buf, HdrGenState* hgs)