Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file predef.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372(**************************************************************************)(* *)(* 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_predeftypeabstract_type_constr=[|`Int|`Char|`String|`Bytes|`Float|`Continuation|`Array|`Nativeint|`Int32|`Int64|`Lazy_t|`Extension_constructor|`Floatarray|`Iarray|`Atomic_loc]typedata_type_constr=[|`Bool|`Unit|`Exn|`Eff|`List|`Option]typetype_constr=[|abstract_type_constr|data_type_constr]letall_type_constrs:type_constrlist=[`Int;`Char;`String;`Bytes;`Float;`Bool;`Unit;`Exn;`Eff;`Continuation;`Array;`List;`Option;`Nativeint;`Int32;`Int64;`Lazy_t;`Extension_constructor;`Floatarray;`Iarray;`Atomic_loc;]letident_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_eff=ident_create"eff"andident_continuation=ident_create"continuation"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"andident_iarray=ident_create"iarray"andident_atomic_loc=ident_create"atomic_loc"letident_of_type_constr:type_constr->Ident.t=function|`Int->ident_int|`Char->ident_char|`String->ident_string|`Bytes->ident_bytes|`Float->ident_float|`Bool->ident_bool|`Unit->ident_unit|`Exn->ident_exn|`Eff->ident_eff|`Continuation->ident_continuation|`Array->ident_array|`List->ident_list|`Option->ident_option|`Nativeint->ident_nativeint|`Int32->ident_int32|`Int64->ident_int64|`Lazy_t->ident_lazy_t|`Extension_constructor->ident_extension_constructor|`Floatarray->ident_floatarray|`Iarray->ident_iarray|`Atomic_loc->ident_atomic_locletpath_int=Pidentident_intandpath_char=Pidentident_charandpath_bytes=Pidentident_bytesandpath_float=Pidentident_floatandpath_bool=Pidentident_boolandpath_unit=Pidentident_unitandpath_exn=Pidentident_exnandpath_eff=Pidentident_effandpath_continuation=Pidentident_continuationandpath_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_floatarrayandpath_iarray=Pidentident_iarrayandpath_atomic_loc=Pidentident_atomic_locletpath_of_type_constrtyp=Pident(ident_of_type_constrtyp)lettconstrpargs=newgenty(Tconstr(p,args,refMnil))lettype_int=tconstrpath_int[]andtype_char=tconstrpath_char[]andtype_bytes=tconstrpath_bytes[]andtype_float=tconstrpath_float[]andtype_bool=tconstrpath_bool[]andtype_unit=tconstrpath_unit[]andtype_exn=tconstrpath_exn[]andtype_efft=tconstrpath_eff[t]andtype_continuationt1t2=tconstrpath_continuation[t1;t2]andtype_arrayt=tconstrpath_array[t]andtype_listt=tconstrpath_list[t]andtype_optiont=tconstrpath_option[t]andtype_nativeint=tconstrpath_nativeint[]andtype_int32=tconstrpath_int32[]andtype_int64=tconstrpath_int64[]andtype_lazy_tt=tconstrpath_lazy_t[t]andtype_string=tconstrpath_string[]andtype_extension_constructor=tconstrpath_extension_constructor[]andtype_floatarray=tconstrpath_floatarray[]andtype_iarrayt=tconstrpath_iarray[t]andtype_atomic_loct=tconstrpath_atomic_loc[t]letfind_type_constr=letall_predef_paths=all_type_constrs|>List.map(funtconstr->path_of_type_constrtconstr,tconstr)|>Path.Map.of_listinfunp->Path.Map.find_optpall_predef_pathsletident_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"andident_continuation_already_taken=ident_create"Continuation_already_taken"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;ident_continuation_already_taken;]letpath_match_failure=Pidentident_match_failureandpath_assert_failure=Pidentident_assert_failureandpath_undefined_recursive_module=Pidentident_undefined_recursive_moduleletident_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"letdecl_of_type_constrtconstr=lettype_uid=Uid.of_predef_id(ident_of_type_constrtconstr)inletdecl0?(immediate=Type_immediacy.Unknown)?(kind=Type_abstractDefinition)()={type_params=[];type_arity=0;type_kind=kind;type_loc=Location.none;type_private=Asttypes.Public;type_manifest=None;type_variance=[];type_separability=[];type_is_newtype=false;type_expansion_scope=lowest_level;type_attributes=[];type_immediate=immediate;type_unboxed_default=false;type_uid;}inletdecl1~variance?(separability=Separability.Ind)?(kind=fun_->Type_abstractDefinition)()=letparam=newgenvar()in{(decl0~kind:(kindparam)())withtype_params=[param];type_arity=1;type_variance=[variance];type_separability=[separability];}inletdecl2~variance:(var1,var2)?separability:((sep1,sep2)=(Separability.Ind,Separability.Ind))?(kind=fun__->Type_abstractDefinition)()=letparam1,param2=newgenvar(),newgenvar()in{(decl0~kind:(kindparam1param2)())withtype_params=[param1;param2];type_arity=2;type_variance=[var1;var2];type_separability=[sep1;sep2];}inletcstridargs={cd_id=id;cd_args=Cstr_tupleargs;cd_res=None;cd_loc=Location.none;cd_attributes=[];cd_uid=Uid.of_predef_idid;}inletvariantconstrs=Type_variant(constrs,Variant_regular)inmatchtconstrwith|`Int|`Char->decl0~immediate:Always()|`String|`Bytes|`Float|`Floatarray|`Nativeint|`Int32|`Int64|`Extension_constructor->decl0()|`Bool->letkind=variant[cstrident_false[];cstrident_true[]]indecl0~immediate:Always~kind()|`Unit->letkind=variant[cstrident_void[]]indecl0~immediate:Always~kind()|`Exn->decl0~kind:Type_open()|`Eff->letkind_=Type_openindecl1~variance:Variance.full~kind()|`Continuation->letvariance=Variance.(contravariant,covariant)indecl2~variance()|`Array|`Atomic_loc->decl1~variance:Variance.full()|`Iarray->decl1~variance:Variance.covariant()|`List->letkindtvar=variant[cstrident_nil[];cstrident_cons[tvar;type_listtvar]]indecl1~variance:Variance.covariant~kind()|`Option->letkindtvar=variant[cstrident_none[];cstrident_some[tvar]]indecl1~variance:Variance.covariant~kind()|`Lazy_t->decl1~variance:Variance.covariant()letbuild_initial_envadd_typeadd_extensionempty_env=letadd_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;}inList.fold_left(funenvtconstr->add_type(ident_of_type_constrtconstr)(decl_of_type_constrtconstr)env)empty_envall_type_constrs(* Predefined exceptions - alphabetical order *)|>add_extensionident_assert_failure[newgenty(Ttuple[None,type_string;None,type_int;None,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[None,type_string;None,type_int;None,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[None,type_string;None,type_int;None,type_int])]|>add_extensionident_continuation_already_taken[]letbuiltin_values=List.map(funid->(Ident.nameid,id))all_predef_exnsletbuiltin_idents=List.rev!builtin_idents