123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252(**************************************************************************)(* *)(* OCaml *)(* *)(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)(* *)(* Copyright 1996 Institut National de Recherche en Informatique et *)(* en Automatique. *)(* *)(* All rights reserved. This file is distributed under the terms of *)(* the GNU Lesser General Public License version 2.1, with the *)(* special exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)(* Predefined type constructors (with special typing rules in typecore) *)openPathopenTypesopenBtypeletbuiltin_idents=ref[]letwrapcreates=letid=createsinbuiltin_idents:=(s,id)::!builtin_idents;idletident_create=wrapIdent.create_predefletident_int=ident_create"int"andident_char=ident_create"char"andident_bytes=ident_create"bytes"andident_float=ident_create"float"andident_bool=ident_create"bool"andident_unit=ident_create"unit"andident_exn=ident_create"exn"andident_array=ident_create"array"andident_list=ident_create"list"andident_option=ident_create"option"andident_nativeint=ident_create"nativeint"andident_int32=ident_create"int32"andident_int64=ident_create"int64"andident_lazy_t=ident_create"lazy_t"andident_string=ident_create"string"andident_extension_constructor=ident_create"extension_constructor"andident_floatarray=ident_create"floatarray"letpath_int=Pidentident_intandpath_char=Pidentident_charandpath_bytes=Pidentident_bytesandpath_float=Pidentident_floatandpath_bool=Pidentident_boolandpath_unit=Pidentident_unitandpath_exn=Pidentident_exnandpath_array=Pidentident_arrayandpath_list=Pidentident_listandpath_option=Pidentident_optionandpath_nativeint=Pidentident_nativeintandpath_int32=Pidentident_int32andpath_int64=Pidentident_int64andpath_lazy_t=Pidentident_lazy_tandpath_string=Pidentident_stringandpath_extension_constructor=Pidentident_extension_constructorandpath_floatarray=Pidentident_floatarraylettype_int=newgenty(Tconstr(path_int,[],refMnil))andtype_char=newgenty(Tconstr(path_char,[],refMnil))andtype_bytes=newgenty(Tconstr(path_bytes,[],refMnil))andtype_float=newgenty(Tconstr(path_float,[],refMnil))andtype_bool=newgenty(Tconstr(path_bool,[],refMnil))andtype_unit=newgenty(Tconstr(path_unit,[],refMnil))andtype_exn=newgenty(Tconstr(path_exn,[],refMnil))andtype_arrayt=newgenty(Tconstr(path_array,[t],refMnil))andtype_listt=newgenty(Tconstr(path_list,[t],refMnil))andtype_optiont=newgenty(Tconstr(path_option,[t],refMnil))andtype_nativeint=newgenty(Tconstr(path_nativeint,[],refMnil))andtype_int32=newgenty(Tconstr(path_int32,[],refMnil))andtype_int64=newgenty(Tconstr(path_int64,[],refMnil))andtype_lazy_tt=newgenty(Tconstr(path_lazy_t,[t],refMnil))andtype_string=newgenty(Tconstr(path_string,[],refMnil))andtype_extension_constructor=newgenty(Tconstr(path_extension_constructor,[],refMnil))andtype_floatarray=newgenty(Tconstr(path_floatarray,[],refMnil))letident_match_failure=ident_create"Match_failure"andident_out_of_memory=ident_create"Out_of_memory"andident_invalid_argument=ident_create"Invalid_argument"andident_failure=ident_create"Failure"andident_not_found=ident_create"Not_found"andident_sys_error=ident_create"Sys_error"andident_end_of_file=ident_create"End_of_file"andident_division_by_zero=ident_create"Division_by_zero"andident_stack_overflow=ident_create"Stack_overflow"andident_sys_blocked_io=ident_create"Sys_blocked_io"andident_assert_failure=ident_create"Assert_failure"andident_undefined_recursive_module=ident_create"Undefined_recursive_module"letall_predef_exns=[ident_match_failure;ident_out_of_memory;ident_invalid_argument;ident_failure;ident_not_found;ident_sys_error;ident_end_of_file;ident_division_by_zero;ident_stack_overflow;ident_sys_blocked_io;ident_assert_failure;ident_undefined_recursive_module;]letpath_match_failure=Pidentident_match_failureandpath_assert_failure=Pidentident_assert_failureandpath_undefined_recursive_module=Pidentident_undefined_recursive_moduleletcstridargs={cd_id=id;cd_args=Cstr_tupleargs;cd_res=None;cd_loc=Location.none;cd_attributes=[];cd_uid=Uid.of_predef_idid;}letident_false=ident_create"false"andident_true=ident_create"true"andident_void=ident_create"()"andident_nil=ident_create"[]"andident_cons=ident_create"::"andident_none=ident_create"None"andident_some=ident_create"Some"letmk_add_typeadd_typetype_ident?manifest?(immediate=Type_immediacy.Unknown)?(kind=Type_abstract)env=letdecl={type_params=[];type_arity=0;type_kind=kind;type_loc=Location.none;type_private=Asttypes.Public;type_manifest=manifest;type_variance=[];type_separability=[];type_is_newtype=false;type_expansion_scope=lowest_level;type_attributes=[];type_immediate=immediate;type_unboxed_default=false;type_uid=Uid.of_predef_idtype_ident;}inadd_typetype_identdeclenvletbuild_initial_envadd_typeadd_extensionempty_env=letadd_type=mk_add_typeadd_typeandadd_type1type_ident~variance~separability?(kind=fun_->Type_abstract)env=letparam=newgenvar()inletdecl={type_params=[param];type_arity=1;type_kind=kindparam;type_loc=Location.none;type_private=Asttypes.Public;type_manifest=None;type_variance=[variance];type_separability=[separability];type_is_newtype=false;type_expansion_scope=lowest_level;type_attributes=[];type_immediate=Unknown;type_unboxed_default=false;type_uid=Uid.of_predef_idtype_ident;}inadd_typetype_identdeclenvinletadd_extensionidl=add_extensionid{ext_type_path=path_exn;ext_type_params=[];ext_args=Cstr_tuplel;ext_ret_type=None;ext_private=Asttypes.Public;ext_loc=Location.none;ext_attributes=[Ast_helper.Attr.mk(Location.mknoloc"ocaml.warn_on_literal_pattern")(Parsetree.PStr[])];ext_uid=Uid.of_predef_idid;}inletvariantconstrs=Type_variant(constrs,Variant_regular)inempty_env(* Predefined types - alphabetical order *)|>add_type1ident_array~variance:Variance.full~separability:Separability.Ind|>add_typeident_bool~immediate:Always~kind:(variant[cstrident_false[];cstrident_true[]])|>add_typeident_char~immediate:Always|>add_typeident_exn~kind:Type_open|>add_typeident_extension_constructor|>add_typeident_float|>add_typeident_floatarray|>add_typeident_int~immediate:Always|>add_typeident_int32|>add_typeident_int64|>add_type1ident_lazy_t~variance:Variance.covariant~separability:Separability.Ind|>add_type1ident_list~variance:Variance.covariant~separability:Separability.Ind~kind:(funtvar->variant[cstrident_nil[];cstrident_cons[tvar;type_listtvar]])|>add_typeident_nativeint|>add_type1ident_option~variance:Variance.covariant~separability:Separability.Ind~kind:(funtvar->variant[cstrident_none[];cstrident_some[tvar]])|>add_typeident_string|>add_typeident_bytes|>add_typeident_unit~immediate:Always~kind:(variant[cstrident_void[]])(* Predefined exceptions - alphabetical order *)|>add_extensionident_assert_failure[newgenty(Ttuple[type_string;type_int;type_int])]|>add_extensionident_division_by_zero[]|>add_extensionident_end_of_file[]|>add_extensionident_failure[type_string]|>add_extensionident_invalid_argument[type_string]|>add_extensionident_match_failure[newgenty(Ttuple[type_string;type_int;type_int])]|>add_extensionident_not_found[]|>add_extensionident_out_of_memory[]|>add_extensionident_stack_overflow[]|>add_extensionident_sys_blocked_io[]|>add_extensionident_sys_error[type_string]|>add_extensionident_undefined_recursive_module[newgenty(Ttuple[type_string;type_int;type_int])]letbuiltin_values=List.map(funid->(Ident.nameid,id))all_predef_exnsletbuiltin_idents=List.rev!builtin_idents