From 784a683b04ac390c1660a714e82720a172c5af1b Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 9 Jun 2011 16:23:47 -0700 Subject: solved -- conflict between int and short -- method calls type definitions -- exception returning outvar count (?) -- nested addressing issue in parameters -- enum arguments as literals -- initially declared boogie procedures are public now --- BCT/BytecodeTranslator/MetadataTraverser.cs | 34 +++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'BCT/BytecodeTranslator/MetadataTraverser.cs') diff --git a/BCT/BytecodeTranslator/MetadataTraverser.cs b/BCT/BytecodeTranslator/MetadataTraverser.cs index 5b61a6ca..eb1aa8c5 100644 --- a/BCT/BytecodeTranslator/MetadataTraverser.cs +++ b/BCT/BytecodeTranslator/MetadataTraverser.cs @@ -326,20 +326,26 @@ namespace BytecodeTranslator { var mdc = c as IMetadataConstant; if (mdc != null) { object o; - switch (mdc.Type.TypeCode) { - case PrimitiveTypeCode.Boolean: - o = (bool)mdc.Value ? Bpl.Expr.True : Bpl.Expr.False; - break; - case PrimitiveTypeCode.Int32: - var lit = Bpl.Expr.Literal((int)mdc.Value); - lit.Type = Bpl.Type.Int; - o = lit; - break; - case PrimitiveTypeCode.String: - o = mdc.Value; - break; - default: - throw new InvalidCastException("Invalid metadata constant type"); + if (mdc.Type.IsEnum) { + var lit = Bpl.Expr.Literal((int) mdc.Value); + lit.Type = Bpl.Type.Int; + o = lit; + } else { + switch (mdc.Type.TypeCode) { + case PrimitiveTypeCode.Boolean: + o = (bool) mdc.Value ? Bpl.Expr.True : Bpl.Expr.False; + break; + case PrimitiveTypeCode.Int32: + var lit = Bpl.Expr.Literal((int) mdc.Value); + lit.Type = Bpl.Type.Int; + o = lit; + break; + case PrimitiveTypeCode.String: + o = mdc.Value; + break; + default: + throw new InvalidCastException("Invalid metadata constant type"); + } } args[argIndex++] = o; } -- cgit v1.2.3