@@ -157,6 +157,13 @@ let rec translate ~num_configs ~is_toplevel ~has_config ?label expr =
157157 lift_config_vb ~loop ~num_configs ?label ~expr1 ~c_expr [ expr2 ]
158158 | [% expr [% e? expr1] ~config: [% e? c_expr]] ->
159159 lift_config_vb ~loop ~num_configs ?label ~expr1 ~c_expr []
160+ | [% expr
161+ [% e? { pexp_desc = Pexp_ident { txt = Lident op_ident; _ }; _ }] ([% e? expr2], [% e? expr3])]
162+ when Hashtbl. mem binary_ops op_ident ->
163+ let e1 = [% expr [% e expr] ?label:[% e opt_expr ~loc label]] in
164+ let vbs2, e2 = loop expr2 in
165+ let vbs3, e3 = loop expr3 in
166+ (reduce_vbss [ vbs2; vbs3 ], [% expr [% e e1] [% e e2] [% e e3]])
160167 | [% expr [% e? expr1] [% e? expr2] [% e? expr3]] ->
161168 let vbs1, e1 = loop ?label expr1 in
162169 let vbs2, e2 = loop expr2 in
@@ -260,8 +267,7 @@ let rec translate ~num_configs ~is_toplevel ~has_config ?label expr =
260267 let vbs, body = loop ?label body in
261268 (vbs, { expr with pexp_desc = Pexp_letmodule (name, module_expr, body) })
262269 | { pexp_desc = Pexp_ident { txt = Lident op_ident; _ }; _ }
263- when is_primitive_op op_ident || is_operator op_ident
264- ->
270+ when is_primitive_op op_ident || is_operator op_ident ->
265271 (* FIXME: this heuristic is hacky... *)
266272 (no_vbs, [% expr [% e expr] ?label:[% e opt_expr ~loc label]])
267273 | expr -> (no_vbs, expr)
0 commit comments