// converted to type ulong. or an error ocurrs if the other
// operand is of type sbyte, short, int or long
//
+#if WRONG
Constant match, other;
+#endif
if (left is ULongConstant){
+#if WRONG
other = right;
match = left;
+#endif
if (!(right is ULongConstant))
right = right.ToULong (loc);
} else {
+#if WRONG
other = left;
match = right;
+#endif
left = left.ToULong (loc);
}
// operand is of type sbyte, short or int, the operands are
// converted to type long.
//
- Constant match, other;
- if (left is UIntConstant){
+ Constant other;
+ if (left is UIntConstant)
other = right;
- match = left;
- } else {
+ else
other = left;
- match = right;
- }
// Nothing to do.
if (other is UIntConstant)
return;
- if (other is SByteConstant || other is ShortConstant ||
- other is IntConstant){
+ IntConstant ic = other as IntConstant;
+ if (ic != null){
+ if (ic.Value >= 0){
+ if (left == other)
+ left = new UIntConstant ((uint) ic.Value, ic.Location);
+ else
+ right = new UIntConstant ((uint) ic.Value, ic.Location);
+ return;
+ }
+ }
+
+ if (other is SByteConstant || other is ShortConstant || ic != null){
left = left.ToLong (loc);
right = right.ToLong (loc);
+ } else {
+ left = left.ToUInt (loc);
+ right = left.ToUInt (loc);
}
return;
+ } else if (left is DecimalConstant || right is DecimalConstant) {
+ if (!(left is DecimalConstant))
+ left = left.ToDecimal (loc);
+ else if (!(right is DecimalConstant))
+ right = right.ToDecimal (loc);
+ return;
} else if (left is EnumConstant || right is EnumConstant){
- //
- // If either operand is an enum constant, the other one must
- // be implicitly convertable to that enum's underlying type.
- //
- EnumConstant match;
- Constant other;
- if (left is EnumConstant){
- other = right;
- match = (EnumConstant) left;
- } else {
- other = left;
- match = (EnumConstant) right;
- }
-
- bool need_check = (other is EnumConstant) ||
- ((oper != Binary.Operator.Addition) &&
- (oper != Binary.Operator.Subtraction));
-
- if (need_check &&
- !Convert.ImplicitConversionExists (ec, match, other.Type)) {
- Convert.Error_CannotImplicitConversion (loc, match.Type, other.Type);
- left = null;
- right = null;
- return;
- }
-
if (left is EnumConstant)
left = ((EnumConstant) left).Child;
if (right is EnumConstant)
right = ((EnumConstant) right).Child;
+
+ DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
return;
} else {
Type rt = right.Type;
Type result_type = null;
bool bool_res;
-
+
//
// Enumerator folding
//
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
if (left == null || right == null)
return null;
-
+
if (left is IntConstant){
IntConstant v;
int res = ((IntConstant) left).Value | ((IntConstant) right).Value;
- v = new IntConstant (res);
+ v = new IntConstant (res, left.Location);
if (result_type == null)
return v;
else
UIntConstant v;
uint res = ((UIntConstant)left).Value | ((UIntConstant)right).Value;
- v = new UIntConstant (res);
+ v = new UIntConstant (res, left.Location);
if (result_type == null)
return v;
else
LongConstant v;
long res = ((LongConstant)left).Value | ((LongConstant)right).Value;
- v = new LongConstant (res);
+ v = new LongConstant (res, left.Location);
if (result_type == null)
return v;
else
ulong res = ((ULongConstant)left).Value |
((ULongConstant)right).Value;
- v = new ULongConstant (res);
+ v = new ULongConstant (res, left.Location);
if (result_type == null)
return v;
else
ushort res = (ushort) (((UShortConstant)left).Value |
((UShortConstant)right).Value);
- v = new UShortConstant (res);
+ v = new UShortConstant (res, left.Location);
if (result_type == null)
return v;
else
short res = (short) (((ShortConstant)left).Value |
((ShortConstant)right).Value);
- v = new ShortConstant (res);
+ v = new ShortConstant (res, left.Location);
if (result_type == null)
return v;
else
IntConstant v;
int res = ((IntConstant) left).Value & ((IntConstant) right).Value;
- v = new IntConstant (res);
+ v = new IntConstant (res, left.Location);
if (result_type == null)
return v;
else
UIntConstant v;
uint res = ((UIntConstant)left).Value & ((UIntConstant)right).Value;
- v = new UIntConstant (res);
+ v = new UIntConstant (res, left.Location);
if (result_type == null)
return v;
else
LongConstant v;
long res = ((LongConstant)left).Value & ((LongConstant)right).Value;
- v = new LongConstant (res);
+ v = new LongConstant (res, left.Location);
if (result_type == null)
return v;
else
ulong res = ((ULongConstant)left).Value &
((ULongConstant)right).Value;
- v = new ULongConstant (res);
+ v = new ULongConstant (res, left.Location);
if (result_type == null)
return v;
else
ushort res = (ushort) (((UShortConstant)left).Value &
((UShortConstant)right).Value);
- v = new UShortConstant (res);
+ v = new UShortConstant (res, left.Location);
if (result_type == null)
return v;
else
short res = (short) (((ShortConstant)left).Value &
((ShortConstant)right).Value);
- v = new ShortConstant (res);
+ v = new ShortConstant (res, left.Location);
if (result_type == null)
return v;
else
IntConstant v;
int res = ((IntConstant) left).Value ^ ((IntConstant) right).Value;
- v = new IntConstant (res);
+ v = new IntConstant (res, left.Location);
if (result_type == null)
return v;
else
UIntConstant v;
uint res = ((UIntConstant)left).Value ^ ((UIntConstant)right).Value;
- v = new UIntConstant (res);
+ v = new UIntConstant (res, left.Location);
if (result_type == null)
return v;
else
LongConstant v;
long res = ((LongConstant)left).Value ^ ((LongConstant)right).Value;
- v = new LongConstant (res);
+ v = new LongConstant (res, left.Location);
if (result_type == null)
return v;
else
ulong res = ((ULongConstant)left).Value ^
((ULongConstant)right).Value;
- v = new ULongConstant (res);
+ v = new ULongConstant (res, left.Location);
if (result_type == null)
return v;
else
ushort res = (ushort) (((UShortConstant)left).Value ^
((UShortConstant)right).Value);
- v = new UShortConstant (res);
+ v = new UShortConstant (res, left.Location);
if (result_type == null)
return v;
else
short res = (short)(((ShortConstant)left).Value ^
((ShortConstant)right).Value);
- v = new ShortConstant (res);
+ v = new ShortConstant (res, left.Location);
if (result_type == null)
return v;
else
if (left_is_string && right_is_string)
return new StringConstant (
((StringConstant) left).Value +
- ((StringConstant) right).Value);
+ ((StringConstant) right).Value, left.Location);
return null;
}
if (right is EnumConstant){
return null;
}
- if (((EnumConstant) left).Child.Type != right.Type)
+
+ right = right.ToType (((EnumConstant) left).Child.Type, loc);
+ if (right == null)
return null;
wrap_as = left.Type;
} else if (right is EnumConstant){
- if (((EnumConstant) right).Child.Type != left.Type)
+ left = left.ToType (((EnumConstant) right).Child.Type, loc);
+ if (left == null)
return null;
+
wrap_as = right.Type;
}
res = unchecked (((DoubleConstant) left).Value +
((DoubleConstant) right).Value);
- result = new DoubleConstant (res);
+ result = new DoubleConstant (res, left.Location);
} else if (left is FloatConstant){
float res;
res = unchecked (((FloatConstant) left).Value +
((FloatConstant) right).Value);
- result = new FloatConstant (res);
+ result = new FloatConstant (res, left.Location);
} else if (left is ULongConstant){
ulong res;
res = unchecked (((ULongConstant) left).Value +
((ULongConstant) right).Value);
- result = new ULongConstant (res);
+ result = new ULongConstant (res, left.Location);
} else if (left is LongConstant){
long res;
res = unchecked (((LongConstant) left).Value +
((LongConstant) right).Value);
- result = new LongConstant (res);
+ result = new LongConstant (res, left.Location);
} else if (left is UIntConstant){
uint res;
res = unchecked (((UIntConstant) left).Value +
((UIntConstant) right).Value);
- result = new UIntConstant (res);
+ result = new UIntConstant (res, left.Location);
} else if (left is IntConstant){
int res;
res = unchecked (((IntConstant) left).Value +
((IntConstant) right).Value);
- result = new IntConstant (res);
+ result = new IntConstant (res, left.Location);
+ } else if (left is DecimalConstant) {
+ decimal res;
+
+ if (ec.ConstantCheckState)
+ res = checked (((DecimalConstant) left).Value +
+ ((DecimalConstant) right).Value);
+ else
+ res = unchecked (((DecimalConstant) left).Value +
+ ((DecimalConstant) right).Value);
+
+ result = new DecimalConstant (res, left.Location);
} else {
- throw new Exception ( "Unexepected input: " + left);
+ throw new Exception ( "Unexepected addition input: " + left);
}
} catch (OverflowException){
Error_CompileTimeOverflow (loc);
}
if (wrap_as != null)
- return new EnumConstant (result, wrap_as);
+ return result.TryReduce (ec, wrap_as, loc);
else
return result;
wrap_as = null;
if (left is EnumConstant){
if (right is EnumConstant){
- if (left.Type == right.Type)
- wrap_as = TypeManager.EnumToUnderlying (left.Type);
- else
+ if (left.Type != right.Type) {
+ Binary.Error_OperatorCannotBeApplied (loc, "-", left.Type, right.Type);
+ return null;
+ }
+
+ wrap_as = TypeManager.EnumToUnderlying (left.Type);
+ right = ((EnumConstant) right).Child.ToType (wrap_as, loc);
+ if (right == null)
+ return null;
+
+ left = ((EnumConstant) left).Child.ToType (wrap_as, loc);
+ if (left == null)
return null;
}
- if (((EnumConstant) left).Child.Type != right.Type)
- return null;
+ else {
+ right = right.ToType (((EnumConstant) left).Child.Type, loc);
+ if (right == null)
+ return null;
- wrap_as = left.Type;
+ wrap_as = left.Type;
+ }
} else if (right is EnumConstant){
- if (((EnumConstant) right).Child.Type != left.Type)
+ left = left.ToType (((EnumConstant) right).Child.Type, loc);
+ if (left == null)
return null;
+
wrap_as = right.Type;
}
res = unchecked (((DoubleConstant) left).Value -
((DoubleConstant) right).Value);
- result = new DoubleConstant (res);
+ result = new DoubleConstant (res, left.Location);
} else if (left is FloatConstant){
float res;
res = unchecked (((FloatConstant) left).Value -
((FloatConstant) right).Value);
- result = new FloatConstant (res);
+ result = new FloatConstant (res, left.Location);
} else if (left is ULongConstant){
ulong res;
res = unchecked (((ULongConstant) left).Value -
((ULongConstant) right).Value);
- result = new ULongConstant (res);
+ result = new ULongConstant (res, left.Location);
} else if (left is LongConstant){
long res;
res = unchecked (((LongConstant) left).Value -
((LongConstant) right).Value);
- result = new LongConstant (res);
+ result = new LongConstant (res, left.Location);
} else if (left is UIntConstant){
uint res;
res = unchecked (((UIntConstant) left).Value -
((UIntConstant) right).Value);
- result = new UIntConstant (res);
+ result = new UIntConstant (res, left.Location);
} else if (left is IntConstant){
int res;
res = unchecked (((IntConstant) left).Value -
((IntConstant) right).Value);
- result = new IntConstant (res);
+ result = new IntConstant (res, left.Location);
+ } else if (left is DecimalConstant) {
+ decimal res;
+
+ if (ec.ConstantCheckState)
+ res = checked (((DecimalConstant) left).Value -
+ ((DecimalConstant) right).Value);
+ else
+ res = unchecked (((DecimalConstant) left).Value -
+ ((DecimalConstant) right).Value);
+
+ return new DecimalConstant (res, left.Location);
} else {
- throw new Exception ( "Unexepected input: " + left);
+ throw new Exception ( "Unexepected subtraction input: " + left);
}
} catch (OverflowException){
Error_CompileTimeOverflow (loc);
}
+
if (wrap_as != null)
- return new EnumConstant (result, wrap_as);
- else
- return result;
+ return result.TryReduce (ec, wrap_as, loc);
+
+ return result;
case Binary.Operator.Multiply:
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
if (ec.ConstantCheckState)
res = checked (((DoubleConstant) left).Value *
- ((DoubleConstant) right).Value);
+ ((DoubleConstant) right).Value);
else
res = unchecked (((DoubleConstant) left).Value *
- ((DoubleConstant) right).Value);
+ ((DoubleConstant) right).Value);
- return new DoubleConstant (res);
+ return new DoubleConstant (res, left.Location);
} else if (left is FloatConstant){
float res;
if (ec.ConstantCheckState)
res = checked (((FloatConstant) left).Value *
- ((FloatConstant) right).Value);
+ ((FloatConstant) right).Value);
else
res = unchecked (((FloatConstant) left).Value *
- ((FloatConstant) right).Value);
+ ((FloatConstant) right).Value);
- return new FloatConstant (res);
+ return new FloatConstant (res, left.Location);
} else if (left is ULongConstant){
ulong res;
if (ec.ConstantCheckState)
res = checked (((ULongConstant) left).Value *
- ((ULongConstant) right).Value);
+ ((ULongConstant) right).Value);
else
res = unchecked (((ULongConstant) left).Value *
- ((ULongConstant) right).Value);
+ ((ULongConstant) right).Value);
- return new ULongConstant (res);
+ return new ULongConstant (res, left.Location);
} else if (left is LongConstant){
long res;
if (ec.ConstantCheckState)
res = checked (((LongConstant) left).Value *
- ((LongConstant) right).Value);
+ ((LongConstant) right).Value);
else
res = unchecked (((LongConstant) left).Value *
- ((LongConstant) right).Value);
+ ((LongConstant) right).Value);
- return new LongConstant (res);
+ return new LongConstant (res, left.Location);
} else if (left is UIntConstant){
uint res;
if (ec.ConstantCheckState)
res = checked (((UIntConstant) left).Value *
- ((UIntConstant) right).Value);
+ ((UIntConstant) right).Value);
else
res = unchecked (((UIntConstant) left).Value *
- ((UIntConstant) right).Value);
+ ((UIntConstant) right).Value);
- return new UIntConstant (res);
+ return new UIntConstant (res, left.Location);
} else if (left is IntConstant){
int res;
if (ec.ConstantCheckState)
res = checked (((IntConstant) left).Value *
- ((IntConstant) right).Value);
+ ((IntConstant) right).Value);
else
res = unchecked (((IntConstant) left).Value *
- ((IntConstant) right).Value);
+ ((IntConstant) right).Value);
+
+ return new IntConstant (res, left.Location);
+ } else if (left is DecimalConstant) {
+ decimal res;
- return new IntConstant (res);
+ if (ec.ConstantCheckState)
+ res = checked (((DecimalConstant) left).Value *
+ ((DecimalConstant) right).Value);
+ else
+ res = unchecked (((DecimalConstant) left).Value *
+ ((DecimalConstant) right).Value);
+
+ return new DecimalConstant (res, left.Location);
} else {
- throw new Exception ( "Unexepected input: " + left);
+ throw new Exception ( "Unexepected multiply input: " + left);
}
} catch (OverflowException){
Error_CompileTimeOverflow (loc);
if (ec.ConstantCheckState)
res = checked (((DoubleConstant) left).Value /
- ((DoubleConstant) right).Value);
+ ((DoubleConstant) right).Value);
else
res = unchecked (((DoubleConstant) left).Value /
- ((DoubleConstant) right).Value);
+ ((DoubleConstant) right).Value);
- return new DoubleConstant (res);
+ return new DoubleConstant (res, left.Location);
} else if (left is FloatConstant){
float res;
if (ec.ConstantCheckState)
res = checked (((FloatConstant) left).Value /
- ((FloatConstant) right).Value);
+ ((FloatConstant) right).Value);
else
res = unchecked (((FloatConstant) left).Value /
- ((FloatConstant) right).Value);
+ ((FloatConstant) right).Value);
- return new FloatConstant (res);
+ return new FloatConstant (res, left.Location);
} else if (left is ULongConstant){
ulong res;
if (ec.ConstantCheckState)
res = checked (((ULongConstant) left).Value /
- ((ULongConstant) right).Value);
+ ((ULongConstant) right).Value);
else
res = unchecked (((ULongConstant) left).Value /
- ((ULongConstant) right).Value);
+ ((ULongConstant) right).Value);
- return new ULongConstant (res);
+ return new ULongConstant (res, left.Location);
} else if (left is LongConstant){
long res;
if (ec.ConstantCheckState)
res = checked (((LongConstant) left).Value /
- ((LongConstant) right).Value);
+ ((LongConstant) right).Value);
else
res = unchecked (((LongConstant) left).Value /
- ((LongConstant) right).Value);
+ ((LongConstant) right).Value);
- return new LongConstant (res);
+ return new LongConstant (res, left.Location);
} else if (left is UIntConstant){
uint res;
if (ec.ConstantCheckState)
res = checked (((UIntConstant) left).Value /
- ((UIntConstant) right).Value);
+ ((UIntConstant) right).Value);
else
res = unchecked (((UIntConstant) left).Value /
- ((UIntConstant) right).Value);
+ ((UIntConstant) right).Value);
- return new UIntConstant (res);
+ return new UIntConstant (res, left.Location);
} else if (left is IntConstant){
int res;
if (ec.ConstantCheckState)
res = checked (((IntConstant) left).Value /
- ((IntConstant) right).Value);
+ ((IntConstant) right).Value);
else
res = unchecked (((IntConstant) left).Value /
- ((IntConstant) right).Value);
+ ((IntConstant) right).Value);
+
+ return new IntConstant (res, left.Location);
+ } else if (left is DecimalConstant) {
+ decimal res;
+
+ if (ec.ConstantCheckState)
+ res = checked (((DecimalConstant) left).Value /
+ ((DecimalConstant) right).Value);
+ else
+ res = unchecked (((DecimalConstant) left).Value /
+ ((DecimalConstant) right).Value);
- return new IntConstant (res);
+ return new DecimalConstant (res, left.Location);
} else {
- throw new Exception ( "Unexepected input: " + left);
+ throw new Exception ( "Unexepected division input: " + left);
}
} catch (OverflowException){
Error_CompileTimeOverflow (loc);
res = unchecked (((DoubleConstant) left).Value %
((DoubleConstant) right).Value);
- return new DoubleConstant (res);
+ return new DoubleConstant (res, left.Location);
} else if (left is FloatConstant){
float res;
res = unchecked (((FloatConstant) left).Value %
((FloatConstant) right).Value);
- return new FloatConstant (res);
+ return new FloatConstant (res, left.Location);
} else if (left is ULongConstant){
ulong res;
res = unchecked (((ULongConstant) left).Value %
((ULongConstant) right).Value);
- return new ULongConstant (res);
+ return new ULongConstant (res, left.Location);
} else if (left is LongConstant){
long res;
res = unchecked (((LongConstant) left).Value %
((LongConstant) right).Value);
- return new LongConstant (res);
+ return new LongConstant (res, left.Location);
} else if (left is UIntConstant){
uint res;
res = unchecked (((UIntConstant) left).Value %
((UIntConstant) right).Value);
- return new UIntConstant (res);
+ return new UIntConstant (res, left.Location);
} else if (left is IntConstant){
int res;
res = unchecked (((IntConstant) left).Value %
((IntConstant) right).Value);
- return new IntConstant (res);
+ return new IntConstant (res, left.Location);
} else {
- throw new Exception ( "Unexepected input: " + left);
+ throw new Exception ( "Unexepected modulus input: " + left);
}
} catch (DivideByZeroException){
Report.Error (020, loc, "Division by constant zero");
IntConstant lic;
if ((lic = left.ConvertToInt ()) != null)
- return new IntConstant (lic.Value << lshift_val);
+ return new IntConstant (lic.Value << lshift_val, left.Location);
UIntConstant luic;
if ((luic = left.ConvertToUInt ()) != null)
- return new UIntConstant (luic.Value << lshift_val);
+ return new UIntConstant (luic.Value << lshift_val, left.Location);
LongConstant llc;
if ((llc = left.ConvertToLong ()) != null)
- return new LongConstant (llc.Value << lshift_val);
+ return new LongConstant (llc.Value << lshift_val, left.Location);
ULongConstant lulc;
if ((lulc = left.ConvertToULong ()) != null)
- return new ULongConstant (lulc.Value << lshift_val);
+ return new ULongConstant (lulc.Value << lshift_val, left.Location);
Binary.Error_OperatorCannotBeApplied (loc, "<<", lt, rt);
break;
IntConstant ric;
if ((ric = left.ConvertToInt ()) != null)
- return new IntConstant (ric.Value >> rshift_val);
+ return new IntConstant (ric.Value >> rshift_val, left.Location);
UIntConstant ruic;
if ((ruic = left.ConvertToUInt ()) != null)
- return new UIntConstant (ruic.Value >> rshift_val);
+ return new UIntConstant (ruic.Value >> rshift_val, left.Location);
LongConstant rlc;
if ((rlc = left.ConvertToLong ()) != null)
- return new LongConstant (rlc.Value >> rshift_val);
+ return new LongConstant (rlc.Value >> rshift_val, left.Location);
ULongConstant rulc;
if ((rulc = left.ConvertToULong ()) != null)
- return new ULongConstant (rulc.Value >> rshift_val);
+ return new ULongConstant (rulc.Value >> rshift_val, left.Location);
Binary.Error_OperatorCannotBeApplied (loc, ">>", lt, rt);
break;
if (left is BoolConstant && right is BoolConstant){
return new BoolConstant (
((BoolConstant) left).Value &&
- ((BoolConstant) right).Value);
+ ((BoolConstant) right).Value, left.Location);
}
break;
if (left is BoolConstant && right is BoolConstant){
return new BoolConstant (
((BoolConstant) left).Value ||
- ((BoolConstant) right).Value);
+ ((BoolConstant) right).Value, left.Location);
}
break;
if (left is BoolConstant && right is BoolConstant){
return new BoolConstant (
((BoolConstant) left).Value ==
- ((BoolConstant) right).Value);
+ ((BoolConstant) right).Value, left.Location);
}
+ if (left is NullLiteral){
+ if (right is NullLiteral)
+ return new BoolConstant (true, left.Location);
+ else if (right is StringConstant)
+ return new BoolConstant (
+ ((StringConstant) right).Value == null, left.Location);
+ } else if (right is NullLiteral){
+ if (left is NullLiteral)
+ return new BoolConstant (true, left.Location);
+ else if (left is StringConstant)
+ return new BoolConstant (
+ ((StringConstant) left).Value == null, left.Location);
+ }
if (left is StringConstant && right is StringConstant){
return new BoolConstant (
((StringConstant) left).Value ==
- ((StringConstant) right).Value);
+ ((StringConstant) right).Value, left.Location);
}
-
+
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
if (left == null || right == null)
return null;
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
case Binary.Operator.Inequality:
if (left is BoolConstant && right is BoolConstant){
return new BoolConstant (
((BoolConstant) left).Value !=
- ((BoolConstant) right).Value);
+ ((BoolConstant) right).Value, left.Location);
+ }
+ if (left is NullLiteral){
+ if (right is NullLiteral)
+ return new BoolConstant (false, left.Location);
+ else if (right is StringConstant)
+ return new BoolConstant (
+ ((StringConstant) right).Value != null, left.Location);
+ } else if (right is NullLiteral){
+ if (left is NullLiteral)
+ return new BoolConstant (false, left.Location);
+ else if (left is StringConstant)
+ return new BoolConstant (
+ ((StringConstant) left).Value != null, left.Location);
}
if (left is StringConstant && right is StringConstant){
return new BoolConstant (
((StringConstant) left).Value !=
- ((StringConstant) right).Value);
+ ((StringConstant) right).Value, left.Location);
}
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
case Binary.Operator.LessThan:
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
case Binary.Operator.GreaterThan:
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
case Binary.Operator.GreaterThanOrEqual:
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
case Binary.Operator.LessThanOrEqual:
DoConstantNumericPromotions (ec, oper, ref left, ref right, loc);
else
return null;
- return new BoolConstant (bool_res);
+ return new BoolConstant (bool_res, left.Location);
}
return null;