Skip to content

Commit f3917c9

Browse files
authoredSep 12, 2024··
improve variadic call using spread syntax (#7030)
1 parent c15df0c commit f3917c9

28 files changed

+71
-309
lines changed
 

‎CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#### :nail_care: Polish
2020

2121
- Improve bigint literal comparison. https://github.com/rescript-lang/rescript-compiler/pull/7029
22+
- Improve output of `@variadic` bindings. https://github.com/rescript-lang/rescript-compiler/pull/7030
2223

2324
# 12.0.0-alpha.3
2425

‎jscomp/core/j.ml

+1
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ and expression_desc =
163163
| Undefined of {is_unit: bool}
164164
| Null
165165
| Await of expression
166+
| Spread of expression
166167

167168
and for_ident_expression = expression
168169
(* pure*)

‎jscomp/core/js_analyzer.ml

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ let rec no_side_effect_expression_desc (x : J.expression_desc) =
109109
(* actually true? *) ->
110110
false
111111
| Await _ -> false
112+
| Spread _ -> false
112113

113114
and no_side_effect (x : J.expression) =
114115
no_side_effect_expression_desc x.expression_desc
@@ -212,6 +213,7 @@ let rec eq_expression ({ expression_desc = x0 } : J.expression)
212213
| Number (Uint _) ->
213214
false
214215
| Await _ -> false
216+
| Spread _ -> false
215217

216218
and eq_expression_list xs ys = Ext_list.for_all2_no_exn xs ys eq_expression
217219

‎jscomp/core/js_dump.ml

+5
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ let rec exp_need_paren ?(arrow=false) (e : J.expression) =
162162
| Js_not _ | Bool _ | New _ ->
163163
false
164164
| Await _ -> false
165+
| Spread _ -> false
165166
| Tagged_template _ -> false
166167
| Optional_block (e, true) when arrow -> exp_need_paren ~arrow e
167168
| Optional_block _ -> false
@@ -907,6 +908,10 @@ and expression_desc cxt ~(level : int) f x : cxt =
907908
P.cond_paren_group f (level > 13) (fun _ ->
908909
P.string f "await ";
909910
expression ~level:13 cxt f e)
911+
| Spread e ->
912+
P.cond_paren_group f (level > 13) (fun _ ->
913+
P.string f "...";
914+
expression ~level:13 cxt f e)
910915

911916
and property_name_and_value_list cxt f (l : J.property_map) =
912917
iter_lst cxt f l

‎jscomp/core/js_exp_make.ml

+6
Original file line numberDiff line numberDiff line change
@@ -1368,3 +1368,9 @@ let neq_null_undefined_boolean ?comment (a : t) (b : t) =
13681368

13691369
let make_exception (s : string) =
13701370
pure_runtime_call Js_runtime_modules.exceptions Literals.create [ str s ]
1371+
1372+
let rec variadic_args (args : t list) =
1373+
match args with
1374+
| [] -> []
1375+
| [last] -> [{ last with expression_desc = Spread last }]
1376+
| arg :: args -> arg :: variadic_args args

‎jscomp/core/js_exp_make.mli

+2
Original file line numberDiff line numberDiff line change
@@ -364,3 +364,5 @@ val for_sure_js_null_undefined : J.expression -> bool
364364
val is_null_undefined : ?comment:string -> t -> t
365365

366366
val make_exception : string -> t
367+
368+
val variadic_args : t list -> t list

‎jscomp/core/js_fold.ml

+3
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ class fold =
177177
| Await _x0 ->
178178
let _self = _self#expression _x0 in
179179
_self
180+
| Spread _x0 ->
181+
let _self = _self#expression _x0 in
182+
_self
180183

181184
method for_ident_expression : for_ident_expression -> 'self_type =
182185
_self#expression

‎jscomp/core/js_record_fold.ml

+3
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ let expression_desc : 'a. ('a, expression_desc) fn =
183183
| Await _x0 ->
184184
let st = _self.expression _self st _x0 in
185185
st
186+
| Spread _x0 ->
187+
let st = _self.expression _self st _x0 in
188+
st
186189

187190
let for_ident_expression : 'a. ('a, for_ident_expression) fn =
188191
fun _self arg -> _self.expression _self arg

‎jscomp/core/js_record_iter.ml

+1
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ let expression_desc : expression_desc fn =
136136
| Undefined _ -> ()
137137
| Null -> ()
138138
| Await _x0 -> _self.expression _self _x0
139+
| Spread _x0 -> _self.expression _self _x0
139140

140141
let for_ident_expression : for_ident_expression fn =
141142
fun _self arg -> _self.expression _self arg

‎jscomp/core/js_record_map.ml

+3
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ let expression_desc : expression_desc fn =
181181
| Await _x0 ->
182182
let _x0 = _self.expression _self _x0 in
183183
Await _x0
184+
| Spread _x0 ->
185+
let _x0 = _self.expression _self _x0 in
186+
Spread _x0
184187

185188
let for_ident_expression : for_ident_expression fn =
186189
fun _self arg -> _self.expression _self arg

‎jscomp/core/lam_compile_external_call.ml

+17-30
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,6 @@
2626

2727
module E = Js_exp_make
2828

29-
let splice_apply fn args =
30-
E.runtime_call Js_runtime_modules.caml_splice_call "spliceApply"
31-
[ fn; E.array Immutable args ]
32-
33-
let splice_new_apply fn args =
34-
E.runtime_call Js_runtime_modules.caml_splice_call "spliceNewApply"
35-
[ fn; E.array Immutable args ]
36-
37-
let splice_obj_apply obj name args =
38-
E.runtime_call Js_runtime_modules.caml_splice_call "spliceObjApply"
39-
[ obj; E.str name; E.array Immutable args ]
40-
4129
(**
4230
[bind_name] is a hint to the compiler to generate
4331
better names for external module
@@ -278,17 +266,18 @@ let translate_ffi (cxt : Lam_compile_context.t) arg_types
278266
(match args with
279267
| [ {expression_desc = Array (strings, _); _}; {expression_desc = Array (values, _); _} ] ->
280268
E.tagged_template fn strings values
281-
| _ -> let args, eff, dynamic = assemble_args_has_splice arg_types args in
282-
add_eff eff
283-
(if dynamic then splice_apply fn args
284-
else E.call ~info:{ arity = Full; call_info = Call_na } fn args))
269+
| _ ->
270+
let args, eff, dynamic = assemble_args_has_splice arg_types args in
271+
let args = if dynamic then E.variadic_args args else args in
272+
add_eff eff (
273+
E.call ~info:{ arity = Full; call_info = Call_na } fn args))
285274
| Js_call { external_module_name = module_name; name = fn; splice; scopes; tagged_template = false } ->
286275
let fn = translate_scoped_module_val module_name fn scopes ~dynamic_import in
287276
if splice then
288277
let args, eff, dynamic = assemble_args_has_splice arg_types args in
289-
add_eff eff
290-
(if dynamic then splice_apply fn args
291-
else E.call ~info:{ arity = Full; call_info = Call_na } fn args)
278+
let args = if dynamic then E.variadic_args args else args in
279+
add_eff eff (
280+
E.call ~info:{ arity = Full; call_info = Call_na } fn args)
292281
else
293282
let args, eff = assemble_args_no_splice arg_types args in
294283
add_eff eff
@@ -297,10 +286,9 @@ let translate_ffi (cxt : Lam_compile_context.t) arg_types
297286
let fn = external_var external_module_name ~dynamic_import in
298287
if splice then
299288
let args, eff, dynamic = assemble_args_has_splice arg_types args in
300-
(* TODO: fix in rest calling convention *)
301-
add_eff eff
302-
(if dynamic then splice_apply fn args
303-
else E.call ~info:{ arity = Full; call_info = Call_na } fn args)
289+
let args = if dynamic then E.variadic_args args else args in
290+
add_eff eff (
291+
E.call ~info:{ arity = Full; call_info = Call_na } fn args)
304292
else
305293
let args, eff = assemble_args_no_splice arg_types args in
306294
(* TODO: fix in rest calling convention *)
@@ -324,11 +312,11 @@ let translate_ffi (cxt : Lam_compile_context.t) arg_types
324312
in
325313
if splice then
326314
let args, eff, dynamic = assemble_args_has_splice arg_types args in
315+
let args = if dynamic then E.variadic_args args else args in
327316
let fn = translate_scoped_module_val module_name fn scopes ~dynamic_import in
328317
add_eff eff
329318
(mark ();
330-
if dynamic then splice_new_apply fn args
331-
else E.new_ fn args)
319+
E.new_ fn args)
332320
else
333321
let args, eff = assemble_args_no_splice arg_types args in
334322
let fn = translate_scoped_module_val module_name fn scopes ~dynamic_import in
@@ -342,13 +330,12 @@ let translate_ffi (cxt : Lam_compile_context.t) arg_types
342330
let[@warning "-8"] (_self_type :: arg_types) = arg_types in
343331
if splice then
344332
let args, eff, dynamic = assemble_args_has_splice arg_types args in
333+
let args = if dynamic then E.variadic_args args else args in
345334
add_eff eff
346335
(let self = translate_scoped_access js_send_scopes self in
347-
if dynamic then splice_obj_apply self name args
348-
else
349-
E.call
350-
~info:{ arity = Full; call_info = Call_na }
351-
(E.dot self name) args)
336+
E.call
337+
~info:{ arity = Full; call_info = Call_na }
338+
(E.dot self name) args)
352339
else
353340
let args, eff = assemble_args_no_splice arg_types args in
354341
add_eff eff

‎jscomp/ext/js_runtime_modules.ml

-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ let module_ = "Caml_module"
6767

6868
let caml_js_exceptions = "Caml_js_exceptions"
6969

70-
let caml_splice_call = "Caml_splice_call"
71-
7270
let deriving = "Runtime_deriving"
7371

7472
let promise = "Runtime_promise"

‎jscomp/runtime/caml_splice_call.res

-68
This file was deleted.

‎jscomp/runtime/caml_splice_call.resi

-31
This file was deleted.

‎jscomp/runtime/release.ninja

+1-3
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ o runtime/caml_option.cmj : cc_cmi runtime/caml_option.res | runtime/caml_option
4747
o runtime/caml_option.cmi : cc runtime/caml_option.resi | runtime/bs_stdlib_mini.cmi runtime/caml_undefined_extern.cmj runtime/js.cmi runtime/js.cmj
4848
o runtime/caml_parser.cmj : cc_cmi runtime/caml_parser.res | runtime/caml_parser.cmi
4949
o runtime/caml_parser.cmi : cc runtime/caml_parser.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
50-
o runtime/caml_splice_call.cmj : cc_cmi runtime/caml_splice_call.res | runtime/caml_splice_call.cmi
51-
o runtime/caml_splice_call.cmi : cc runtime/caml_splice_call.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
5250
o runtime/caml_string.cmj : cc_cmi runtime/caml_string.res | runtime/caml_string.cmi runtime/caml_string_extern.cmj
5351
o runtime/caml_string.cmi : cc runtime/caml_string.resi | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
5452
o runtime/caml_sys.cmj : cc_cmi runtime/caml_sys.res | runtime/caml_array_extern.cmj runtime/caml_sys.cmi runtime/caml_undefined_extern.cmj
@@ -62,4 +60,4 @@ o runtime/caml_nativeint_extern.cmi runtime/caml_nativeint_extern.cmj : cc runti
6260
o runtime/caml_string_extern.cmi runtime/caml_string_extern.cmj : cc runtime/caml_string_extern.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
6361
o runtime/caml_undefined_extern.cmi runtime/caml_undefined_extern.cmj : cc runtime/caml_undefined_extern.res | runtime/bs_stdlib_mini.cmi runtime/js.cmi runtime/js.cmj
6462
o runtime/curry.cmi runtime/curry.cmj : cc runtime/curry.res | runtime/bs_stdlib_mini.cmi runtime/caml_array.cmj runtime/caml_array_extern.cmj runtime/js.cmi runtime/js.cmj
65-
o runtime : phony runtime/bs_stdlib_mini.cmi runtime/js.cmj runtime/js.cmi runtime/caml.cmi runtime/caml.cmj runtime/caml_array.cmi runtime/caml_array.cmj runtime/caml_bigint.cmi runtime/caml_bigint.cmj runtime/caml_bytes.cmi runtime/caml_bytes.cmj runtime/caml_exceptions.cmi runtime/caml_exceptions.cmj runtime/caml_float.cmi runtime/caml_float.cmj runtime/caml_format.cmi runtime/caml_format.cmj runtime/caml_hash.cmi runtime/caml_hash.cmj runtime/caml_hash_primitive.cmi runtime/caml_hash_primitive.cmj runtime/caml_int32.cmi runtime/caml_int32.cmj runtime/caml_int64.cmi runtime/caml_int64.cmj runtime/caml_lexer.cmi runtime/caml_lexer.cmj runtime/caml_md5.cmi runtime/caml_md5.cmj runtime/caml_module.cmi runtime/caml_module.cmj runtime/caml_obj.cmi runtime/caml_obj.cmj runtime/caml_option.cmi runtime/caml_option.cmj runtime/caml_parser.cmi runtime/caml_parser.cmj runtime/caml_splice_call.cmi runtime/caml_splice_call.cmj runtime/caml_string.cmi runtime/caml_string.cmj runtime/caml_sys.cmi runtime/caml_sys.cmj runtime/caml_array_extern.cmi runtime/caml_array_extern.cmj runtime/caml_bigint_extern.cmi runtime/caml_bigint_extern.cmj runtime/caml_float_extern.cmi runtime/caml_float_extern.cmj runtime/caml_int64_extern.cmi runtime/caml_int64_extern.cmj runtime/caml_js_exceptions.cmi runtime/caml_js_exceptions.cmj runtime/caml_nativeint_extern.cmi runtime/caml_nativeint_extern.cmj runtime/caml_string_extern.cmi runtime/caml_string_extern.cmj runtime/caml_undefined_extern.cmi runtime/caml_undefined_extern.cmj runtime/curry.cmi runtime/curry.cmj
63+
o runtime : phony runtime/bs_stdlib_mini.cmi runtime/js.cmj runtime/js.cmi runtime/caml.cmi runtime/caml.cmj runtime/caml_array.cmi runtime/caml_array.cmj runtime/caml_bigint.cmi runtime/caml_bigint.cmj runtime/caml_bytes.cmi runtime/caml_bytes.cmj runtime/caml_exceptions.cmi runtime/caml_exceptions.cmj runtime/caml_float.cmi runtime/caml_float.cmj runtime/caml_format.cmi runtime/caml_format.cmj runtime/caml_hash.cmi runtime/caml_hash.cmj runtime/caml_hash_primitive.cmi runtime/caml_hash_primitive.cmj runtime/caml_int32.cmi runtime/caml_int32.cmj runtime/caml_int64.cmi runtime/caml_int64.cmj runtime/caml_lexer.cmi runtime/caml_lexer.cmj runtime/caml_md5.cmi runtime/caml_md5.cmj runtime/caml_module.cmi runtime/caml_module.cmj runtime/caml_obj.cmi runtime/caml_obj.cmj runtime/caml_option.cmi runtime/caml_option.cmj runtime/caml_parser.cmi runtime/caml_parser.cmj runtime/caml_string.cmi runtime/caml_string.cmj runtime/caml_sys.cmi runtime/caml_sys.cmj runtime/caml_array_extern.cmi runtime/caml_array_extern.cmj runtime/caml_bigint_extern.cmi runtime/caml_bigint_extern.cmj runtime/caml_float_extern.cmi runtime/caml_float_extern.cmj runtime/caml_int64_extern.cmi runtime/caml_int64_extern.cmj runtime/caml_js_exceptions.cmi runtime/caml_js_exceptions.cmj runtime/caml_nativeint_extern.cmi runtime/caml_nativeint_extern.cmj runtime/caml_string_extern.cmi runtime/caml_string_extern.cmj runtime/caml_undefined_extern.cmi runtime/caml_undefined_extern.cmj runtime/curry.cmi runtime/curry.cmj

‎jscomp/test/bs_auto_uncurry.js

+1-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎jscomp/test/module_splice_test.js

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎jscomp/test/splice_test.js

+7-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎jscomp/test/tagged_template_test.js

+1-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎lib/es6/caml_splice_call.js

-52
This file was deleted.

‎lib/es6/js_array.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22

33
import * as Caml_option from "./caml_option.js";
4-
import * as Caml_splice_call from "./caml_splice_call.js";
54

65
function copyWithin(to_, obj) {
76
return obj.copyWithin(to_);
@@ -32,19 +31,15 @@ function push(arg1, obj) {
3231
}
3332

3433
function pushMany(arg1, obj) {
35-
return Caml_splice_call.spliceObjApply(obj, "push", [arg1]);
34+
return obj.push(...arg1);
3635
}
3736

3837
function sortInPlaceWith(arg1, obj) {
3938
return obj.sort(arg1);
4039
}
4140

4241
function spliceInPlace(pos, remove, add, obj) {
43-
return Caml_splice_call.spliceObjApply(obj, "splice", [
44-
pos,
45-
remove,
46-
add
47-
]);
42+
return obj.splice(pos, remove, ...add);
4843
}
4944

5045
function removeFromInPlace(pos, obj) {
@@ -60,15 +55,15 @@ function unshift(arg1, obj) {
6055
}
6156

6257
function unshiftMany(arg1, obj) {
63-
return Caml_splice_call.spliceObjApply(obj, "unshift", [arg1]);
58+
return obj.unshift(...arg1);
6459
}
6560

6661
function concat(arg1, obj) {
6762
return obj.concat(arg1);
6863
}
6964

7065
function concatMany(arg1, obj) {
71-
return Caml_splice_call.spliceObjApply(obj, "concat", [arg1]);
66+
return obj.concat(...arg1);
7267
}
7368

7469
function includes(arg1, obj) {

‎lib/es6/js_string.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22

33
import * as Caml_option from "./caml_option.js";
4-
import * as Caml_splice_call from "./caml_splice_call.js";
54

65
function charAt(arg1, obj) {
76
return obj.charAt(arg1);
@@ -20,7 +19,7 @@ function concat(arg1, obj) {
2019
}
2120

2221
function concatMany(arg1, obj) {
23-
return Caml_splice_call.spliceObjApply(obj, "concat", [arg1]);
22+
return obj.concat(...arg1);
2423
}
2524

2625
function endsWith(arg1, obj) {

‎lib/es6/jsxPPXReactSupport.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22

33
import * as React from "react";
4-
import * as Caml_splice_call from "./caml_splice_call.js";
54

65
function createElementWithKey(key, component, props) {
76
return React.createElement(component, key !== undefined ? Object.assign({
@@ -10,13 +9,9 @@ function createElementWithKey(key, component, props) {
109
}
1110

1211
function createElementVariadicWithKey(key, component, props, elements) {
13-
return Caml_splice_call.spliceApply(React.createElement, [
14-
component,
15-
key !== undefined ? Object.assign({
16-
key: key
17-
}, props) : props,
18-
elements
19-
]);
12+
return React.createElement(component, key !== undefined ? Object.assign({
13+
key: key
14+
}, props) : props, ...elements);
2015
}
2116

2217
export {

‎lib/js/caml_splice_call.js

-50
This file was deleted.

‎lib/js/js_array.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
let Caml_option = require("./caml_option.js");
4-
let Caml_splice_call = require("./caml_splice_call.js");
54

65
function copyWithin(to_, obj) {
76
return obj.copyWithin(to_);
@@ -32,19 +31,15 @@ function push(arg1, obj) {
3231
}
3332

3433
function pushMany(arg1, obj) {
35-
return Caml_splice_call.spliceObjApply(obj, "push", [arg1]);
34+
return obj.push(...arg1);
3635
}
3736

3837
function sortInPlaceWith(arg1, obj) {
3938
return obj.sort(arg1);
4039
}
4140

4241
function spliceInPlace(pos, remove, add, obj) {
43-
return Caml_splice_call.spliceObjApply(obj, "splice", [
44-
pos,
45-
remove,
46-
add
47-
]);
42+
return obj.splice(pos, remove, ...add);
4843
}
4944

5045
function removeFromInPlace(pos, obj) {
@@ -60,15 +55,15 @@ function unshift(arg1, obj) {
6055
}
6156

6257
function unshiftMany(arg1, obj) {
63-
return Caml_splice_call.spliceObjApply(obj, "unshift", [arg1]);
58+
return obj.unshift(...arg1);
6459
}
6560

6661
function concat(arg1, obj) {
6762
return obj.concat(arg1);
6863
}
6964

7065
function concatMany(arg1, obj) {
71-
return Caml_splice_call.spliceObjApply(obj, "concat", [arg1]);
66+
return obj.concat(...arg1);
7267
}
7368

7469
function includes(arg1, obj) {

‎lib/js/js_string.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
let Caml_option = require("./caml_option.js");
4-
let Caml_splice_call = require("./caml_splice_call.js");
54

65
function charAt(arg1, obj) {
76
return obj.charAt(arg1);
@@ -20,7 +19,7 @@ function concat(arg1, obj) {
2019
}
2120

2221
function concatMany(arg1, obj) {
23-
return Caml_splice_call.spliceObjApply(obj, "concat", [arg1]);
22+
return obj.concat(...arg1);
2423
}
2524

2625
function endsWith(arg1, obj) {

‎lib/js/jsxPPXReactSupport.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
let React = require("react");
4-
let Caml_splice_call = require("./caml_splice_call.js");
54

65
function createElementWithKey(key, component, props) {
76
return React.createElement(component, key !== undefined ? Object.assign({
@@ -10,13 +9,9 @@ function createElementWithKey(key, component, props) {
109
}
1110

1211
function createElementVariadicWithKey(key, component, props, elements) {
13-
return Caml_splice_call.spliceApply(React.createElement, [
14-
component,
15-
key !== undefined ? Object.assign({
16-
key: key
17-
}, props) : props,
18-
elements
19-
]);
12+
return React.createElement(component, key !== undefined ? Object.assign({
13+
key: key
14+
}, props) : props, ...elements);
2015
}
2116

2217
exports.createElementWithKey = createElementWithKey;

‎packages/artifacts.txt

-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ lib/es6/caml_nativeint_extern.js
9797
lib/es6/caml_obj.js
9898
lib/es6/caml_option.js
9999
lib/es6/caml_parser.js
100-
lib/es6/caml_splice_call.js
101100
lib/es6/caml_string.js
102101
lib/es6/caml_string_extern.js
103102
lib/es6/caml_sys.js
@@ -256,7 +255,6 @@ lib/js/caml_nativeint_extern.js
256255
lib/js/caml_obj.js
257256
lib/js/caml_option.js
258257
lib/js/caml_parser.js
259-
lib/js/caml_splice_call.js
260258
lib/js/caml_string.js
261259
lib/js/caml_string_extern.js
262260
lib/js/caml_sys.js

0 commit comments

Comments
 (0)
Please sign in to comment.