|
@@ -2293,7 +2293,17 @@ let configure gen =
|
|
|
DynamicOperators.configure gen
|
|
|
(DynamicOperators.abstract_implementation gen (fun e -> match e.eexpr with
|
|
|
| TBinop (Ast.OpEq, e1, e2)
|
|
|
- | TBinop (Ast.OpNotEq, e1, e2) -> should_handle_opeq e1.etype or should_handle_opeq e2.etype
|
|
|
+ | TBinop (Ast.OpNotEq, e1, e2) ->
|
|
|
+ (
|
|
|
+ (* dont touch (v == null) and (null == v) comparisons because they are handled by HardNullableSynf later *)
|
|
|
+ match e1.eexpr, e2.eexpr with
|
|
|
+ | TConst(TNull), _ when is_null_expr e2 ->
|
|
|
+ false
|
|
|
+ | _, TConst(TNull) when is_null_expr e1 ->
|
|
|
+ false
|
|
|
+ | _ ->
|
|
|
+ should_handle_opeq e1.etype or should_handle_opeq e2.etype
|
|
|
+ )
|
|
|
| TBinop (Ast.OpAssignOp Ast.OpAdd, e1, e2) ->
|
|
|
is_dynamic_expr e1 || is_null_expr e1 || is_string e.etype
|
|
|
| TBinop (Ast.OpAdd, e1, e2) -> is_dynamic e1.etype or is_dynamic e2.etype or is_type_param e1.etype or is_type_param e2.etype or is_string e1.etype or is_string e2.etype or is_string e.etype
|