projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #819 from brendanzagaeski/patch-1
[mono.git]
/
mcs
/
mcs
/
cfold.cs
diff --git
a/mcs/mcs/cfold.cs
b/mcs/mcs/cfold.cs
index 2e453ab724ee715f7561985da524b23d1ec88724..bea0ee06df05bf7a2e542eacd6dd617bccbb801a 100644
(file)
--- a/
mcs/mcs/cfold.cs
+++ b/
mcs/mcs/cfold.cs
@@
-183,11
+183,11
@@
namespace Mono.CSharp {
switch (oper){
case Binary.Operator.BitwiseOr:
//
switch (oper){
case Binary.Operator.BitwiseOr:
//
- // bool? operator
&
(bool? x, bool? y);
+ // bool? operator
|
(bool? x, bool? y);
//
if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) ||
(rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) {
//
if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) ||
(rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) {
- var b = new
Nullable.LiftedBinaryOperator (oper, left, right).Resolve
(ec);
+ var b = new
Binary (oper, left, right).ResolveOperator
(ec);
// false | null => null
// null | false => null
// false | null => null
// null | false => null
@@
-231,7
+231,7
@@
namespace Mono.CSharp {
//
if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) ||
(rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) {
//
if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) ||
(rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) {
- var b = new
Nullable.LiftedBinaryOperator (oper, left, right).Resolve
(ec);
+ var b = new
Binary (oper, left, right).ResolveOperator
(ec);
// false & null => false
// null & false => false
// false & null => false
// null & false => false
@@
-390,14
+390,14
@@
namespace Mono.CSharp {
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
}
if (left is FloatConstant){
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
}
if (left is FloatConstant){
- float res;
-
+ double a, b, res;
+ a = ((FloatConstant) left).DoubleValue;
+ b = ((FloatConstant) right).DoubleValue;
+
if (ec.ConstantCheckState)
if (ec.ConstantCheckState)
- res = checked (((FloatConstant) left).Value +
- ((FloatConstant) right).Value);
+ res = checked (a + b);
else
else
- res = unchecked (((FloatConstant) left).Value +
- ((FloatConstant) right).Value);
+ res = unchecked (a + b);
result = new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
result = new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
@@
-495,7
+495,7
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
@@
-514,14
+514,14
@@
namespace Mono.CSharp {
result = new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
result = new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
- float res;
-
+ double a, b, res;
+ a = ((FloatConstant) left).DoubleValue;
+ b = ((FloatConstant) right).DoubleValue;
+
if (ec.ConstantCheckState)
if (ec.ConstantCheckState)
- res = checked (((FloatConstant) left).Value -
- ((FloatConstant) right).Value);
+ res = checked (a - b);
else
else
- res = unchecked (((FloatConstant) left).Value -
- ((FloatConstant) right).Value);
+ res = unchecked (a - b);
result = new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
result = new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
@@
-592,7
+592,7
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
@@
-611,14
+611,14
@@
namespace Mono.CSharp {
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
- float res;
-
+ double a, b, res;
+ a = ((FloatConstant) left).DoubleValue;
+ b = ((FloatConstant) right).DoubleValue;
+
if (ec.ConstantCheckState)
if (ec.ConstantCheckState)
- res = checked (((FloatConstant) left).Value *
- ((FloatConstant) right).Value);
+ res = checked (a * b);
else
else
- res = unchecked (((FloatConstant) left).Value *
- ((FloatConstant) right).Value);
+ res = unchecked (a * b);
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
@@
-688,7
+688,7
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
@@
-707,14
+707,14
@@
namespace Mono.CSharp {
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
- float res;
-
+ double a, b, res;
+ a = ((FloatConstant) left).DoubleValue;
+ b = ((FloatConstant) right).DoubleValue;
+
if (ec.ConstantCheckState)
if (ec.ConstantCheckState)
- res = checked (((FloatConstant) left).Value /
- ((FloatConstant) right).Value);
+ res = checked (a / b);
else
else
- res = unchecked (((FloatConstant) left).Value /
- ((FloatConstant) right).Value);
+ res = unchecked (a / b);
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
@@
-788,7
+788,7
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
}
if (!DoBinaryNumericPromotions (ec, ref left, ref right))
@@
-807,14
+807,14
@@
namespace Mono.CSharp {
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
return new DoubleConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is FloatConstant){
- float res;
+ double a, b, res;
+ a = ((FloatConstant) left).DoubleValue;
+ b = ((FloatConstant) right).DoubleValue;
if (ec.ConstantCheckState)
if (ec.ConstantCheckState)
- res = checked (((FloatConstant) left).Value %
- ((FloatConstant) right).Value);
+ res = checked (a % b);
else
else
- res = unchecked (((FloatConstant) left).Value %
- ((FloatConstant) right).Value);
+ res = unchecked (a % b);
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
return new FloatConstant (ec.BuiltinTypes, res, left.Location);
} else if (left is ULongConstant){
@@
-878,12
+878,11
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
IntConstant ic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant;
if (ic == null){
}
IntConstant ic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant;
if (ic == null){
- Binary.Error_OperatorCannotBeApplied (ec, left, right, oper, loc);
return null;
}
return null;
}
@@
-899,14
+898,13
@@
namespace Mono.CSharp {
// null << value => null
if (left is NullLiteral)
// null << value => null
if (left is NullLiteral)
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, left, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, left, right).ResolveOperator
(ec);
left = left.ConvertImplicitly (ec.BuiltinTypes.Int);
if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int)
return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value << lshift_val, left.Location);
left = left.ConvertImplicitly (ec.BuiltinTypes.Int);
if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int)
return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value << lshift_val, left.Location);
- Binary.Error_OperatorCannotBeApplied (ec, left, right, oper, loc);
- break;
+ return null;
//
// There is no overflow checking on right shift
//
// There is no overflow checking on right shift
@@
-915,12
+913,11
@@
namespace Mono.CSharp {
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral && right is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, lifted_int, right).ResolveOperator
(ec);
}
IntConstant sic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant;
if (sic == null){
}
IntConstant sic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant;
if (sic == null){
- Binary.Error_OperatorCannotBeApplied (ec, left, right, oper, loc); ;
return null;
}
int rshift_val = sic.Value;
return null;
}
int rshift_val = sic.Value;
@@
-935,14
+932,13
@@
namespace Mono.CSharp {
// null >> value => null
if (left is NullLiteral)
// null >> value => null
if (left is NullLiteral)
- return (Constant) new
Nullable.LiftedBinaryOperator (oper, left, right).Resolve
(ec);
+ return (Constant) new
Binary (oper, left, right).ResolveOperator
(ec);
left = left.ConvertImplicitly (ec.BuiltinTypes.Int);
if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int)
return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value >> rshift_val, left.Location);
left = left.ConvertImplicitly (ec.BuiltinTypes.Int);
if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int)
return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value >> rshift_val, left.Location);
- Binary.Error_OperatorCannotBeApplied (ec, left, right, oper, loc);
- break;
+ return null;
case Binary.Operator.Equality:
if (TypeSpec.IsReferenceType (lt) && TypeSpec.IsReferenceType (rt) ||
case Binary.Operator.Equality:
if (TypeSpec.IsReferenceType (lt) && TypeSpec.IsReferenceType (rt) ||
@@
-969,8
+965,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value ==
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value ==
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value ==
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value ==
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value ==
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value ==
((ULongConstant) right).Value;
@@
-1013,8
+1009,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value !=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value !=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value !=
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value !=
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value !=
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value !=
((ULongConstant) right).Value;
@@
-1037,11
+1033,7
@@
namespace Mono.CSharp {
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec);
- }
-
- if (left is Nullable.LiftedNull) {
- return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec);
+ return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec);
}
}
}
}
@@
-1053,8
+1045,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value <
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value <
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value <
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value <
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value <
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value <
((ULongConstant) right).Value;
@@
-1077,11
+1069,7
@@
namespace Mono.CSharp {
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec);
- }
-
- if (left is Nullable.LiftedNull) {
- return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec);
+ return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec);
}
}
}
}
@@
-1093,8
+1081,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value >
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value >
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value >
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value >
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value >
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value >
((ULongConstant) right).Value;
@@
-1117,11
+1105,7
@@
namespace Mono.CSharp {
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec);
- }
-
- if (left is Nullable.LiftedNull) {
- return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec);
+ return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec);
}
}
}
}
@@
-1133,8
+1117,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value >=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value >=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value >=
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value >=
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value >=
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value >=
((ULongConstant) right).Value;
@@
-1157,11
+1141,7
@@
namespace Mono.CSharp {
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
if (left is NullLiteral) {
var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc);
lifted_int.ResolveAsType (ec);
- return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec);
- }
-
- if (left is Nullable.LiftedNull) {
- return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec);
+ return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec);
}
}
}
}
@@
-1173,8
+1153,8
@@
namespace Mono.CSharp {
bool_res = ((DoubleConstant) left).Value <=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
bool_res = ((DoubleConstant) left).Value <=
((DoubleConstant) right).Value;
else if (left is FloatConstant)
- bool_res = ((FloatConstant) left).Value <=
- ((FloatConstant) right).Value;
+ bool_res = ((FloatConstant) left).
Double
Value <=
+ ((FloatConstant) right).
Double
Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value <=
((ULongConstant) right).Value;
else if (left is ULongConstant)
bool_res = ((ULongConstant) left).Value <=
((ULongConstant) right).Value;
@@
-1192,7
+1172,7
@@
namespace Mono.CSharp {
return new BoolConstant (ec.BuiltinTypes, bool_res, left.Location);
}
return new BoolConstant (ec.BuiltinTypes, bool_res, left.Location);
}
-
+
return null;
}
}
return null;
}
}