1
- (** Bundled by bspack 08/22-17:28 *)
1
+ (** Bundled by bspack 08/23-11:37 *)
2
2
module String_map : sig
3
3
#1 "string_map.mli"
4
4
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -4034,7 +4034,7 @@ let int32 = "Caml_int32"
4034
4034
let block = "Block"
4035
4035
let js_primitive = "Js_primitive"
4036
4036
let module_ = "Caml_module"
4037
- let version = "0.9.4 "
4037
+ let version = "0.9.5 "
4038
4038
4039
4039
4040
4040
let runtime_set =
@@ -4240,7 +4240,8 @@ type ffi =
4240
4240
| Obj_create of arg_label list
4241
4241
| Js_global of js_val
4242
4242
| Js_module_as_var of external_module_name
4243
- | Js_module_as_fn of external_module_name
4243
+ | Js_module_as_fn of external_module_name
4244
+ | Js_module_as_class of external_module_name
4244
4245
| Js_call of js_call external_module
4245
4246
| Js_send of js_send
4246
4247
| Js_new of js_val
@@ -4340,7 +4341,8 @@ type ffi =
4340
4341
| Obj_create of arg_label list
4341
4342
| Js_global of js_val
4342
4343
| Js_module_as_var of external_module_name
4343
- | Js_module_as_fn of external_module_name
4344
+ | Js_module_as_fn of external_module_name
4345
+ | Js_module_as_class of external_module_name
4344
4346
| Js_call of js_call external_module
4345
4347
| Js_send of js_send
4346
4348
| Js_new of js_val
@@ -4416,7 +4418,8 @@ let check_ffi ?loc ffi =
4416
4418
-> ()
4417
4419
4418
4420
| Js_module_as_var external_module_name
4419
- | Js_module_as_fn external_module_name
4421
+ | Js_module_as_fn external_module_name
4422
+ | Js_module_as_class external_module_name
4420
4423
-> check_external_module_name external_module_name
4421
4424
| Js_new {external_module_name ; txt = name}
4422
4425
| Js_call {external_module_name ; txt = {name ; _}}
@@ -4579,7 +4582,19 @@ let handle_attributes
4579
4582
let result_type = aux result_type_ty in
4580
4583
let ffi =
4581
4584
match st with
4582
- | {mk_obj = true} ->
4585
+ | {mk_obj = true;
4586
+
4587
+ val_name = None;
4588
+ external_module_name = None ;
4589
+ module_as_val = None;
4590
+ val_send = None;
4591
+ splice = false;
4592
+ new_name = None;
4593
+ call_name = None;
4594
+ set_name = None ;
4595
+ get_name = None ;
4596
+ get_index = false ;
4597
+ } ->
4583
4598
let labels = List.map (function
4584
4599
| {arg_type = Unit ; arg_label = (Empty as l)}
4585
4600
-> l
@@ -4592,7 +4607,24 @@ let handle_attributes
4592
4607
if String.length prim_name <> 0 then
4593
4608
Location.raise_errorf ~loc "[@@bs.obj] expect external names to be empty string";
4594
4609
Obj_create labels(* Need fetch label here, for better error message *)
4595
- | {set_index = true}
4610
+ | {mk_obj = true; _}
4611
+ ->
4612
+ Location.raise_errorf ~loc "conflict attributes found"
4613
+ | {set_index = true;
4614
+
4615
+ val_name = None;
4616
+ external_module_name = None ;
4617
+ module_as_val = None;
4618
+ val_send = None;
4619
+ splice = false;
4620
+ get_index = false;
4621
+ new_name = None;
4622
+ call_name = None;
4623
+ set_name = None ;
4624
+ get_name = None ;
4625
+ mk_obj = false ;
4626
+
4627
+ }
4596
4628
->
4597
4629
if String.length prim_name <> 0 then
4598
4630
Location.raise_errorf ~loc "[@@bs.set_index] expect external names to be empty string";
@@ -4602,19 +4634,63 @@ let handle_attributes
4602
4634
Js_set_index
4603
4635
| _ -> Location.raise_errorf ~loc "Ill defined attribute [@@bs.set_index](arity of 3)"
4604
4636
end
4605
- | {get_index = true} ->
4637
+ | {set_index = true; _}
4638
+ ->
4639
+ Location.raise_errorf ~loc "conflict attributes found"
4640
+
4641
+ | {get_index = true;
4642
+
4643
+ val_name = None;
4644
+ external_module_name = None ;
4645
+ module_as_val = None;
4646
+ val_send = None;
4647
+ splice = false;
4648
+ new_name = None;
4649
+ call_name = None;
4650
+ set_name = None ;
4651
+ get_name = None ;
4652
+ mk_obj = false ;
4653
+ } ->
4606
4654
if String.length prim_name <> 0 then
4607
4655
Location.raise_errorf ~loc "[@@bs.get_index] expect external names to be empty string";
4608
4656
begin match arg_types with
4609
4657
| [_obj; _v ] ->
4610
4658
Js_get_index
4611
4659
| _ -> Location.raise_errorf ~loc "Ill defined attribute [@@bs.get_index] (arity of 2)"
4612
4660
end
4613
- | {module_as_val = Some v } ->
4614
- begin match arg_types_ty with
4615
- | [] -> Js_module_as_var v
4616
- | _ -> Js_module_as_fn v
4617
- end
4661
+ | {get_index = true; _}
4662
+ -> Location.raise_errorf ~loc "conflict attributes found"
4663
+ | {module_as_val = Some v ;
4664
+
4665
+ get_index = false;
4666
+ val_name ;
4667
+ new_name ;
4668
+ (*TODO: a better way to avoid breaking existing code,
4669
+ we need tell the difference from
4670
+ {[
4671
+ 1. [@@bs.val "x"]
4672
+ 2. external x : .. "x" [@@bs.val ]
4673
+ 3. external x : .. "" [@@bs.val]
4674
+ ]}
4675
+ *)
4676
+ external_module_name = None ;
4677
+ val_send = None;
4678
+ splice = false;
4679
+ call_name = None;
4680
+ set_name = None ;
4681
+ get_name = None ;
4682
+ mk_obj = false ;
4683
+ } ->
4684
+ begin match arg_types_ty, new_name, val_name with
4685
+ | [], None, _ -> Js_module_as_var v
4686
+ | _, None, _ -> Js_module_as_fn v
4687
+ | _, Some _, Some _ ->
4688
+ Location.raise_errorf ~loc "conflict attributes found"
4689
+ | _, Some n, None
4690
+ -> Js_module_as_class v
4691
+ end
4692
+ | {module_as_val = Some _}
4693
+ -> Location.raise_errorf ~loc "conflict attributes found"
4618
4694
| {call_name = Some name ;
4619
4695
splice;
4620
4696
external_module_name;
@@ -25782,6 +25858,25 @@ let translate_ffi (ffi : Ast_external_attributes.ffi ) prim_name
25782
25858
| _ ->
25783
25859
E.call ~info:{arity=Full; call_info = Call_na} fn args
25784
25860
end
25861
+ | Js_module_as_class module_name ->
25862
+ let fn =
25863
+ match handle_external (Some module_name) with
25864
+ | Some (id,name) ->
25865
+ E.external_var_dot id name None
25866
+ | None -> assert false in
25867
+ let args =
25868
+ Ext_list.flat_map2_last (ocaml_to_js false) arg_types args
25869
+ (* TODO: fix in rest calling convention *)
25870
+ in
25871
+ begin
25872
+ (match cxt.st with
25873
+ | Declare (_, id) | Assign id ->
25874
+ (* Format.fprintf Format.err_formatter "%a@."Ident.print id; *)
25875
+ Ext_ident.make_js_object id
25876
+ | EffectCall | NeedValue -> ())
25877
+ ;
25878
+ E.new_ fn args
25879
+ end
25785
25880
25786
25881
| Js_new { external_module_name = module_name;
25787
25882
txt = fn;
@@ -25808,14 +25903,15 @@ let translate_ffi (ffi : Ast_external_attributes.ffi ) prim_name
25808
25903
TODO: we should propagate this property
25809
25904
as much as we can(in alias table)
25810
25905
*)
25811
- (
25812
- match cxt.st with
25813
- | Declare (_, id) | Assign id ->
25814
- (* Format.fprintf Format.err_formatter "%a@."Ident.print id; *)
25815
- Ext_ident.make_js_object id
25816
- | EffectCall | NeedValue -> ()
25817
- );
25818
- E.new_ fn args
25906
+ begin
25907
+ (match cxt.st with
25908
+ | Declare (_, id) | Assign id ->
25909
+ (* Format.fprintf Format.err_formatter "%a@."Ident.print id; *)
25910
+ Ext_ident.make_js_object id
25911
+ | EffectCall | NeedValue -> ())
25912
+ ;
25913
+ E.new_ fn args
25914
+ end
25819
25915
25820
25916
25821
25917
0 commit comments