123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119(*_ This file is manually imported from the Jane Street version of the
OCaml compiler. Don't make changes directly to this file. *)[@@@ocaml.warning"-missing-record-field-pattern"]open!Shadow_compiler_distributiontypematurity=|Stable|Beta|Alpha(* Remember to update [all] when changing this type. *)type_t=|Comprehensions:unitt|Mode:unitt|Unique:unitt|Include_functor:unitt|Polymorphic_parameters:unitt|Immutable_arrays:unitt|Module_strengthening:unitt|Layouts:maturityt|SIMD:unitt|Labeled_tuples:unitt|Small_numbers:unitttype'alanguage_extension_kernel='atmoduleExist=structtypet=Pack:_language_extension_kernel->tletall=[PackComprehensions;PackMode;PackUnique;PackInclude_functor;PackPolymorphic_parameters;PackImmutable_arrays;PackModule_strengthening;PackLayouts;PackSIMD;PackLabeled_tuples;PackSmall_numbers];;endmoduleExist_pair=structtypet=Pair:'alanguage_extension_kernel*'a->tend(* When you update this, update [pair_of_string] below too. *)letto_string:typea.at->string=function|Comprehensions->"comprehensions"|Mode->"mode"|Unique->"unique"|Include_functor->"include_functor"|Polymorphic_parameters->"polymorphic_parameters"|Immutable_arrays->"immutable_arrays"|Module_strengthening->"module_strengthening"|Layouts->"layouts"|SIMD->"simd"|Labeled_tuples->"labeled_tuples"|Small_numbers->"small_numbers";;(* converts full extension names, like "layouts_alpha" to a pair of
an extension and its maturity. For extensions that don't take an
argument, the conversion is just [Language_extension_kernel.of_string].
*)letpair_of_stringextn_name:Exist_pair.toption=matchString.lowercase_asciiextn_namewith|"comprehensions"->Some(Pair(Comprehensions,()))|"mode"->Some(Pair(Mode,()))|"unique"->Some(Pair(Unique,()))|"include_functor"->Some(Pair(Include_functor,()))|"polymorphic_parameters"->Some(Pair(Polymorphic_parameters,()))|"immutable_arrays"->Some(Pair(Immutable_arrays,()))|"module_strengthening"->Some(Pair(Module_strengthening,()))|"layouts"->Some(Pair(Layouts,Stable))|"layouts_alpha"->Some(Pair(Layouts,Alpha))|"layouts_beta"->Some(Pair(Layouts,Beta))|"simd"->Some(Pair(SIMD,()))|"labeled_tuples"->Some(Pair(Labeled_tuples,()))|"small_numbers"->Some(Pair(Small_numbers,()))|_->None;;letmaturity_to_string=function|Alpha->"alpha"|Beta->"beta"|Stable->"stable";;letof_stringextn_name:Exist.toption=matchpair_of_stringextn_namewith|Some(Pair(ext,_))->Some(Packext)|None->None;;(* We'll do this in a more principled way later. *)letis_erasable:typea.at->bool=function|Mode|Unique|Layouts->true|Comprehensions|Include_functor|Polymorphic_parameters|Immutable_arrays|Module_strengthening|SIMD|Labeled_tuples|Small_numbers->false;;(* See the mli. *)moduletypeLanguage_extension_for_jane_syntax=sigtypenonrec'at='atvalis_enabled:_t->boolvalis_at_least:'at->'a->boolend