diff options
author | 2011-04-27 14:14:44 -0700 | |
---|---|---|
committer | 2011-04-27 14:14:44 -0700 | |
commit | 5970aa91f736ff69ef420a677d6ba2b7d160e937 (patch) | |
tree | cf576dcc0857f851a631a97e17f78e13e014d513 | |
parent | d32159a200f36e43d1f88347edf59eab5a57687c (diff) | |
parent | e45880eaaae633b0d4627503d873433af9cb125b (diff) |
Merge
-rw-r--r-- | BCT/BytecodeTranslator/ExpressionTraverser.cs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/BCT/BytecodeTranslator/ExpressionTraverser.cs b/BCT/BytecodeTranslator/ExpressionTraverser.cs index 851dc20b..7a34cd11 100644 --- a/BCT/BytecodeTranslator/ExpressionTraverser.cs +++ b/BCT/BytecodeTranslator/ExpressionTraverser.cs @@ -969,6 +969,42 @@ namespace BytecodeTranslator return;
}
+ public override void Visit(IConversion conversion)
+ {
+ var tok = conversion.ValueToConvert.Token();
+ Visit(conversion.ValueToConvert);
+ var exp = TranslatedExpressions.Pop();
+ switch (conversion.TypeAfterConversion.TypeCode) {
+ case PrimitiveTypeCode.Int16:
+ case PrimitiveTypeCode.Int32:
+ case PrimitiveTypeCode.Int64:
+ case PrimitiveTypeCode.Int8:
+ switch (conversion.ValueToConvert.Type.TypeCode) {
+ case PrimitiveTypeCode.Boolean:
+ TranslatedExpressions.Push(
+ new Bpl.NAryExpr(tok, new Bpl.IfThenElse(tok), new Bpl.ExprSeq(exp, Bpl.Expr.Literal(1), Bpl.Expr.Literal(0)))
+ );
+ return;
+ default:
+ throw new NotImplementedException();
+ }
+ case PrimitiveTypeCode.Boolean:
+ switch (conversion.ValueToConvert.Type.TypeCode) {
+ case PrimitiveTypeCode.Int16:
+ case PrimitiveTypeCode.Int32:
+ case PrimitiveTypeCode.Int64:
+ case PrimitiveTypeCode.Int8:
+ TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Neq, exp, Bpl.Expr.Literal(0)));
+ return;
+ default:
+ throw new NotImplementedException();
+
+ }
+ default:
+ throw new NotImplementedException();
+ }
+ }
+
public override void Visit(IUnaryNegation unaryNegation)
{
base.Visit(unaryNegation);
|