diff sema/CheckTypes.d @ 195:4e1a7265d620

Made a BuildTypes pass, to give all exp's a type.
author Anders Johnsen <skabet@gmail.com>
date Tue, 29 Jul 2008 15:50:24 +0200
parents 08f68d684047
children
line wrap: on
line diff
--- a/sema/CheckTypes.d	Tue Jul 29 13:54:44 2008 +0200
+++ b/sema/CheckTypes.d	Tue Jul 29 15:50:24 2008 +0200
@@ -21,7 +21,7 @@
     {
         super.visitBinaryExp(exp);
 
-        if(!(exp.left.type is exp.right.type))
+        if(!exp.left.type.isSame(exp.right.type))
         {
             if (!exp.right.type.hasImplicitConversionTo(exp.left.type) &&
                 !exp.left.type.hasImplicitConversionTo(exp.right.type))
@@ -59,7 +59,7 @@
                             SLoc.Invalid,
                             new Identifier(exp.left.type.name),
                             exp.right);
-                    else if(exp.left.type.byteSize > exp.right.type.byteSize)
+                    else if(exp.left.type.byteSize < exp.right.type.byteSize)
                         castExp = new CastExp(
                             SLoc.Invalid,
                             new Identifier(exp.right.type.name),
@@ -75,9 +75,15 @@
                 {
                     castExp.env = exp.env;
                     if(castExp.exp == exp.right)
+                    {
+                        exp.type = castExp.type = exp.left.type;
                         exp.right = castExp;
+                    }
                     else
+                    {
+                        exp.type = castExp.type = exp.right.type;
                         exp.left = castExp;
+                    }
 
                 }
             }
@@ -98,7 +104,7 @@
                     [exp.loc])
                 .arg(exp.exp.type.toString);
 
-            exp._type = DType.Int;
+            exp.type = DType.Int;
         }
     }
 
@@ -177,6 +183,7 @@
                             new Identifier(argType.name),
                             arg);
                     castExp.env = iden.env;
+                    castExp.type = argType;
                     newArgs ~= castExp;
                 }
                 else
@@ -245,6 +252,7 @@
                             new Identifier(argType.name),
                             arg);
                     castExp.env = iden.env;
+                    castExp.type = argType;
                     newArgs ~= castExp;
                 }
                 else
@@ -272,6 +280,7 @@
                             new Identifier(argType.name),
                             arg);
                     castExp.env = exp.exp.env;
+                    castExp.type = argType;
                     newArgs ~= castExp;
                 }
                 else
@@ -316,6 +325,7 @@
                             new Identifier(argType.name),
                             arg);
                     castExp.env = exp.newType.env;
+                    castExp.type = argType;
                     newArgs ~= castExp;
                 }
                 else
@@ -357,6 +367,7 @@
                     new Identifier(identifierType.name),
                     exp.exp);
             castExp.env = exp.exp.env;
+            exp.type = castExp.type = identifierType;
             exp.exp = castExp;
         }
 
@@ -388,6 +399,7 @@
                         new Identifier(returnType.name),
                         stmt.exp);
                 castExp.env = stmt.exp.env;
+                castExp.type = returnType;
                 stmt.exp = castExp;
             }
         }
@@ -413,6 +425,7 @@
                         new Identifier(varType.name),
                         decl.init);
                 castExp.env = decl.init.env;
+                castExp.type = varType;
                 decl.init = castExp;
             }
         }