@@ -40,47 +40,47 @@ module S = Js_stmt_make
40
40
*)
41
41
42
42
(* TODO: check stackoverflow *)
43
- let assemble_obj_args (labels : External_arg_spec.t list ) (args : J.expression list )
43
+ let assemble_obj_args (labels : External_arg_spec.obj_params ) (args : J.expression list )
44
44
: J.block * J.expression =
45
- let rec aux (labels : External_arg_spec.t list ) args
45
+ let rec aux (labels : External_arg_spec.obj_params ) args
46
46
: (Js_op.property_name * E.t ) list * J.expression list * _ =
47
47
match labels, args with
48
48
| [] , [] -> [] , [] , []
49
- | {arg_label = Label {name = label ; cst = Some cst } } :: labels , args ->
49
+ | {obj_arg_label = Obj_label {name = label ; } ; obj_arg_type = Arg_cst cst } :: labels , args ->
50
50
let accs, eff, assign = aux labels args in
51
51
(label, Lam_compile_const. translate_arg_cst cst )::accs, eff, assign
52
- | {arg_label = EmptyCst _ } :: rest , args -> assert false
53
- | {arg_label = Empty }::labels, arg::args
52
+ (* | {obj_arg_label = EmptyCst _ } :: rest , args -> assert false *)
53
+ | {obj_arg_label = Obj_empty }::labels, arg::args
54
54
-> (* unit type*)
55
55
let (accs, eff, assign) as r = aux labels args in
56
56
if Js_analyzer. no_side_effect_expression arg then r
57
57
else (accs, arg::eff, assign)
58
- | ({arg_label = Label {name = label; cst = None } } as arg_kind)::labels, arg::args
58
+ | ({obj_arg_label = Obj_label {name = label;} } as arg_kind)::labels, arg::args
59
59
->
60
60
let accs, eff, assign = aux labels args in
61
- let acc, new_eff = Lam_compile_external_call. ocaml_to_js_eff ~arg_label: Label ~arg_type: arg_kind.arg_type arg in
61
+ let acc, new_eff = Lam_compile_external_call. ocaml_to_js_eff ~arg_label: Arg_label ~arg_type: arg_kind.obj_arg_type arg in
62
62
begin match acc with
63
63
| Splice2 _
64
64
| Splice0 -> assert false
65
65
| Splice1 x ->
66
66
(label, x) :: accs , Ext_list. append new_eff eff , assign
67
67
end (* evaluation order is undefined *)
68
68
69
- | ({arg_label = Optional {name = label}; arg_type } as arg_kind)::labels, arg::args
69
+ | ({obj_arg_label = Obj_optional {name = label}; obj_arg_type } as arg_kind)::labels, arg::args
70
70
->
71
71
let (accs, eff, assign) as r = aux labels args in
72
72
Js_of_lam_option. destruct_optional arg
73
73
~for_sure_none: r
74
74
~for_sure_some: (fun x -> let acc, new_eff = Lam_compile_external_call. ocaml_to_js_eff
75
- ~arg_label: Label ~arg_type x in
75
+ ~arg_label: Arg_label ~arg_type: obj_arg_type x in
76
76
begin match acc with
77
77
| Splice2 _
78
78
| Splice0 -> assert false
79
79
| Splice1 x ->
80
80
(label, x) :: accs , Ext_list. append new_eff eff , assign
81
81
end )
82
82
~not_sure: (fun _ -> accs, eff , (arg_kind,arg)::assign )
83
- | {arg_label = Empty | Label { cst = None ;_} | Optional _ } :: _ , [] -> assert false
83
+ | {obj_arg_label = Obj_empty | Obj_label _ | Obj_optional _ } :: _ , [] -> assert false
84
84
| [] , _ :: _ -> assert false
85
85
in
86
86
let map, eff, assignment = aux labels args in
@@ -101,9 +101,9 @@ let assemble_obj_args (labels : External_arg_spec.t list) (args : J.expression
101
101
| x ::xs -> E. seq (E. fuse_to_seq x xs) (E. obj map)
102
102
end ) ::
103
103
(Ext_list. flat_map assignment (fun
104
- ((xlabel : External_arg_spec.t ), (arg : J.expression )) ->
104
+ ((xlabel : External_arg_spec.obj_param ), (arg : J.expression )) ->
105
105
match xlabel with
106
- | {arg_label = Optional {name = label } } ->
106
+ | {obj_arg_label = Obj_optional {name = label } } ->
107
107
(* Need make sure whether assignment is effectful or not
108
108
to avoid code duplication
109
109
*)
@@ -112,7 +112,7 @@ let assemble_obj_args (labels : External_arg_spec.t list) (args : J.expression
112
112
let acc,new_eff =
113
113
Lam_compile_external_call. ocaml_to_js_eff
114
114
~arg_label:
115
- Empty ~arg_type: xlabel.arg_type
115
+ Arg_empty ~arg_type: xlabel.obj_arg_type
116
116
(Js_of_lam_option. val_from_option arg) in
117
117
begin match acc with
118
118
| Splice1 v ->
@@ -131,8 +131,8 @@ let assemble_obj_args (labels : External_arg_spec.t list) (args : J.expression
131
131
let acc,new_eff =
132
132
Lam_compile_external_call. ocaml_to_js_eff
133
133
~arg_label:
134
- Empty
135
- ~arg_type: xlabel.arg_type
134
+ Arg_empty
135
+ ~arg_type: xlabel.obj_arg_type
136
136
(Js_of_lam_option. val_from_option arg) in
137
137
begin match acc with
138
138
| Splice1 v ->
0 commit comments