Right = Unwrap.CreateUnwrapped (Right);
UnwrapRight = Right as Unwrap;
}
+
+ if (Left.Type.BuiltinType == BuiltinTypeSpec.Type.Decimal) {
+ var decimal_operators = MemberCache.GetUserOperator (Left.Type, Binary.ConvertBinaryToUserOperator (Binary.Oper), false);
+
+ Arguments args = new Arguments (2);
+ args.Add (new Argument (Left));
+ args.Add (new Argument (Right));
+
+ const OverloadResolver.Restrictions restr = OverloadResolver.Restrictions.ProbingOnly |
+ OverloadResolver.Restrictions.NoBaseMembers | OverloadResolver.Restrictions.BaseMembersIncluded;
+
+ var res = new OverloadResolver (decimal_operators, restr, loc);
+ UserOperator = res.ResolveOperator (rc, ref args);
+ }
}
type = Binary.Type;
//
// Special case null ?? null
//
- if (right.IsNull && ltype == right.Type)
+ if (right is NullLiteral && ltype == right.Type)
return null;
return ReducedExpression.Create (lc != null ? right : left, this, false);
type = ltype;
return this;
}
+ } else if (ltype == InternalType.ThrowExpr) {
+ //
+ // LAMESPEC: I am not really sure what's point of allowing throw on left side
+ //
+ return ReducedExpression.Create (right, this, false).Resolve (ec);
} else {
return null;
}