Mercurial > projects > dang
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; } }