@@ -60,17 +60,11 @@ open Ast_helper
60
60
61
61
62
62
let record_as_js_object = ref false (* otherwise has an attribute *)
63
-
64
-
65
- let obj_type_as_js_obj_type = ref false
66
-
67
-
68
63
let no_export = ref false
69
64
70
65
71
66
let reset () =
72
67
record_as_js_object := false ;
73
- obj_type_as_js_obj_type := false ;
74
68
no_export := false
75
69
76
70
@@ -170,7 +164,7 @@ let handle_typ
170
164
match ty with
171
165
| {ptyp_desc = Ptyp_extension ({txt = " bs.obj" }, PTyp ty)}
172
166
->
173
- Ext_ref. non_exn_protect obj_type_as_js_obj_type true
167
+ Ext_ref. non_exn_protect record_as_js_object true
174
168
(fun _ -> self.typ self ty )
175
169
| {ptyp_attributes ;
176
170
ptyp_desc = Ptyp_arrow (label, args, body);
@@ -227,7 +221,7 @@ let handle_typ
227
221
{ ty
228
222
with ptyp_desc = Ptyp_object (methods, closed_flag);
229
223
} in
230
- if ! obj_type_as_js_obj_type then
224
+ if ! record_as_js_object then
231
225
Ast_comb. to_js_type loc inner_type
232
226
else inner_type
233
227
| _ -> super.typ self ty
@@ -295,11 +289,7 @@ let rec unsafe_mapper : Ast_mapper.mapper =
295
289
begin match payload with
296
290
| PStr [{pstr_desc = Pstr_eval (e,_)}]
297
291
->
298
- Ext_ref. non_exn_protect2
299
- record_as_js_object
300
- obj_type_as_js_obj_type
301
- true
302
- true
292
+ Ext_ref. non_exn_protect record_as_js_object true
303
293
(fun () -> self.expr self e )
304
294
| _ -> Location. raise_errorf ~loc " Expect an expression here"
305
295
end
@@ -410,14 +400,18 @@ let rec unsafe_mapper : Ast_mapper.mapper =
410
400
pexp_attributes }
411
401
end
412
402
end
413
- | Pexp_record (label_exprs , None) ->
414
- (* TODO better error message when [with] detected in [%bs.obj] *)
403
+ | Pexp_record (label_exprs , opt_exp ) ->
415
404
if ! record_as_js_object then
416
- { e with
417
- pexp_desc =
418
- Ast_util. record_as_js_object loc self label_exprs;
419
- }
420
- else
405
+ (match opt_exp with
406
+ | None ->
407
+ { e with
408
+ pexp_desc =
409
+ Ast_util. record_as_js_object loc self label_exprs;
410
+ }
411
+ | Some e ->
412
+ Location. raise_errorf
413
+ ~loc: e.pexp_loc " `with` construct is not supported in bs.obj " )
414
+ else (* could be supported using `Object.assign`? *)
421
415
Ast_mapper. default_mapper.expr self e
422
416
| Pexp_object {pcstr_self; pcstr_fields} ->
423
417
begin match Ast_attributes. process_bs e.pexp_attributes with
0 commit comments