changeset 120:46ef67271ef3

merge
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Thu, 02 Sep 2010 20:19:14 +0100
parents 2e2113cf863c (current diff) fe941d774f4a (diff)
children 347de076ad34
files ddmd.visualdproj
diffstat 29 files changed, 114 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/ddmd.visualdproj	Thu Sep 02 20:17:57 2010 +0100
+++ b/ddmd.visualdproj	Thu Sep 02 20:19:14 2010 +0100
@@ -98,7 +98,7 @@
   <verbose>0</verbose>
   <vtls>0</vtls>
   <symdebug>0</symdebug>
-  <optimize>0</optimize>
+  <optimize>1</optimize>
   <cpu>0</cpu>
   <isX86_64>0</isX86_64>
   <isLinux>0</isLinux>
--- a/dmd/AddAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/AddAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.AddAssignExp;
 
 import dmd.common;
+import dmd.expression.Add;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -142,7 +143,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Add);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/AddExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/AddExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -114,7 +114,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Add);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/AndAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/AndAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.AndAssignExp;
 
 import dmd.common;
+import dmd.expression.And;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -30,7 +31,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &And);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/AndExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/AndExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -75,7 +75,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &And);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/BinExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/BinExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -655,7 +655,7 @@
 
     bool isunsigned()
 	{
-		assert(false);
+		return e1.type.isunsigned() || e2.type.isunsigned();
 	}
 	
     void incompatibleTypes()
@@ -670,25 +670,82 @@
 		assert(false);
 	}
 
-    void scanForNestedRef(Scope *sc)
-	{
-		assert(false);
-	}
-	
-    Expression interpretCommon(InterState istate, Expression *(*fp)(Type *, Expression *, Expression *))
+    void scanForNestedRef(Scope sc)
 	{
 		assert(false);
 	}
 
-    Expression interpretCommon2(InterState istate, Expression *(*fp)(TOK, Type *, Expression *, Expression *))
+	Expression interpretCommon(InterState istate, Expression function(Type, Expression, Expression) fp)
+	{
+		Expression e;
+		Expression e1;
+		Expression e2;
+
+version(LOG)
+{
+		writef("BinExp::interpretCommon() %s\n", toChars());
+}
+		e1 = this.e1.interpret(istate);
+		if (e1 is EXP_CANT_INTERPRET)
+			goto Lcant;
+		if (e1.isConst() != 1)
+			goto Lcant;
+
+		e2 = this.e2.interpret(istate);
+		if (e2 is EXP_CANT_INTERPRET)
+			goto Lcant;
+		if (e2.isConst() != 1)
+			goto Lcant;
+
+		e = fp(type, e1, e2);
+		return e;
+
+	Lcant:
+		return EXP_CANT_INTERPRET;
+	}
+
+	Expression interpretCommon2(InterState istate, Expression function(TOK, Type, Expression, Expression) fp)
 	{
-		assert(false);
+		Expression e;
+		Expression e1;
+		Expression e2;
+
+version(LOG)
+{
+		writef("BinExp::interpretCommon2() %s\n", toChars());
+}
+		e1 = this.e1.interpret(istate);
+		if (e1 is EXP_CANT_INTERPRET)
+			goto Lcant;
+		if (e1.isConst() != 1 &&
+			e1.op != TOKnull &&
+			e1.op != TOKstring &&
+			e1.op != TOKarrayliteral &&
+			e1.op != TOKstructliteral)
+			goto Lcant;
+
+		e2 = this.e2.interpret(istate);
+		if (e2 is EXP_CANT_INTERPRET)
+			goto Lcant;
+		if (e2.isConst() != 1 &&
+			e2.op != TOKnull &&
+			e2.op != TOKstring &&
+			e2.op != TOKarrayliteral &&
+			e2.op != TOKstructliteral)
+			goto Lcant;
+
+		e = fp(op, type, e1, e2);
+		return e;
+
+	Lcant:
+		return EXP_CANT_INTERPRET;
 	}
 	
-    Expression interpretAssignCommon(InterState istate, Expression (*fp)(Type, Expression, Expression), int post = 0)
+    Expression interpretAssignCommon(InterState istate, Expression function(Type, Expression, Expression) fp, int post = 0)
 	{
-version (LOG) {
-		printf("BinExp.interpretAssignCommon() %.*s\n", toChars());
+version (LOG)
+{
+		writef("BinExp.interpretAssignCommon() %.*s\n", toChars());
 }
 		Expression e = EXP_CANT_INTERPRET;
 		Expression e1 = this.e1;
@@ -1324,7 +1381,8 @@
 		}
 		return e;
 	}
-	
+
+	version(DMDV2)
     override bool canThrow()
 	{
 		return e1.canThrow() || e2.canThrow();
--- a/dmd/CatAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/CatAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -20,6 +20,7 @@
 import dmd.backend.TYM;
 import dmd.backend.mTY;
 
+import dmd.expression.Cat;
 import dmd.expression.Util;
 
 class CatAssignExp : BinExp
@@ -84,7 +85,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Cat);
 	}
 
     override Identifier opId()    /* For operator overloading */
--- a/dmd/CmpExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/CmpExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -141,7 +141,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon2(istate, &Cmp);
 	}
 
 	override int isBit()
--- a/dmd/DivAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/DivAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -21,6 +21,7 @@
 import dmd.backend.elem;
 import dmd.backend.OPER;
 import dmd.backend.Util;
+import dmd.expression.Div;
 import dmd.expression.Util;
 
 class DivAssignExp : BinExp
@@ -95,7 +96,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Div);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/DivExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/DivExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -108,7 +108,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Div);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/EqualExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/EqualExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -143,12 +143,12 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon2(istate, &Equal);
 	}
 
-	override int isBit()
+	override bool isBit()
 	{
-		assert(false);
+		return true;
 	}
 
 	override bool isCommutative()
--- a/dmd/IdentityExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/IdentityExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -72,7 +72,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon2(istate, &Identity);
 	}
 
 	override elem* toElem(IRState* irs)
--- a/dmd/MinAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/MinAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.MinAssignExp;
 
 import dmd.common;
+import dmd.expression.Min;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -70,7 +71,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Min);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/MinExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/MinExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -140,7 +140,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Min);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/ModAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ModAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.ModAssignExp;
 
 import dmd.common;
+import dmd.expression.Mod;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -32,7 +33,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Mod);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/ModExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ModExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -75,7 +75,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Mod);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/MulAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/MulAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -17,6 +17,7 @@
 
 import dmd.backend.elem;
 import dmd.backend.OPER;
+import dmd.expression.Mul;
 import dmd.expression.Util;
 
 class MulAssignExp : BinExp
@@ -87,7 +88,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Mul);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/MulExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/MulExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -113,7 +113,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Mul);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/OrAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/OrAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.OrAssignExp;
 
 import dmd.common;
+import dmd.expression.Or;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -30,7 +31,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Or);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/OrExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/OrExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -76,7 +76,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Or);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/PragmaDeclaration.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/PragmaDeclaration.d	Thu Sep 02 20:19:14 2010 +0100
@@ -61,7 +61,7 @@
 					if (e.op == TOKstring)
 					{
 						auto se = cast(StringExp)e;
-						writef("%s", se.toChars()[1..$-3] /*se.len, cast(char*)se.string_*/);
+						writef("%s", se.toChars()[1..$-2] /*se.len, cast(char*)se.string_*/);
 					}
 					else
 						writef(e.toChars());
--- a/dmd/ShlAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ShlAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -13,6 +13,7 @@
 import dmd.Type;
 import dmd.backend.elem;
 import dmd.backend.OPER;
+import dmd.expression.Shl;
 import dmd.expression.Util;
 
 class ShlAssignExp : BinExp
@@ -47,7 +48,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Shl);
 	}
 
     override Identifier opId()    /* For operator overloading */
--- a/dmd/ShlExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ShlExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -57,7 +57,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Shl);
 	}
 
 	override IntRange getIntRange()
--- a/dmd/ShrAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ShrAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -15,6 +15,7 @@
 import dmd.backend.elem;
 import dmd.backend.OPER;
 
+import dmd.expression.Shr;
 import dmd.expression.Util;
 
 class ShrAssignExp : BinExp
@@ -49,7 +50,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Shr);
 	}
 
     override Identifier opId()    /* For operator overloading */
--- a/dmd/ShrExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/ShrExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -55,7 +55,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Shr);
 	}
 
 	override IntRange getIntRange()
--- a/dmd/UshrAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/UshrAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -12,6 +12,7 @@
 import dmd.TOK;
 import dmd.Type;
 import dmd.backend.elem;
+import dmd.expression.Ushr;
 import dmd.expression.Util;
 
 class UshrAssignExp : BinExp
@@ -45,7 +46,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Ushr);
 	}
 
     override Identifier opId()    /* For operator overloading */
--- a/dmd/UshrExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/UshrExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -55,7 +55,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Ushr);
 	}
 
 	override IntRange getIntRange()
@@ -82,5 +82,4 @@
 		el_setLoc(e, loc);
 		return e;
 	}
-}
-
+}
\ No newline at end of file
--- a/dmd/XorAssignExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/XorAssignExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -1,6 +1,7 @@
 module dmd.XorAssignExp;
 
 import dmd.common;
+import dmd.expression.Xor;
 import dmd.BinExp;
 import dmd.Loc;
 import dmd.Expression;
@@ -29,7 +30,7 @@
 	
     override Expression interpret(InterState istate)
 	{
-		assert(false);
+    	return interpretAssignCommon(istate, &Xor);
 	}
 	
     override void buildArrayIdent(OutBuffer buf, Expressions arguments)
--- a/dmd/XorExp.d	Thu Sep 02 20:17:57 2010 +0100
+++ b/dmd/XorExp.d	Thu Sep 02 20:19:14 2010 +0100
@@ -73,7 +73,7 @@
 
 	override Expression interpret(InterState istate)
 	{
-		assert(false);
+		return interpretCommon(istate, &Xor);
 	}
 
 	override void buildArrayIdent(OutBuffer buf, Expressions arguments)