+ State orig_state = state;
+
+ // Try original types first
+ Expression expr = base.ResolveUserOperator (ec, left_orig, right_orig);
+ if (expr == null) {
+ if (left_unwrap != null || right_unwrap != null) {
+ // One side is nullable type, try underlying types
+ expr = base.ResolveUserOperator (ec, left, right);
+ } else if ((state & (State.RightNullLifted | State.LeftNullLifted)) != 0) {
+ expr = base.ResolveUserOperator (ec, left, right);
+ }
+ }
+