@@ -660,7 +660,8 @@ let mk_no_extension f =
660
660
661
661
let mk_disable_all_extensions f =
662
662
" -disable-all-extensions" , Arg. Unit f,
663
- " Disable all extensions, wherever they have been specified; this\n \
663
+ " Legacy, use [-extension-universe no_extensions].\n \
664
+ \ Disable all extensions, wherever they have been specified; this\n \
664
665
\ flag overrides prior uses of the -extension flag, disables any\n \
665
666
\ extensions that are enabled by default, and causes future uses of\n \
666
667
\ the -extension flag to raise an error."
@@ -675,14 +676,24 @@ let mk_only_erasable_extensions f =
675
676
String. concat " , "
676
677
in
677
678
" -only-erasable-extensions" , Arg. Unit f,
678
- " Disable all extensions that cannot be \" erased\" to attributes,\n \
679
+ " Legacy, use [-extension-universe upstream_compatible].\n \
680
+ \ Disable all extensions that cannot be \" erased\" to attributes,\n \
679
681
\ wherever they have been specified; this flag overrides prior\n \
680
682
\ contradictory uses of the -extension flag, raises an error on\n \
681
683
\ future such uses, and disables any such extensions that are\n \
682
684
\ enabled by default.\n \
683
685
\ (Erasable extensions: " ^ erasable_extensions ^ " )"
684
686
;;
685
687
688
+ let mk_extension_universe f =
689
+ let available_extension_universes =
690
+ Language_extension.Universe. (List. map to_string all)
691
+ in
692
+ " -extension-universe" , Arg. Symbol (available_extension_universes, f),
693
+ " Set the extension universe and enable all extensions in it. Each universe\n \
694
+ \ allows a set of extensions, and every successive universe includes \n \
695
+ \ the previous one."
696
+
686
697
let mk_dump_dir f =
687
698
" -dump-dir" , Arg. String f,
688
699
" <dir> dump output like -dlambda into <dir>/<target>.dump"
@@ -868,6 +879,7 @@ module type Common_options = sig
868
879
val _only_erasable_extensions : unit -> unit
869
880
val _extension : string -> unit
870
881
val _no_extension : string -> unit
882
+ val _extension_universe : string -> unit
871
883
val _noassert : unit -> unit
872
884
val _nolabels : unit -> unit
873
885
val _nostdlib : unit -> unit
@@ -1142,6 +1154,7 @@ struct
1142
1154
mk_dtypes F. _annot;
1143
1155
mk_extension F. _extension;
1144
1156
mk_no_extension F. _no_extension;
1157
+ mk_extension_universe F. _extension_universe;
1145
1158
mk_for_pack_byt F. _for_pack;
1146
1159
mk_g_byt F. _g;
1147
1160
mk_no_g F. _no_g;
@@ -1262,6 +1275,7 @@ struct
1262
1275
mk_only_erasable_extensions F. _only_erasable_extensions;
1263
1276
mk_extension F. _extension;
1264
1277
mk_no_extension F. _no_extension;
1278
+ mk_extension_universe F. _extension_universe;
1265
1279
mk_noassert F. _noassert;
1266
1280
mk_noinit F. _noinit;
1267
1281
mk_nolabels F. _nolabels;
@@ -1351,6 +1365,7 @@ struct
1351
1365
mk_only_erasable_extensions F. _only_erasable_extensions;
1352
1366
mk_extension F. _extension;
1353
1367
mk_no_extension F. _no_extension;
1368
+ mk_extension_universe F. _extension_universe;
1354
1369
mk_for_pack_opt F. _for_pack;
1355
1370
mk_g_opt F. _g;
1356
1371
mk_no_g F. _no_g;
@@ -1530,6 +1545,7 @@ module Make_opttop_options (F : Opttop_options) = struct
1530
1545
mk_only_erasable_extensions F. _only_erasable_extensions;
1531
1546
mk_extension F. _extension;
1532
1547
mk_no_extension F. _no_extension;
1548
+ mk_extension_universe F. _extension_universe;
1533
1549
mk_no_float_const_prop F. _no_float_const_prop;
1534
1550
mk_noassert F. _noassert;
1535
1551
mk_noinit F. _noinit;
@@ -1634,6 +1650,7 @@ struct
1634
1650
mk_only_erasable_extensions F. _only_erasable_extensions;
1635
1651
mk_extension F. _extension;
1636
1652
mk_no_extension F. _no_extension;
1653
+ mk_extension_universe F. _extension_universe;
1637
1654
mk_noassert F. _noassert;
1638
1655
mk_nolabels F. _nolabels;
1639
1656
mk_nostdlib F. _nostdlib;
@@ -1734,11 +1751,16 @@ module Default = struct
1734
1751
let _no_strict_sequence = clear strict_sequence
1735
1752
let _no_unboxed_types = clear unboxed_types
1736
1753
let _no_verbose_types = clear verbose_types
1737
- let _disable_all_extensions = Language_extension. disallow_extensions
1754
+ let _disable_all_extensions =
1755
+ Language_extension. (fun () ->
1756
+ set_universe_and_enable_all No_extensions )
1738
1757
let _only_erasable_extensions =
1739
- Language_extension. restrict_to_erasable_extensions
1758
+ Language_extension. (fun () ->
1759
+ set_universe_and_enable_all Upstream_compatible )
1740
1760
let _extension s = Language_extension. (enable_of_string_exn s)
1741
1761
let _no_extension s = Language_extension. (disable_of_string_exn s)
1762
+ let _extension_universe s =
1763
+ Language_extension. (set_universe_and_enable_all_of_string_exn s)
1742
1764
let _noassert = set noassert
1743
1765
let _nolabels = set classic
1744
1766
let _nostdlib = set no_std_include
0 commit comments