123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272(* stdlib/sys.ml. Generated from sys.ml.in by configure. *)#3 "sys.ml.in"(**************************************************************************)(* *)(* 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. *)(* *)(**************************************************************************)open!Stdlibtypebackend_type=|Native|Bytecode|Otherofstring(* System interface *)externalget_config:unit->string*int*bool@@portable="caml_sys_get_config"externalget_executable_name:unit->string@@portable="caml_sys_executable_name"externalargv:stringarray@@portable="%sys_argv"externalbig_endian:unit->bool@@portable="%big_endian"externalword_size:unit->int@@portable="%word_size"externalint_size:unit->int@@portable="%int_size"externalmax_wosize:unit->int@@portable="%max_wosize"externalunix:unit->bool@@portable="%ostype_unix"externalwin32:unit->bool@@portable="%ostype_win32"externalcygwin:unit->bool@@portable="%ostype_cygwin"externalget_backend_type:unit->backend_type@@portable="%backend_type"letexecutable_name=get_executable_name()let(os_type,_,_)=get_config()(* CR with-kinds: This reassignment is necessary to let the [string] mode cross. *)letos_type=os_typeletbackend_type=get_backend_type()letbig_endian=big_endian()letword_size=word_size()letint_size=int_size()letunix=unix()letwin32=win32()letcygwin=cygwin()letmax_array_length=max_wosize()letmax_floatarray_length=max_array_length/(64/word_size)letmax_string_length=word_size/8*max_array_length-1(* In bytecode, [float# array] is treated as [float array].
Using [max_floatarray_length] assumes flat float arrays are enabled. *)letmax_unboxed_float_array_length=max_floatarray_lengthletmax_unboxed_float32_array_length=matchbackend_typewith|Native->max_array_length*(word_size/32)|Bytecode|Other_->max_array_lengthletmax_unboxed_int64_array_length=matchbackend_typewith|Native->max_array_length/(64/word_size)|Bytecode|Other_->max_array_lengthletmax_unboxed_int32_array_length=matchbackend_typewith|Native->max_array_length*(word_size/32)|Bytecode|Other_->max_array_lengthletmax_untagged_int16_array_length=matchbackend_typewith|Native->max_array_length*(word_size/16)|Bytecode|Other_->max_array_lengthletmax_untagged_int8_array_length=matchbackend_typewith|Native->max_array_length*(word_size/8)|Bytecode|Other_->max_array_lengthletmax_untagged_int_array_length=matchbackend_typewith|Native->max_array_length|Bytecode|Other_->max_array_lengthletmax_unboxed_nativeint_array_length=matchbackend_typewith|Native->max_array_length|Bytecode|Other_->max_array_lengthletmax_unboxed_vec128_array_length=matchbackend_typewith|Native->max_array_length/(128/word_size)|Bytecode|Other_->max_array_lengthletmax_unboxed_vec256_array_length=matchbackend_typewith|Native->max_array_length/(256/word_size)|Bytecode|Other_->max_array_lengthexternalruntime_variant:unit->string@@portable="caml_runtime_variant"externalruntime_parameters:unit->string@@portable="caml_runtime_parameters"externalpoll_actions:unit->unit@@portable="%poll"externalfile_exists:string->bool@@portable="caml_sys_file_exists"externalis_directory:string->bool@@portable="caml_sys_is_directory"externalis_regular_file:string->bool@@portable="caml_sys_is_regular_file"externalremove:string->unit@@portable="caml_sys_remove"externalrename:string->string->unit@@portable="caml_sys_rename"externalgetenv:string->string@@portable="caml_sys_getenv"externalgetenv_opt:string->stringoption@@portable="caml_sys_getenv_opt"externalcommand:string->int@@portable="caml_sys_system_command"externaltime:unit->(float[@unboxed])@@portable="caml_sys_time""caml_sys_time_unboxed"[@@noalloc]externalchdir:string->unit@@portable="caml_sys_chdir"externalmkdir:string->int->unit@@portable="caml_sys_mkdir"externalrmdir:string->unit@@portable="caml_sys_rmdir"externalgetcwd:unit->string@@portable="caml_sys_getcwd"externalreaddir:string->stringarray@@portable="caml_sys_read_directory"externalio_buffer_size:unit->int="caml_sys_io_buffer_size"letio_buffer_size=io_buffer_size()letinteractive=reffalsetypesignal_behavior=Signal_default|Signal_ignore|Signal_handleof(int->unit)moduleSafe=structexternalsignal:int->signal_behavior@portable->signal_behavior@portable@@portable="caml_install_signal_handler"letset_signalsig_numsig_beh=ignore(signalsig_numsig_beh)endincludeSafeletsigabrt=-1letsigalrm=-2letsigfpe=-3letsighup=-4letsigill=-5letsigint=-6letsigkill=-7letsigpipe=-8letsigquit=-9letsigsegv=-10letsigterm=-11letsigusr1=-12letsigusr2=-13letsigchld=-14letsigcont=-15letsigstop=-16letsigtstp=-17letsigttin=-18letsigttou=-19letsigvtalrm=-20letsigprof=-21letsigbus=-22letsigpoll=-23letsigsys=-24letsigtrap=-25letsigurg=-26letsigxcpu=-27letsigxfsz=-28exceptionBreak(* We don't use [Callback] or [Obj] because of circular dependencies.
The string "Sys.Break" must match runtime/fail.c. *)externalregister_named_value:string->'a->unit="caml_register_named_value"(* Various places in the runtime rely on the "Sys.Break" name. *)let()=register_named_value"Sys.Break"Breakletcatch_breakon=ifonthenset_signalsigint(Signal_handle(fun_->raiseBreak))elseset_signalsigintSignal_defaultexternalwith_async_exns:(unit->'a)->'a@@portable="caml_with_async_exns"externalenable_runtime_warnings:bool->unit@@portable="caml_ml_enable_runtime_warnings"externalruntime_warnings_enabled:unit->bool@@portable="caml_ml_runtime_warnings_enabled"(* The version string is found in file ../VERSION *)letocaml_version="5.2.0+ox"letdevelopment_version=falsetypeextra_prefix=Plus|Tildetypeextra_info=extra_prefix*stringtypeocaml_release_info={major:int;minor:int;patchlevel:int;extra:extra_infooption}letocaml_release={major=5;minor=2;patchlevel=0;extra=Some(Plus,"ox")}(* Optimization *)external[@layout_poly]opaque_identity:('a:any).('a[@local_opt])->('a[@local_opt])@@portable="%opaque"moduleImmediate64=structmoduletypeNon_immediate=sigtypetendmoduletypeImmediate=sigtypet[@@immediate]endmoduleMake(Immediate:Immediate)(Non_immediate:Non_immediate)=structtypet[@@immediate64]type'arepr=|Immediate:Immediate.trepr|Non_immediate:Non_immediate.treprexternalmagic:_repr->trepr@@portable="%identity"letrepr=ifword_size=64thenmagicImmediateelsemagicNon_immediateendend(* Unsafe implementations of [signal] *)externalsignal:int->signal_behavior->signal_behavior="caml_install_signal_handler"letset_signalsig_numsig_beh=ignore(signalsig_numsig_beh)(* Expose the value of [Config.architecture] *)(* CR-someday gyorsh: utils/target_system.ml already has [architecture].
Consider moving to [config.ml] or here. *)typearch=|Amd64|Arm64externalamd64:unit->bool@@portable="%arch_amd64"externalarm64:unit->bool@@portable="%arch_arm64"letamd64=amd64()letarm64=arm64()letarch=matchamd64,arm64with|true,true->failwith"Cannot determine architecture: both amd64 and arm64 detected"|false,false->failwith"Cannot determine architecture: must be amd64 or arm64"|true,false->Amd64|false,true->Arm64;;