1
- (* * Bundled by bspack 08/23 -11:54 *)
1
+ (* * Bundled by bspack 08/24 -11:29 *)
2
2
module String_map : sig
3
3
#1 " string_map.mli"
4
4
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -4440,36 +4440,51 @@ let check_ffi ?loc ffi =
4440
4440
TODO: we should emit an warning if we bind
4441
4441
two external files to the same module name
4442
4442
*)
4443
+ type bundle_source =
4444
+ [`Nm_payload of string
4445
+ |`Nm_external of string
4446
+ | `Nm_val of string
4447
+ ]
4443
4448
4449
+ let string_of_bundle_source (x : bundle_source ) =
4450
+ match x with
4451
+ | `Nm_payload x
4452
+ | `Nm_external x
4453
+ | `Nm_val x -> x
4454
+ type name_source =
4455
+ [ bundle_source
4456
+ | `Nm_na
4457
+
4458
+ ]
4444
4459
type st =
4445
- { val_name : string option ;
4460
+ { val_name : name_source ;
4446
4461
external_module_name : external_module_name option ;
4447
4462
module_as_val : external_module_name option ;
4448
- val_send : string option ;
4463
+ val_send : name_source ;
4449
4464
splice : bool ; (* mutable *)
4450
4465
set_index : bool ; (* mutable *)
4451
4466
get_index : bool ;
4452
- new_name : string option ;
4453
- call_name : string option ;
4454
- set_name : string option ;
4455
- get_name : string option ;
4467
+ new_name : name_source ;
4468
+ call_name : name_source ;
4469
+ set_name : name_source ;
4470
+ get_name : name_source ;
4456
4471
mk_obj : bool ;
4457
4472
4458
4473
}
4459
4474
4460
4475
let init_st =
4461
4476
{
4462
- val_name = None ;
4477
+ val_name = `Nm_na ;
4463
4478
external_module_name = None ;
4464
4479
module_as_val = None ;
4465
- val_send = None ;
4480
+ val_send = `Nm_na ;
4466
4481
splice = false ;
4467
4482
set_index = false ;
4468
4483
get_index = false ;
4469
- new_name = None ;
4470
- call_name = None ;
4471
- set_name = None ;
4472
- get_name = None ;
4484
+ new_name = `Nm_na ;
4485
+ call_name = `Nm_na ;
4486
+ set_name = `Nm_na ;
4487
+ get_name = `Nm_na ;
4473
4488
mk_obj = false ;
4474
4489
4475
4490
}
@@ -4503,13 +4518,13 @@ let handle_attributes
4503
4518
(type_annotation : Parsetree.core_type )
4504
4519
(prim_attributes : Ast_attributes.t ) (prim_name : string ) =
4505
4520
let prim_name_or_pval_prim =
4506
- if String. length prim_name = 0 then pval_prim
4507
- else prim_name (* need check name *)
4521
+ if String. length prim_name = 0 then `Nm_val pval_prim
4522
+ else `Nm_external prim_name (* need check name *)
4508
4523
in
4509
4524
let name_from_payload_or_prim payload =
4510
4525
match Ast_payload. is_single_string payload with
4511
- | Some _ as val_name -> val_name
4512
- | None -> Some prim_name_or_pval_prim
4526
+ | Some val_name -> `Nm_payload val_name
4527
+ | None -> prim_name_or_pval_prim
4513
4528
in
4514
4529
let result_type_ty, arg_types_ty =
4515
4530
Ast_core_type. list_of_arrow type_annotation in
@@ -4548,7 +4563,9 @@ let handle_attributes
4548
4563
{ st with
4549
4564
module_as_val =
4550
4565
Some
4551
- { bundle = prim_name_or_pval_prim ;
4566
+ { bundle =
4567
+ string_of_bundle_source
4568
+ (prim_name_or_pval_prim :> bundle_source ) ;
4552
4569
bind_name = Some pval_prim}
4553
4570
}
4554
4571
| _ -> Location. raise_errorf ~loc " Illegal attributes"
@@ -4584,15 +4601,15 @@ let handle_attributes
4584
4601
match st with
4585
4602
| {mk_obj = true ;
4586
4603
4587
- val_name = None ;
4604
+ val_name = `Nm_na ;
4588
4605
external_module_name = None ;
4589
4606
module_as_val = None ;
4590
- val_send = None ;
4607
+ val_send = `Nm_na ;
4591
4608
splice = false ;
4592
- new_name = None ;
4593
- call_name = None ;
4594
- set_name = None ;
4595
- get_name = None ;
4609
+ new_name = `Nm_na ;
4610
+ call_name = `Nm_na ;
4611
+ set_name = `Nm_na ;
4612
+ get_name = `Nm_na ;
4596
4613
get_index = false ;
4597
4614
} ->
4598
4615
let labels = List. map (function
@@ -4612,16 +4629,16 @@ let handle_attributes
4612
4629
Location. raise_errorf ~loc " conflict attributes found"
4613
4630
| {set_index = true ;
4614
4631
4615
- val_name = None ;
4632
+ val_name = `Nm_na ;
4616
4633
external_module_name = None ;
4617
4634
module_as_val = None ;
4618
- val_send = None ;
4635
+ val_send = `Nm_na ;
4619
4636
splice = false ;
4620
4637
get_index = false ;
4621
- new_name = None ;
4622
- call_name = None ;
4623
- set_name = None ;
4624
- get_name = None ;
4638
+ new_name = `Nm_na ;
4639
+ call_name = `Nm_na ;
4640
+ set_name = `Nm_na ;
4641
+ get_name = `Nm_na ;
4625
4642
mk_obj = false ;
4626
4643
4627
4644
}
@@ -4640,15 +4657,15 @@ let handle_attributes
4640
4657
4641
4658
| {get_index = true ;
4642
4659
4643
- val_name = None ;
4660
+ val_name = `Nm_na ;
4644
4661
external_module_name = None ;
4645
4662
module_as_val = None ;
4646
- val_send = None ;
4663
+ val_send = `Nm_na ;
4647
4664
splice = false ;
4648
- new_name = None ;
4649
- call_name = None ;
4650
- set_name = None ;
4651
- get_name = None ;
4665
+ new_name = `Nm_na ;
4666
+ call_name = `Nm_na ;
4667
+ set_name = `Nm_na ;
4668
+ get_name = `Nm_na ;
4652
4669
mk_obj = false ;
4653
4670
} ->
4654
4671
if String. length prim_name <> 0 then
@@ -4674,89 +4691,94 @@ let handle_attributes
4674
4691
]}
4675
4692
*)
4676
4693
external_module_name = None ;
4677
- val_send = None ;
4694
+ val_send = `Nm_na ;
4678
4695
splice = false ;
4679
- call_name = None ;
4680
- set_name = None ;
4681
- get_name = None ;
4696
+ call_name = `Nm_na ;
4697
+ set_name = `Nm_na ;
4698
+ get_name = `Nm_na ;
4682
4699
mk_obj = false ;
4683
4700
} ->
4684
4701
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 _ ->
4702
+ | [] , `Nm_na , _ -> Js_module_as_var v
4703
+ | _ , `Nm_na , _ -> Js_module_as_fn v
4704
+ | _ , #bundle_source , #bundle_source ->
4688
4705
Location. raise_errorf ~loc " conflict attributes found"
4689
- | _, Some n, None
4690
- -> Js_module_as_class v
4706
+ | _, (`Nm_val _ | `Nm_external _) , `Nm_na
4707
+ -> Js_module_as_class v
4708
+ | _, `Nm_payload _ , `Nm_na
4709
+ ->
4710
+ Location. raise_errorf ~loc
4711
+ " conflict attributes found: (bs.new should not carry payload here)"
4712
+
4691
4713
end
4692
4714
| {module_as_val = Some _}
4693
4715
-> Location. raise_errorf ~loc " conflict attributes found"
4694
- | {call_name = Some name ;
4716
+ | {call_name = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4695
4717
splice;
4696
4718
external_module_name;
4697
4719
4698
- val_name = None ;
4720
+ val_name = `Nm_na ;
4699
4721
module_as_val = None ;
4700
- val_send = None ;
4722
+ val_send = `Nm_na ;
4701
4723
set_index = false ;
4702
4724
get_index = false ;
4703
- new_name = None ;
4704
- set_name = None ;
4705
- get_name = None
4725
+ new_name = `Nm_na ;
4726
+ set_name = `Nm_na ;
4727
+ get_name = `Nm_na
4706
4728
} ->
4707
4729
Js_call {txt = {splice; name}; external_module_name}
4708
- | {call_name = Some _ }
4730
+ | {call_name = #bundle_source }
4709
4731
-> Location. raise_errorf ~loc " conflict attributes found"
4710
4732
4711
- | {val_name = Some name;
4733
+ | {val_name = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4712
4734
external_module_name;
4713
4735
4714
- call_name = None ;
4736
+ call_name = `Nm_na ;
4715
4737
module_as_val = None ;
4716
- val_send = None ;
4738
+ val_send = `Nm_na ;
4717
4739
set_index = false ;
4718
4740
get_index = false ;
4719
- new_name = None ;
4720
- set_name = None ;
4721
- get_name = None
4741
+ new_name = `Nm_na ;
4742
+ set_name = `Nm_na ;
4743
+ get_name = `Nm_na
4722
4744
4723
4745
}
4724
4746
->
4725
4747
Js_global {txt = name; external_module_name}
4726
- | {val_name = Some _ }
4748
+ | {val_name = #bundle_source }
4727
4749
-> Location. raise_errorf ~loc " conflict attributes found"
4728
4750
| {splice ;
4729
4751
external_module_name = (Some _ as external_module_name);
4730
4752
4731
- val_name = None ;
4732
- call_name = None ;
4753
+ val_name = `Nm_na ;
4754
+ call_name = `Nm_na ;
4733
4755
module_as_val = None ;
4734
- val_send = None ;
4756
+ val_send = `Nm_na ;
4735
4757
set_index = false ;
4736
4758
get_index = false ;
4737
- new_name = None ;
4738
- set_name = None ;
4739
- get_name = None ;
4759
+ new_name = `Nm_na ;
4760
+ set_name = `Nm_na ;
4761
+ get_name = `Nm_na ;
4740
4762
4741
4763
}
4742
4764
->
4743
- let name = prim_name_or_pval_prim in
4765
+ let name = string_of_bundle_source prim_name_or_pval_prim in
4744
4766
begin match arg_types with
4745
4767
| [] -> Js_global {txt = name; external_module_name}
4746
4768
| _ -> Js_call {txt = {splice; name}; external_module_name}
4747
4769
end
4748
4770
4749
- | {val_send = Some name;
4771
+ | {val_send = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4750
4772
splice;
4751
4773
4752
- val_name = None ;
4753
- call_name = None ;
4774
+ val_name = `Nm_na ;
4775
+ call_name = `Nm_na ;
4754
4776
module_as_val = None ;
4755
4777
set_index = false ;
4756
4778
get_index = false ;
4757
- new_name = None ;
4758
- set_name = None ;
4759
- get_name = None ;
4779
+ new_name = `Nm_na ;
4780
+ set_name = `Nm_na ;
4781
+ get_name = `Nm_na ;
4760
4782
external_module_name = None ;
4761
4783
} ->
4762
4784
begin match arg_types with
@@ -4765,35 +4787,35 @@ let handle_attributes
4765
4787
| _ ->
4766
4788
Location. raise_errorf ~loc " Ill defined attribute [@@bs.send] (at least one argument)"
4767
4789
end
4768
- | {val_send = Some _ }
4790
+ | {val_send = #bundle_source }
4769
4791
-> Location. raise_errorf ~loc " conflict attributes found"
4770
4792
4771
- | {new_name = Some name;
4793
+ | {new_name = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4772
4794
external_module_name;
4773
4795
4774
- val_name = None ;
4775
- call_name = None ;
4796
+ val_name = `Nm_na ;
4797
+ call_name = `Nm_na ;
4776
4798
module_as_val = None ;
4777
4799
set_index = false ;
4778
4800
get_index = false ;
4779
- val_send = None ;
4780
- set_name = None ;
4781
- get_name = None
4801
+ val_send = `Nm_na ;
4802
+ set_name = `Nm_na ;
4803
+ get_name = `Nm_na
4782
4804
}
4783
4805
-> Js_new {txt = name; external_module_name}
4784
- | {new_name = Some _ }
4806
+ | {new_name = #bundle_source }
4785
4807
-> Location. raise_errorf ~loc " conflict attributes found"
4786
4808
4787
- | {set_name = Some name;
4809
+ | {set_name = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4788
4810
4789
- val_name = None ;
4790
- call_name = None ;
4811
+ val_name = `Nm_na ;
4812
+ call_name = `Nm_na ;
4791
4813
module_as_val = None ;
4792
4814
set_index = false ;
4793
4815
get_index = false ;
4794
- val_send = None ;
4795
- new_name = None ;
4796
- get_name = None ;
4816
+ val_send = `Nm_na ;
4817
+ new_name = `Nm_na ;
4818
+ get_name = `Nm_na ;
4797
4819
external_module_name = None
4798
4820
}
4799
4821
->
@@ -4802,19 +4824,19 @@ let handle_attributes
4802
4824
Js_set name
4803
4825
| _ -> Location. raise_errorf ~loc " Ill defined attribute [@@bs.set] (two args required)"
4804
4826
end
4805
- | {set_name = Some _ }
4827
+ | {set_name = #bundle_source }
4806
4828
-> Location. raise_errorf ~loc " conflict attributes found"
4807
4829
4808
- | {get_name = Some name;
4830
+ | {get_name = ( `Nm_val name | `Nm_external name | `Nm_payload name) ;
4809
4831
4810
- val_name = None ;
4811
- call_name = None ;
4832
+ val_name = `Nm_na ;
4833
+ call_name = `Nm_na ;
4812
4834
module_as_val = None ;
4813
4835
set_index = false ;
4814
4836
get_index = false ;
4815
- val_send = None ;
4816
- new_name = None ;
4817
- set_name = None ;
4837
+ val_send = `Nm_na ;
4838
+ new_name = `Nm_na ;
4839
+ set_name = `Nm_na ;
4818
4840
external_module_name = None
4819
4841
}
4820
4842
->
@@ -4823,7 +4845,7 @@ let handle_attributes
4823
4845
| _ ->
4824
4846
Location. raise_errorf ~loc " Ill defined attribute [@@bs.get] (only one argument)"
4825
4847
end
4826
- | {get_name = Some _ }
4848
+ | {get_name = #bundle_source }
4827
4849
-> Location. raise_errorf ~loc " conflict attributes found"
4828
4850
| _ -> Location. raise_errorf ~loc " Illegal attribute found" in
4829
4851
check_ffi ~loc ffi;
0 commit comments