+ type = left.Type;
+ right = Convert.ImplicitConversion (ec, right, type, loc);
+ return this;
+ }
+ } else if (TypeManager.IsReferenceType (ltype) && right.eclass != ExprClass.MethodGroup) {
+ if (Convert.ImplicitConversionExists (ec, right, ltype)) {
+ //
+ // Reduce (constant ?? expr) to constant
+ //
+ Constant lc = left as Constant;
+ if (lc != null && !lc.IsDefaultValue)
+ return new SideEffectConstant (lc, right, loc).Resolve (ec);
+
+ //
+ // Reduce (left ?? null) to left OR (null-constant ?? right) to right
+ //
+ if (right.IsNull || lc != null)
+ return ReducedExpression.Create (lc != null ? right : left, this).Resolve (ec);
+
+ right = Convert.ImplicitConversion (ec, right, ltype, loc);
+ type = left.Type;