Rework gc descriptor to include size information in more cases.
[mono.git] / mcs / mcs / cfold.cs
index ada59bc665bf44998b41efc4a35fe46576252532..7580124ceead35f46cd9af384fdc17b2fe99dcb8 100644 (file)
@@ -6,7 +6,7 @@
 //   Marek Safar (marek.safar@seznam.cz)
 //
 // Copyright 2002, 2003 Ximian, Inc.
-// Copyright 2003-2008, Novell, Inc.
+// Copyright 2003-2011, Novell, Inc.
 // 
 using System;
 
@@ -467,7 +467,8 @@ namespace Mono.CSharp {
                                }
 
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -563,7 +564,8 @@ namespace Mono.CSharp {
                                
                        case Binary.Operator.Multiply:
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -658,7 +660,8 @@ namespace Mono.CSharp {
 
                        case Binary.Operator.Division:
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -757,7 +760,8 @@ namespace Mono.CSharp {
                                
                        case Binary.Operator.Modulus:
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -846,7 +850,8 @@ namespace Mono.CSharp {
                                //
                        case Binary.Operator.LeftShift:
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -882,7 +887,8 @@ namespace Mono.CSharp {
                                //
                        case Binary.Operator.RightShift:
                                if (left is NullLiteral && right is NullLiteral) {
-                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                       var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                       lifted_int.ResolveAsType (ec);
                                        return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                }
 
@@ -913,7 +919,7 @@ namespace Mono.CSharp {
                                break;
 
                        case Binary.Operator.Equality:
-                               if (TypeManager.IsReferenceType (lt) && TypeManager.IsReferenceType (rt) ||
+                               if (TypeSpec.IsReferenceType (lt) && TypeSpec.IsReferenceType (rt) ||
                                        (left is Nullable.LiftedNull && right.IsNull) ||
                                        (right is Nullable.LiftedNull && left.IsNull)) {
                                        if (left.IsNull || right.IsNull) {
@@ -957,7 +963,7 @@ namespace Mono.CSharp {
                                return new BoolConstant (ec.BuiltinTypes, bool_res, left.Location);
 
                        case Binary.Operator.Inequality:
-                               if (TypeManager.IsReferenceType (lt) && TypeManager.IsReferenceType (rt) ||
+                               if (TypeSpec.IsReferenceType (lt) && TypeSpec.IsReferenceType (rt) ||
                                        (left is Nullable.LiftedNull && right.IsNull) ||
                                        (right is Nullable.LiftedNull && left.IsNull)) {
                                        if (left.IsNull || right.IsNull) {
@@ -1003,7 +1009,8 @@ namespace Mono.CSharp {
                        case Binary.Operator.LessThan:
                                if (right is NullLiteral) {
                                        if (left is NullLiteral) {
-                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                               lifted_int.ResolveAsType (ec);
                                                return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                        }
 
@@ -1042,7 +1049,8 @@ namespace Mono.CSharp {
                        case Binary.Operator.GreaterThan:
                                if (right is NullLiteral) {
                                        if (left is NullLiteral) {
-                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                               lifted_int.ResolveAsType (ec);
                                                return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                        }
 
@@ -1081,7 +1089,8 @@ namespace Mono.CSharp {
                        case Binary.Operator.GreaterThanOrEqual:
                                if (right is NullLiteral) {
                                        if (left is NullLiteral) {
-                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                               lifted_int.ResolveAsType (ec);
                                                return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                        }
 
@@ -1120,7 +1129,8 @@ namespace Mono.CSharp {
                        case Binary.Operator.LessThanOrEqual:
                                if (right is NullLiteral) {
                                        if (left is NullLiteral) {
-                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc).ResolveAsTypeTerminal (ec, false);
+                                               var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
+                                               lifted_int.ResolveAsType (ec);
                                                return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec);
                                        }