diff options
author | Luc Maranget <luc.maranget@inria.fr> | 2010-01-25 14:52:00 +0000 |
---|---|---|
committer | Luc Maranget <luc.maranget@inria.fr> | 2010-01-25 14:52:00 +0000 |
commit | e7ada9b93a02d39cd62f6fd7d9f629429ef51273 (patch) | |
tree | 0d5771c12e6ab43afb23e5976c1ab35686a66b30 | |
parent | 924e832b687e914f4173bb52ec39806b1b6192a8 (diff) | |
download | ocaml-jo311.tar.gz |
Preparing relase 3.11.2jo311
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/jo311@9590 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
88 files changed, 1337 insertions, 1460 deletions
@@ -336,8 +336,8 @@ bytecomp/transljoin.cmi: typing/typedtree.cmi typing/primitive.cmi \ bytecomp/translmod.cmi: typing/typedtree.cmi typing/primitive.cmi \ parsing/location.cmi bytecomp/lambda.cmi typing/ident.cmi bytecomp/translobj.cmi: bytecomp/lambda.cmi typing/ident.cmi typing/env.cmi -bytecomp/typeopt.cmi: typing/typedtree.cmi typing/path.cmi \ - bytecomp/lambda.cmi +bytecomp/typeopt.cmi: typing/types.cmi typing/typedtree.cmi typing/path.cmi \ + bytecomp/lambda.cmi typing/env.cmi bytecomp/bytegen.cmo: typing/types.cmi bytecomp/switch.cmi typing/subst.cmi \ typing/stypes.cmi typing/primitive.cmi utils/misc.cmi bytecomp/lambda.cmi \ bytecomp/instruct.cmi typing/ident.cmi utils/config.cmi \ @@ -686,11 +686,11 @@ asmcomp/printmach.cmx: asmcomp/reg.cmx asmcomp/proc.cmx asmcomp/printcmm.cmx \ asmcomp/mach.cmx asmcomp/debuginfo.cmx asmcomp/cmm.cmx asmcomp/arch.cmx \ asmcomp/printmach.cmi asmcomp/proc.cmo: asmcomp/reg.cmi utils/misc.cmi asmcomp/mach.cmi \ - utils/config.cmi asmcomp/cmm.cmi utils/clflags.cmi utils/ccomp.cmi \ - asmcomp/arch.cmo asmcomp/proc.cmi + utils/config.cmi asmcomp/cmm.cmi utils/ccomp.cmi asmcomp/arch.cmo \ + asmcomp/proc.cmi asmcomp/proc.cmx: asmcomp/reg.cmx utils/misc.cmx asmcomp/mach.cmx \ - utils/config.cmx asmcomp/cmm.cmx utils/clflags.cmx utils/ccomp.cmx \ - asmcomp/arch.cmx asmcomp/proc.cmi + utils/config.cmx asmcomp/cmm.cmx utils/ccomp.cmx asmcomp/arch.cmx \ + asmcomp/proc.cmi asmcomp/reg.cmo: asmcomp/cmm.cmi asmcomp/reg.cmi asmcomp/reg.cmx: asmcomp/cmm.cmx asmcomp/reg.cmi asmcomp/reloadgen.cmo: asmcomp/reg.cmi utils/misc.cmi asmcomp/mach.cmi \ @@ -1,3 +1,52 @@ +Objective Caml 3.11.2: +---------------------- + +Bug fixes: +- PR#4151: better documentation for min and max w.r.t. NaN +- PR#4421: ocamlbuild uses wrong compiler for C files +- PR#4710, PR#4720: ocamlbuild does not use properly configuration information +- PR#4750: under some Windows installations, high start-up times for Unix lib +- PR#4777: problem with scanf and CRLF +- PR#4783: ocamlmklib problem under Windows +- PR#4810: BSD problem with socket addresses, e.g. in Unix.getnameinfo +- PR#4813: issue with parsing of float literals by the GNU assembler +- PR#4816: problem with modules and private types +- PR#4818: missed opportunity for type-based optimization of bigarray accesses +- PR#4821: check for duplicate method names in classes +- PR#4823: build problem on Mac OS X +- PR#4836: spurious errors raised by Unix.single_write under Windows +- PR#4841, PR#4860, PR#4930: problem with ocamlopt -output-obj under Mac OS X +- PR#4847: C compiler error with ocamlc -output-obj under Win64 +- PR#4856: ocamlbuild uses ocamlrun to execute a native plugin +- PR#4867, PR#4760: ocamlopt -shared fails on Mac OS X 64bit +- PR#4873: ocamlbuild ignores "thread" tag when building a custom toplevel +- PR#4890: ocamlbuild tries to use native plugin on bytecode-only arch +- PR#4896: ocamlbuild should always pass -I to tools for external libraries +- PR#4900: small bug triggering automatic compaction even if max_overhead = 1M +- PR#4902: bug in %.0F printf format +- PR#4910: problem with format concatenation +- PR#4922: ocamlbuild recompiles too many files +- PR#4923: missing \xff for scanf %S +- PR#4933: functors not handling private types correctly +- PR#4940: problem with end-of-line in DOS text mode, tentative fix +- PR#4953: problem compiling bytecode interpreter on ARM in Thumb mode. +- PR#4955: compiler crash when typing recursive type expression with constraint +- Module Printf: the simple conversion %F (without width indication) was not + treated properly. +- Makefile: problem with cygwin, flexdll, and symbolic links +- Various build problems with ocamlbuild under Windows with msvc + +Feature wishes: +- PR#9: (tentative implementation) make ocamldebug use #linenum annotations +- PR#123, PR#4477: custom exception printers +- PR#3456: Obj.double_field and Obj.set_double_field functions +- PR#4003: destination directory can be given to Filename.[open_]temp_file +- PR#4647: Buffer.blit function +- PR#4685: access to Filename.dir_sep +- PR#4703: support for debugging embedded applications +- PR#4723: "clear_rules" function to empty the set of ocamlbuild rules +- PR#4921: configure option to help cross-compilers + Objective Caml 3.11.1: ---------------------- @@ -53,6 +102,7 @@ Other changes: (contributed by Jonathan Davies, Citrix). - Support for 64-bit mode in Solaris/x86 (PR#4670). + Objective Caml 3.11.0: ---------------------- @@ -200,6 +250,7 @@ Bug fixes: - Small bugs in the make-package-macosx script - Bug in typing of polymorphic variants (reported on caml-list) + Objective Caml 3.10.1: ---------------------- @@ -56,9 +56,9 @@ native-code compiler. From the top directory, do: make opt -5- (Optional) If you want to compile fast versions of the Objective -Caml compilers, you can compile them with the native-code compiler -(they are compiled to bytecode by default). Just do: +5- Compile fast versions of the Objective Caml compilers, by +compiling them with the native-code compiler (you have only compiled +them to bytecode so far). Just do: make opt.opt diff --git a/INSTALL_OCAML b/INSTALL_OCAML index cdb3436fbd..ad24f4afe2 100644 --- a/INSTALL_OCAML +++ b/INSTALL_OCAML @@ -109,7 +109,7 @@ The "configure" script accepts the following options: -as <assembler and options> (default: determined automatically) The assembler to use for assembling ocamlopt-generated code. --aspp <assembler and options> (default: determined automatically> +-aspp <assembler and options> (default: determined automatically) The assembler to use for assembling the parts of the run-time system manually written in assembly language. This assembler must preprocess its input with the C preprocessor. @@ -126,10 +126,13 @@ Examples: Installation in /usr, man pages in section "l": ./configure -bindir /usr/bin -libdir /usr/lib/ocaml -mandir /usr/man/manl - On a MacOSX/Intel Core 2 or MacOSX/PowerPC host, to build a 64-bit version - of OCaml: + On a MacOSX 10.5/Intel Core 2 or MacOSX 10.5/PowerPC host, + to build a 64-bit version of OCaml: ./configure -cc "gcc -m64" + On a MacOSX 10.6/Intel Core 2, to build a 32-bit version of OCaml: + ./configure -cc "gcc -m32" -as "as -arch i386" -aspp "gcc -m32 -c" + On a Linux x86/64 bits host, to build a 32-bit version of OCaml: ./configure -cc "gcc -m32" -as "as --32" -aspp "gcc -m32 -c" @@ -188,9 +191,9 @@ or: make opt > log.opt 2>&1 # in sh make opt >& log.opt # in csh -5- (Optional) If you want to compile fast versions of the Objective -Caml compilers, you can compile them with the native-code compiler -(they are compiled to bytecode by default). Just do: +5- Compile fast versions of the Objective Caml compilers, by +compiling them with the native-code compiler (you have only compiled +them to bytecode so far). Just do: make opt.opt @@ -584,10 +584,11 @@ alldepend:: # The runtime system for the native-code compiler -runtimeopt: +runtimeopt: makeruntimeopt + cp asmrun/libasmrun.a stdlib/libasmrun.a + +makeruntimeopt: cd asmrun; $(MAKE) all - if test -f stdlib/libasmrun.a; then :; else \ - ln -s ../asmrun/libasmrun.a stdlib/libasmrun.a; fi clean:: cd asmrun; $(MAKE) clean @@ -778,6 +779,6 @@ distclean: .PHONY: ocamldoc.opt ocamllex ocamllex.opt ocamltools ocamltools.opt .PHONY: ocamlyacc opt-core opt opt.opt otherlibraries .PHONY: otherlibrariesopt package-macosx promote promote-cross -.PHONY: restore runtime runtimeopt world world.opt +.PHONY: restore runtime runtimeopt makeruntimeopt world world.opt include .depend @@ -1,4 +1,4 @@ -3.11.1 +3.11.2 # The version string is the first line of this file. # It must be in the format described in stdlib/sys.mli @@ -55,6 +55,7 @@ true: use_stdlib <otherlibs/num/nums.cm{,x}a> or <otherlibs/dbm/dbm.cm{,x}a>: ocamlmklib <otherlibs/{,win32}graph/graphics.cm{,x}a>: ocamlmklib <otherlibs/threads/threads.cm{,x}a>: ocamlmklib +"otherlibs/threads/unix.cma": ocamlmklib <otherlibs/bigarray/bigarray.cm{,x}a>: ocamlmklib <otherlibs/{bigarray,systhreads}/**.ml*>: include_unix @@ -70,6 +71,7 @@ true: use_stdlib <otherlibs/bigarray/**>: otherlibs_bigarray <otherlibs/num/**>: otherlibs_num <otherlibs/threads/**>: otherlibs_threads +"otherlibs/threads/unix.cma": -otherlibs_threads <otherlibs/systhreads/**>: otherlibs_systhreads <otherlibs/dbm/**>: otherlibs_dbm <otherlibs/graph/**>: otherlibs_graph diff --git a/asmcomp/alpha/emit.mlp b/asmcomp/alpha/emit.mlp index b3890a4482..3c04b7a47a 100644 --- a/asmcomp/alpha/emit.mlp +++ b/asmcomp/alpha/emit.mlp @@ -793,9 +793,9 @@ let emit_item = function long decimal constants *) ` .quad 0x{emit_string(Nativeint.format "%x" n)}\n` | Csingle f -> - ` .float {emit_string f}\n` + emit_float32_directive ".long" f | Cdouble f -> - ` .double {emit_string f}\n` + emit_float64_directive ".quad" f | Csymbol_address s -> ` .quad {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmcomp/amd64/emit.mlp b/asmcomp/amd64/emit.mlp index e2a53465e5..08745799b0 100644 --- a/asmcomp/amd64/emit.mlp +++ b/asmcomp/amd64/emit.mlp @@ -576,33 +576,26 @@ let emit_instr fallthrough i = end | Lswitch jumptbl -> let lbl = new_label() in - if !pic_code || !Clflags.dlcode then begin - (* PR#4424: r11 is known to be clobbered by the Lswitch, - meaning that no variable that is live across the Lswitch - is assigned to r11. However, the argument to Lswitch - can still be assigned to r11, so we need to special-case - this situation. *) - if i.arg.(0).loc = Reg 9 (* ie r11, cf amd64/proc.ml *) then begin - ` salq $3, %r11\n`; - ` pushq %r11\n`; - ` leaq {emit_label lbl}(%rip), %r11\n`; - ` addq 0(%rsp), %r11\n`; - ` addq $8, %rsp\n`; - ` jmp *(%r11)\n` - end else begin - ` leaq {emit_label lbl}(%rip), %r11\n`; - ` jmp *(%r11, {emit_reg i.arg.(0)}, 8)\n` - end - end else begin - ` jmp *{emit_label lbl}(, {emit_reg i.arg.(0)}, 8)\n` - end; + (* rax and rdx are clobbered by the Lswitch, + meaning that no variable that is live across the Lswitch + is assigned to rax or rdx. However, the argument to Lswitch + can still be assigned to one of these two registers, so + we must be careful not to clobber it before use. *) + let (tmp1, tmp2) = + if i.arg.(0).loc = Reg 0 (* rax *) + then (phys_reg 4 (*rdx*), phys_reg 0 (*rax*)) + else (phys_reg 0 (*rax*), phys_reg 4 (*rdx*)) in + ` leaq {emit_label lbl}(%rip), {emit_reg tmp1}\n`; + ` movslq ({emit_reg tmp1}, {emit_reg i.arg.(0)}, 4), {emit_reg tmp2}\n`; + ` addq {emit_reg tmp2}, {emit_reg tmp1}\n`; + ` jmp *{emit_reg tmp1}\n`; if macosx then ` .const\n` else ` .section .rodata\n`; - emit_align 8; + emit_align 4; `{emit_label lbl}:`; for i = 0 to Array.length jumptbl - 1 do - ` .quad {emit_label jumptbl.(i)}\n` + ` .long {emit_label jumptbl.(i)} - {emit_label lbl}\n` done; ` .text\n` | Lsetuptrap lbl -> @@ -635,7 +628,8 @@ let rec emit_all fallthrough i = (* Emission of the floating-point constants *) let emit_float_constant (lbl, cst) = - `{emit_label lbl}: .double {emit_string cst}\n` + `{emit_label lbl}:`; + emit_float64_directive ".quad" cst (* Emission of the profiling prelude *) @@ -668,7 +662,9 @@ let fundecl fundecl = bound_error_call := 0; ` .text\n`; emit_align 16; - if macosx && is_generic_function fundecl.fun_name + if macosx + && not !Clflags.output_c_object + && is_generic_function fundecl.fun_name then (* PR#4690 *) ` .private_extern {emit_symbol fundecl.fun_name}\n` else @@ -713,9 +709,9 @@ let emit_item = function | Cint n -> ` .quad {emit_nativeint n}\n` | Csingle f -> - ` .float {emit_string f}\n` + emit_float32_directive ".long" f | Cdouble f -> - ` .double {emit_string f}\n` + emit_float64_directive ".quad" f | Csymbol_address s -> ` .quad {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmcomp/amd64/proc.ml b/asmcomp/amd64/proc.ml index da2f886bbc..c0807b88d4 100644 --- a/asmcomp/amd64/proc.ml +++ b/asmcomp/amd64/proc.ml @@ -92,7 +92,6 @@ let phys_reg n = let rax = phys_reg 0 let rcx = phys_reg 5 let rdx = phys_reg 4 -let r11 = phys_reg 9 let rxmm15 = phys_reg 115 let stack_slot slot ty = @@ -170,7 +169,7 @@ let destroyed_at_oper = function | Iop(Istore(Single, _)) -> [| rxmm15 |] | Iop(Ialloc _ | Iintop(Icomp _) | Iintop_imm((Idiv|Imod|Icomp _), _)) -> [| rax |] - | Iswitch(_, _) when !pic_code || !Clflags.dlcode -> [| r11 |] + | Iswitch(_, _) -> [| rax; rdx |] | _ -> [||] let destroyed_at_raise = all_phys_regs diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp index 586d477bd1..e1b0af90a8 100644 --- a/asmcomp/arm/emit.mlp +++ b/asmcomp/arm/emit.mlp @@ -625,6 +625,9 @@ let emit_item = function | Csingle f -> ` .float {emit_string f}\n` | Cdouble f -> + (* FIXME: this version of the ARM port is mixed-endian, so we + use .double instead of emit_float64_directive. The next + version is little-endian, so we'll use emit_float64 then. *) ` .align 0\n`; ` .double {emit_string f}\n` | Csymbol_address s -> diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index f02a9b3306..33b3f0d9cb 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -259,6 +259,7 @@ let link_shared ppf objfiles output_name = (fun (info, file_name, crc) -> check_consistency file_name info crc) units_tolink; Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; + Clflags.ccopts := !lib_ccopts @ !Clflags.ccopts; let objfiles = List.rev (List.map object_file_name objfiles) @ !Clflags.ccobjs in diff --git a/asmcomp/emitaux.ml b/asmcomp/emitaux.ml index e851c8187d..35338eed9b 100644 --- a/asmcomp/emitaux.ml +++ b/asmcomp/emitaux.ml @@ -93,6 +93,27 @@ let emit_bytes_directive directive s = done; if !pos > 0 then emit_char '\n' +(* PR#4813: assemblers do strange things with float literals indeed, + so we convert to IEEE representation ourselves and emit float + literals as 32- or 64-bit integers. *) + +let emit_float64_directive directive f = + let x = Int64.bits_of_float (float_of_string f) in + emit_printf "\t%s\t0x%Lx\n" directive x + +let emit_float64_split_directive directive f = + let x = Int64.bits_of_float (float_of_string f) in + let lo = Int64.logand x 0xFFFF_FFFFL + and hi = Int64.shift_right_logical x 32 in + emit_printf "\t%s\t0x%Lx, 0x%Lx\n" + directive + (if Arch.big_endian then hi else lo) + (if Arch.big_endian then lo else hi) + +let emit_float32_directive directive f = + let x = Int32.bits_of_float (float_of_string f) in + emit_printf "\t%s\t0x%lx\n" directive x + (* Record live pointers at call points *) type frame_descr = diff --git a/asmcomp/emitaux.mli b/asmcomp/emitaux.mli index 112e276a12..4f666be736 100644 --- a/asmcomp/emitaux.mli +++ b/asmcomp/emitaux.mli @@ -25,6 +25,9 @@ val emit_char: char -> unit val emit_string_literal: string -> unit val emit_string_directive: string -> string -> unit val emit_bytes_directive: string -> string -> unit +val emit_float64_directive: string -> string -> unit +val emit_float64_split_directive: string -> string -> unit +val emit_float32_directive: string -> string -> unit type frame_descr = { fd_lbl: int; (* Return address *) diff --git a/asmcomp/hppa/emit.mlp b/asmcomp/hppa/emit.mlp index bc28ccc18c..eaaf5ff0b5 100644 --- a/asmcomp/hppa/emit.mlp +++ b/asmcomp/hppa/emit.mlp @@ -299,7 +299,9 @@ let emit_float_constants () = ` .text\n`; emit_align 8; List.iter - (fun (lbl, cst) -> `{emit_label lbl}: .double {emit_string cst}\n`) + (fun (lbl, cst) -> + `{emit_label lbl}:`; + emit_float64_split_directive ".long" cst) !float_constants; float_constants := [] @@ -972,9 +974,9 @@ let emit_item = function | Cint n -> ` .long {emit_nativeint n}\n` | Csingle f -> - ` .float {emit_string f}\n` + emit_float32_directive ".long" f | Cdouble f -> - ` .double {emit_string f}\n` + emit_float64_split_directive ".long" f | Csymbol_address s -> use_symbol s; ` .long {emit_symbol s}\n` diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp index 89d6a156d7..75881201ea 100644 --- a/asmcomp/i386/emit.mlp +++ b/asmcomp/i386/emit.mlp @@ -815,7 +815,8 @@ let rec emit_all fallthrough i = let emit_float_constant (lbl, cst) = ` .data\n`; - `{emit_label lbl}: .double {emit_string cst}\n` + `{emit_label lbl}:`; + emit_float64_split_directive ".long" cst (* Emission of external symbol references (for MacOSX) *) @@ -888,7 +889,9 @@ let fundecl fundecl = bound_error_call := 0; ` .text\n`; emit_align 16; - if macosx && is_generic_function fundecl.fun_name + if macosx + && not !Clflags.output_c_object + && is_generic_function fundecl.fun_name then (* PR#4690 *) ` .private_extern {emit_symbol fundecl.fun_name}\n` else @@ -928,9 +931,9 @@ let emit_item = function | Cint n -> ` .long {emit_nativeint n}\n` | Csingle f -> - ` .float {emit_string f}\n` + emit_float32_directive ".long" f | Cdouble f -> - ` .double {emit_string f}\n` + emit_float64_split_directive ".long" f | Csymbol_address s -> ` .long {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmcomp/ia64/emit.mlp b/asmcomp/ia64/emit.mlp index e59f711bc5..fb84e9e08c 100644 --- a/asmcomp/ia64/emit.mlp +++ b/asmcomp/ia64/emit.mlp @@ -1287,9 +1287,9 @@ let emit_item = function | Cint n -> ` data8 {emit_nativeint n}\n` | Csingle f -> - ` real4 {emit_string f}\n` + emit_float32_directive "data4" f | Cdouble f -> - ` real8 {emit_string f}\n` + emit_float64_directive "data8" f | Csymbol_address s -> ` data8 {emit_symbol s}#\n` | Clabel_address lbl -> diff --git a/asmcomp/mips/emit.mlp b/asmcomp/mips/emit.mlp index 198f6265d7..6908ccfd48 100644 --- a/asmcomp/mips/emit.mlp +++ b/asmcomp/mips/emit.mlp @@ -527,10 +527,9 @@ let emit_item = function | Cint n -> ` .word {emit_nativeint n}\n` | Csingle f -> - ` .float {emit_string f}\n` + emit_float32_directive ".word" f | Cdouble f -> - ` .align 0\n`; (* Prevent alignment on 8-byte boundary *) - ` .double {emit_string f}\n` + emit_float64_split_directive ".word" f | Csymbol_address s -> ` .word {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp index 4df559f684..df3fa1eaa9 100644 --- a/asmcomp/power/emit.mlp +++ b/asmcomp/power/emit.mlp @@ -835,7 +835,9 @@ let fundecl fundecl = call_gc_label := 0; float_literals := []; int_literals := []; - if Config.system = "rhapsody" && is_generic_function fundecl.fun_name + if Config.system = "rhapsody" + && not !Clflags.output_c_object + && is_generic_function fundecl.fun_name then (* PR#4690 *) ` .private_extern {emit_symbol fundecl.fun_name}\n` else @@ -871,7 +873,10 @@ let fundecl fundecl = ` .align 3\n`; List.iter (fun (f, lbl) -> - `{emit_label lbl}: .double 0d{emit_string f}\n`) + `{emit_label lbl}:`; + if ppc64 + then emit_float64_directive ".quad" f + else emit_float64_split_directive ".long" f) !float_literals; List.iter (fun (n, lbl) -> @@ -902,9 +907,11 @@ let emit_item = function | Cint n -> ` {emit_string datag} {emit_nativeint n}\n` | Csingle f -> - ` .float 0d{emit_string f}\n` + emit_float32_directive ".long" f | Cdouble f -> - ` .double 0d{emit_string f}\n` + if ppc64 + then emit_float64_directive ".quad" f + else emit_float64_split_directive ".long" f | Csymbol_address s -> ` {emit_string datag} {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmcomp/sparc/emit.mlp b/asmcomp/sparc/emit.mlp index 3411ac791a..7fb7a03763 100644 --- a/asmcomp/sparc/emit.mlp +++ b/asmcomp/sparc/emit.mlp @@ -191,7 +191,8 @@ let float_constants = ref ([] : (int * string) list) let emit_float_constant (lbl, cst) = rodata (); ` .align 8\n`; - `{emit_label lbl}: .double 0r{emit_string cst}\n` + `{emit_label lbl}:`; + emit_float64_split_directive ".word" cst (* Emission of the profiling prelude *) let emit_profile () = @@ -701,9 +702,9 @@ let emit_item = function | Cint n -> ` .word {emit_nativeint n}\n` | Csingle f -> - ` .single 0r{emit_string f}\n` + emit_float32_directive ".word" f | Cdouble f -> - ` .double 0r{emit_string f}\n` + emit_float64_split_directive ".word" f | Csymbol_address s -> ` .word {emit_symbol s}\n` | Clabel_address lbl -> diff --git a/asmrun/.depend b/asmrun/.depend index 6b66a0c3a7..dca8ae55a2 100644 --- a/asmrun/.depend +++ b/asmrun/.depend @@ -1,1164 +1,732 @@ alloc.o: alloc.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/custom.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/stacks.h \ ../byterun/memory.h array.o: array.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h backtrace.o: backtrace.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/backtrace.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h + ../byterun/mlvalues.h ../byterun/backtrace.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h callback.o: callback.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/mlvalues.h compact.o: compact.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h compare.o: compare.c ../byterun/custom.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h custom.o: custom.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h dynlink.o: dynlink.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/dynlink.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/mlvalues.h ../byterun/dynlink.h \ + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/osdeps.h \ ../byterun/prims.h extern.o: extern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ ../byterun/mlvalues.h ../byterun/reverse.h fail.o: fail.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/io.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/gc.h ../byterun/memory.h \ ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h stack.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/printexc.h \ + ../byterun/signals.h stack.h ../byterun/roots.h ../byterun/memory.h finalise.o: finalise.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/mlvalues.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/signals.h floats.o: floats.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/reverse.h ../byterun/stacks.h ../byterun/memory.h freelist.o: freelist.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/major_gc.h ../byterun/misc.h ../byterun/mlvalues.h gc_ctrl.o: gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/compact.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/compact.h ../byterun/custom.h \ + ../byterun/finalise.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/stacks.h globroots.o: globroots.c ../byterun/memory.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h + ../byterun/mlvalues.h ../byterun/misc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/globroots.h ../byterun/roots.h hash.o: hash.c ../byterun/mlvalues.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h intern.o: intern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/reverse.h ../byterun/md5.h ints.o: ints.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/custom.h ../byterun/fail.h ../byterun/intext.h \ + ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/int64_native.h io.o: io.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ + ../byterun/sys.h lexing.o: lexing.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/mlvalues.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h main.o: main.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/misc.h ../byterun/sys.h major_gc.o: major_gc.c ../byterun/compact.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/weak.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/finalise.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h md5.o: md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/reverse.h + ../byterun/fail.h ../byterun/md5.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/io.h \ + ../byterun/reverse.h memory.o: memory.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/signals.h meta.o: meta.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fix_code.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/interp.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/intext.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h + ../byterun/config.h ../byterun/fail.h ../byterun/fix_code.h \ + ../byterun/interp.h ../byterun/intext.h ../byterun/io.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h ../byterun/stacks.h ../byterun/memory.h minor_gc.o: minor_gc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/finalise.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/finalise.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/signals.h \ + ../byterun/weak.h misc.o: misc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/memory.h ../byterun/gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h natdynlink.o: natdynlink.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/alloc.h \ - ../byterun/misc.h ../byterun/mlvalues.h natdynlink.h \ - ../byterun/osdeps.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h stack.h ../byterun/callback.h ../byterun/alloc.h \ + natdynlink.h ../byterun/osdeps.h ../byterun/fail.h obj.o: obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/interp.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h + ../byterun/fail.h ../byterun/gc.h ../byterun/interp.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h parsing.o: parsing.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/alloc.h printexc.o: printexc.c ../byterun/backtrace.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/callback.h \ - ../byterun/mlvalues.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/callback.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/printexc.h roots.o: roots.c ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h stack.h -signals.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h ../byterun/sys.h ../byterun/misc.h + ../byterun/../config/s.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/globroots.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h stack.h ../byterun/roots.h signals_asm.o: signals_asm.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h signals_osdep.h stack.h + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/signals_machdep.h \ + signals_osdep.h stack.h +signals.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/callback.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/signals.h ../byterun/signals_machdep.h \ + ../byterun/sys.h startup.o: startup.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/backtrace.h \ - ../byterun/mlvalues.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/misc.h ../byterun/backtrace.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h natdynlink.h + ../byterun/printexc.h ../byterun/sys.h natdynlink.h str.o: str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/misc.h sys.o: sys.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/instruct.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/stacks.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/instruct.h ../byterun/mlvalues.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/sys.h terminfo.o: terminfo.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/fail.h \ + ../byterun/io.h ../byterun/mlvalues.h unix.o: unix.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/osdeps.h weak.o: weak.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h alloc.d.o: alloc.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/custom.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/stacks.h \ ../byterun/memory.h array.d.o: array.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h backtrace.d.o: backtrace.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/backtrace.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h + ../byterun/mlvalues.h ../byterun/backtrace.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h callback.d.o: callback.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/mlvalues.h compact.d.o: compact.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h compare.d.o: compare.c ../byterun/custom.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h custom.d.o: custom.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h dynlink.d.o: dynlink.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/dynlink.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/mlvalues.h ../byterun/dynlink.h \ + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/osdeps.h \ ../byterun/prims.h extern.d.o: extern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ ../byterun/mlvalues.h ../byterun/reverse.h fail.d.o: fail.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/io.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/gc.h ../byterun/memory.h \ ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h stack.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/printexc.h \ + ../byterun/signals.h stack.h ../byterun/roots.h ../byterun/memory.h finalise.d.o: finalise.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/mlvalues.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/signals.h floats.d.o: floats.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/reverse.h ../byterun/stacks.h ../byterun/memory.h freelist.d.o: freelist.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/major_gc.h ../byterun/misc.h ../byterun/mlvalues.h gc_ctrl.d.o: gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/compact.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/compact.h ../byterun/custom.h \ + ../byterun/finalise.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/stacks.h globroots.d.o: globroots.c ../byterun/memory.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h + ../byterun/mlvalues.h ../byterun/misc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/globroots.h ../byterun/roots.h hash.d.o: hash.c ../byterun/mlvalues.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h intern.d.o: intern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/reverse.h ../byterun/md5.h ints.d.o: ints.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/custom.h ../byterun/fail.h ../byterun/intext.h \ + ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/int64_native.h io.d.o: io.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ + ../byterun/sys.h lexing.d.o: lexing.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/mlvalues.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h main.d.o: main.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/misc.h ../byterun/sys.h major_gc.d.o: major_gc.c ../byterun/compact.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/weak.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/finalise.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h md5.d.o: md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/reverse.h + ../byterun/fail.h ../byterun/md5.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/io.h \ + ../byterun/reverse.h memory.d.o: memory.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/signals.h meta.d.o: meta.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fix_code.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/interp.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/intext.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h + ../byterun/config.h ../byterun/fail.h ../byterun/fix_code.h \ + ../byterun/interp.h ../byterun/intext.h ../byterun/io.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h ../byterun/stacks.h ../byterun/memory.h minor_gc.d.o: minor_gc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/finalise.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/finalise.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/signals.h \ + ../byterun/weak.h misc.d.o: misc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/memory.h ../byterun/gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h natdynlink.d.o: natdynlink.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/alloc.h \ - ../byterun/misc.h ../byterun/mlvalues.h natdynlink.h \ - ../byterun/osdeps.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h stack.h ../byterun/callback.h ../byterun/alloc.h \ + natdynlink.h ../byterun/osdeps.h ../byterun/fail.h obj.d.o: obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/interp.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h + ../byterun/fail.h ../byterun/gc.h ../byterun/interp.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h parsing.d.o: parsing.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/alloc.h printexc.d.o: printexc.c ../byterun/backtrace.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/callback.h \ - ../byterun/mlvalues.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/callback.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/printexc.h roots.d.o: roots.c ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h stack.h -signals.d.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h ../byterun/sys.h ../byterun/misc.h + ../byterun/../config/s.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/globroots.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h stack.h ../byterun/roots.h signals_asm.d.o: signals_asm.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h signals_osdep.h stack.h + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/signals_machdep.h \ + signals_osdep.h stack.h +signals.d.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/callback.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/signals.h ../byterun/signals_machdep.h \ + ../byterun/sys.h startup.d.o: startup.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/backtrace.h \ - ../byterun/mlvalues.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/misc.h ../byterun/backtrace.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h natdynlink.h + ../byterun/printexc.h ../byterun/sys.h natdynlink.h str.d.o: str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/misc.h sys.d.o: sys.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/instruct.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/stacks.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/instruct.h ../byterun/mlvalues.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/sys.h terminfo.d.o: terminfo.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/fail.h \ + ../byterun/io.h ../byterun/mlvalues.h unix.d.o: unix.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/osdeps.h weak.d.o: weak.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h alloc.p.o: alloc.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/custom.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/stacks.h \ ../byterun/memory.h array.p.o: array.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h backtrace.p.o: backtrace.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/backtrace.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h + ../byterun/mlvalues.h ../byterun/backtrace.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h callback.p.o: callback.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/mlvalues.h compact.p.o: compact.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h compare.p.o: compare.c ../byterun/custom.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h custom.p.o: custom.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h dynlink.p.o: dynlink.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/dynlink.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/mlvalues.h ../byterun/dynlink.h \ + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/osdeps.h \ ../byterun/prims.h extern.p.o: extern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ ../byterun/mlvalues.h ../byterun/reverse.h fail.p.o: fail.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/io.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/gc.h ../byterun/memory.h \ ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h stack.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/printexc.h \ + ../byterun/signals.h stack.h ../byterun/roots.h ../byterun/memory.h finalise.p.o: finalise.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/fail.h ../byterun/mlvalues.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/signals.h floats.p.o: floats.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/fail.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/reverse.h ../byterun/stacks.h ../byterun/memory.h freelist.p.o: freelist.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/major_gc.h ../byterun/misc.h ../byterun/mlvalues.h gc_ctrl.p.o: gc_ctrl.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/compact.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/stacks.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h + ../byterun/mlvalues.h ../byterun/compact.h ../byterun/custom.h \ + ../byterun/finalise.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/stacks.h globroots.p.o: globroots.c ../byterun/memory.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/roots.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h + ../byterun/mlvalues.h ../byterun/misc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/memory.h \ + ../byterun/globroots.h ../byterun/roots.h hash.p.o: hash.c ../byterun/mlvalues.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h intern.p.o: intern.c ../byterun/alloc.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/custom.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/reverse.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h + ../byterun/mlvalues.h ../byterun/custom.h ../byterun/fail.h \ + ../byterun/gc.h ../byterun/intext.h ../byterun/io.h ../byterun/io.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/reverse.h ../byterun/md5.h ints.p.o: ints.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/custom.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/intext.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/custom.h ../byterun/fail.h ../byterun/intext.h \ + ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/int64_native.h io.p.o: io.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/io.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/signals.h \ + ../byterun/sys.h lexing.p.o: lexing.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/mlvalues.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h main.p.o: main.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/misc.h ../byterun/sys.h major_gc.p.o: major_gc.c ../byterun/compact.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/finalise.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc_ctrl.h ../byterun/misc.h ../byterun/weak.h \ - ../byterun/mlvalues.h + ../byterun/custom.h ../byterun/mlvalues.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/finalise.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/freelist.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/weak.h md5.p.o: md5.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/md5.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/reverse.h + ../byterun/fail.h ../byterun/md5.h ../byterun/io.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h ../byterun/io.h \ + ../byterun/reverse.h memory.p.o: memory.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/mlvalues.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/signals.h meta.p.o: meta.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/fix_code.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/interp.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/intext.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/io.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h \ - ../byterun/stacks.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/memory.h + ../byterun/config.h ../byterun/fail.h ../byterun/fix_code.h \ + ../byterun/interp.h ../byterun/intext.h ../byterun/io.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h ../byterun/stacks.h ../byterun/memory.h minor_gc.p.o: minor_gc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/finalise.h ../byterun/roots.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/weak.h ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/finalise.h \ + ../byterun/roots.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/gc.h ../byterun/gc_ctrl.h ../byterun/major_gc.h \ + ../byterun/memory.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h ../byterun/roots.h ../byterun/signals.h \ + ../byterun/weak.h misc.p.o: misc.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/misc.h ../byterun/config.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/memory.h ../byterun/gc.h ../byterun/mlvalues.h \ + ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h natdynlink.p.o: natdynlink.c ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h stack.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/alloc.h \ - ../byterun/misc.h ../byterun/mlvalues.h natdynlink.h \ - ../byterun/osdeps.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h stack.h ../byterun/callback.h ../byterun/alloc.h \ + natdynlink.h ../byterun/osdeps.h ../byterun/fail.h obj.p.o: obj.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/interp.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/prims.h + ../byterun/fail.h ../byterun/gc.h ../byterun/interp.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/memory.h \ + ../byterun/gc.h ../byterun/major_gc.h ../byterun/minor_gc.h \ + ../byterun/minor_gc.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/prims.h parsing.p.o: parsing.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/alloc.h ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/alloc.h printexc.p.o: printexc.c ../byterun/backtrace.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/callback.h \ - ../byterun/mlvalues.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/misc.h ../byterun/callback.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ + ../byterun/printexc.h roots.p.o: roots.c ../byterun/finalise.h ../byterun/roots.h \ ../byterun/misc.h ../byterun/config.h ../byterun/../config/m.h \ - ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/globroots.h ../byterun/mlvalues.h \ - ../byterun/roots.h stack.h -signals.p.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/callback.h ../byterun/mlvalues.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/memory.h \ - ../byterun/config.h ../byterun/gc.h ../byterun/mlvalues.h \ - ../byterun/major_gc.h ../byterun/freelist.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/misc.h ../byterun/minor_gc.h \ - ../byterun/misc.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/roots.h ../byterun/misc.h ../byterun/memory.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h ../byterun/sys.h ../byterun/misc.h + ../byterun/../config/s.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/minor_gc.h ../byterun/globroots.h ../byterun/memory.h \ + ../byterun/major_gc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/mlvalues.h stack.h ../byterun/roots.h signals_asm.p.o: signals_asm.c ../byterun/fail.h ../byterun/misc.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/mlvalues.h ../byterun/config.h ../byterun/misc.h \ - ../byterun/memory.h ../byterun/config.h ../byterun/gc.h \ - ../byterun/mlvalues.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/misc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/osdeps.h ../byterun/misc.h \ - ../byterun/signals.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/signals_machdep.h signals_osdep.h stack.h + ../byterun/mlvalues.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/signals_machdep.h \ + signals_osdep.h stack.h +signals.p.o: signals.c ../byterun/alloc.h ../byterun/misc.h \ + ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ + ../byterun/mlvalues.h ../byterun/callback.h ../byterun/config.h \ + ../byterun/fail.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/mlvalues.h ../byterun/roots.h \ + ../byterun/memory.h ../byterun/signals.h ../byterun/signals_machdep.h \ + ../byterun/sys.h startup.p.o: startup.c ../byterun/callback.h ../byterun/mlvalues.h \ ../byterun/config.h ../byterun/../config/m.h ../byterun/../config/s.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/backtrace.h \ - ../byterun/mlvalues.h ../byterun/custom.h ../byterun/mlvalues.h \ - ../byterun/fail.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/gc_ctrl.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/major_gc.h ../byterun/freelist.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ + ../byterun/misc.h ../byterun/backtrace.h ../byterun/custom.h \ + ../byterun/fail.h ../byterun/freelist.h ../byterun/gc.h \ + ../byterun/gc_ctrl.h ../byterun/memory.h ../byterun/gc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/printexc.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/sys.h ../byterun/misc.h natdynlink.h + ../byterun/printexc.h ../byterun/sys.h natdynlink.h str.p.o: str.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/mlvalues.h ../byterun/misc.h sys.p.o: sys.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/debugger.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/instruct.h ../byterun/osdeps.h \ - ../byterun/misc.h ../byterun/signals.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/stacks.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/sys.h \ - ../byterun/misc.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/debugger.h \ + ../byterun/fail.h ../byterun/instruct.h ../byterun/mlvalues.h \ + ../byterun/osdeps.h ../byterun/signals.h ../byterun/stacks.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/freelist.h ../byterun/minor_gc.h ../byterun/sys.h terminfo.p.o: terminfo.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/alloc.h ../byterun/misc.h \ - ../byterun/config.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/fail.h ../byterun/misc.h \ - ../byterun/mlvalues.h ../byterun/io.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/config.h ../byterun/mlvalues.h ../byterun/fail.h \ + ../byterun/io.h ../byterun/mlvalues.h unix.p.o: unix.c ../byterun/config.h ../byterun/../config/m.h \ ../byterun/../config/s.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/config.h \ - ../byterun/misc.h ../byterun/config.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/minor_gc.h ../byterun/misc.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/osdeps.h \ - ../byterun/misc.h + ../byterun/gc.h ../byterun/mlvalues.h ../byterun/misc.h \ + ../byterun/major_gc.h ../byterun/freelist.h ../byterun/minor_gc.h \ + ../byterun/misc.h ../byterun/osdeps.h weak.p.o: weak.c ../byterun/alloc.h ../byterun/misc.h ../byterun/config.h \ ../byterun/../config/m.h ../byterun/../config/s.h ../byterun/mlvalues.h \ - ../byterun/config.h ../byterun/misc.h ../byterun/fail.h \ - ../byterun/misc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/freelist.h ../byterun/misc.h ../byterun/mlvalues.h \ - ../byterun/misc.h ../byterun/memory.h ../byterun/config.h \ - ../byterun/gc.h ../byterun/mlvalues.h ../byterun/major_gc.h \ - ../byterun/minor_gc.h ../byterun/misc.h ../byterun/misc.h \ - ../byterun/mlvalues.h + ../byterun/fail.h ../byterun/major_gc.h ../byterun/freelist.h \ + ../byterun/memory.h ../byterun/gc.h ../byterun/major_gc.h \ + ../byterun/minor_gc.h ../byterun/mlvalues.h diff --git a/asmrun/ia64.S b/asmrun/ia64.S index 876526f2fd..025e064a5e 100644 --- a/asmrun/ia64.S +++ b/asmrun/ia64.S @@ -12,7 +12,7 @@ /* $Id$ */ -/* Asm part of the runtime system, Alpha processor */ +/* Asm part of the runtime system, IA64 processor */ #undef BROKEN_POSTINCREMENT @@ -68,15 +68,8 @@ caml_allocN: sub r4 = r4, r2 ;; cmp.ltu p0, p6 = r4, r5 (p6) br.ret.sptk b0 ;; - /* Stash return address at sp (in stack scratch area) */ - mov r3 = b0 ;; - st8 [sp] = r3 - /* Call GC */ - br.call.sptk b0 = caml_call_gc# ;; - /* Return to caller */ - ld8 r3 = [sp] ;; - mov b0 = r3 ;; - br.ret.sptk b0 + /* Fall through caml_call_gc */ + br.sptk.many caml_call_gc# .endp caml_allocN# diff --git a/boot/.cvsignore b/boot/.cvsignore index a0a2356c9a..5eeaef32ea 100644 --- a/boot/.cvsignore +++ b/boot/.cvsignore @@ -4,3 +4,4 @@ ocamlyacc camlheader myocamlbuild myocamlbuild.native +libcamlrun.a diff --git a/boot/ocamlc b/boot/ocamlc Binary files differindex af762efa3b..4098c9aab8 100755 --- a/boot/ocamlc +++ b/boot/ocamlc diff --git a/boot/ocamldep b/boot/ocamldep Binary files differindex 4d1adaa9f5..d052f48e9a 100755 --- a/boot/ocamldep +++ b/boot/ocamldep diff --git a/boot/ocamllex b/boot/ocamllex Binary files differindex 8eb679b5df..e5d359b19b 100755 --- a/boot/ocamllex +++ b/boot/ocamllex diff --git a/build/boot-c-parts-windows.sh b/build/boot-c-parts-windows.sh index 45193d338e..3e2ca3dc8e 100755 --- a/build/boot-c-parts-windows.sh +++ b/build/boot-c-parts-windows.sh @@ -13,7 +13,6 @@ set -ex mkdir -p _build/boot cp -f byterun/ocamlrun.exe \ byterun/libcamlrun.$A \ - byterun/ocamlrun.dll \ asmrun/libasmrun.$A \ yacc/ocamlyacc.exe \ boot/ocamlc \ @@ -21,5 +20,4 @@ cp -f byterun/ocamlrun.exe \ boot/ocamldep \ _build/boot mkdir -p _build/byterun -cp -f byterun/ocamlrun.exe byterun/ocamlrun.dll boot -cp -f byterun/ocamlrun.$A _build/byterun +cp -f byterun/ocamlrun.exe boot diff --git a/build/install.sh b/build/install.sh index 4c38740c53..2197069c5b 100755 --- a/build/install.sh +++ b/build/install.sh @@ -132,7 +132,6 @@ cd .. WIN32="" if [ "x$EXE" = "x.exe" ]; then installbin win32caml/ocamlwin.exe $PREFIX/OCamlWin.exe - installdir byterun/ocamlrun.dll $BINDIR WIN32=win32 fi @@ -140,7 +139,7 @@ installdir otherlibs/"$WIN32"unix/unixsupport.h \ otherlibs/bigarray/bigarray.h \ $LIBDIR/caml -installdir yacc/ocamlyacc byterun/ocamlrun $BINDIR +installdir yacc/ocamlyacc$EXE byterun/ocamlrun$EXE $BINDIR installdir config/Makefile $LIBDIR/Makefile.config installdir byterun/ld.conf $LIBDIR diff --git a/build/mkmyocamlbuild_config.sh b/build/mkmyocamlbuild_config.sh index e48f5b0e0b..9c7eebd3c3 100755 --- a/build/mkmyocamlbuild_config.sh +++ b/build/mkmyocamlbuild_config.sh @@ -19,6 +19,7 @@ cd `dirname $0`/.. sed \ -e 's/^.*FLEXDIR.*$//g' \ -e 's/^#ml \(.*\)/\1/' \ + -e 's/^\([^"][^"]*\("[^"]*"[^"]*\)*\)#.*$/\1/' \ -e 's/^\(#.*\)$/(* \1 *)/' \ -e 's/^\(.*\$([0-9]).*\)$/(* \1 *)/' \ -e 's/^\([^(=]*\)=\([^"]*\)$/let <:lower<\1>> = "\2";;/' \ diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml index 97df99b17f..566626b7ca 100644 --- a/bytecomp/bytelink.ml +++ b/bytecomp/bytelink.ml @@ -377,24 +377,53 @@ let output_data_string outchan data = end done +(* Output a debug stub *) + +let output_cds_file outfile = + Misc.remove_file outfile; + let outchan = + open_out_gen [Open_wronly; Open_trunc; Open_creat; Open_binary] + 0o777 outfile in + try + Bytesections.init_record outchan; + (* The map of global identifiers *) + Symtable.output_global_map outchan; + Bytesections.record outchan "SYMB"; + (* Debug info *) + output_debug_info outchan; + Bytesections.record outchan "DBUG"; + (* The table of contents and the trailer *) + Bytesections.write_toc_and_trailer outchan; + close_out outchan + with x -> + close_out outchan; + remove_file outfile; + raise x + (* Output a bytecode executable as a C file *) let link_bytecode_as_c tolink outfile = let outchan = open_out outfile in - try + begin try (* The bytecode *) - output_string outchan "#include <caml/mlvalues.h>\n"; output_string outchan "\ -CAMLextern void caml_startup_code( - code_t code, asize_t code_size, - char *data, asize_t data_size, - char *section_table, asize_t section_table_size, +#ifdef __cplusplus\n\ +extern \"C\" {\n\ +#endif\n\ +#include <caml/mlvalues.h>\n\ +CAMLextern void caml_startup_code(\n\ + code_t code, asize_t code_size,\n\ + char *data, asize_t data_size,\n\ + char *section_table, asize_t section_table_size,\n\ char **argv);\n"; output_string outchan "static int caml_code[] = {\n"; Symtable.init(); Consistbl.clear crc_interfaces; - let output_fun = output_code_string outchan - and currpos_fun () = 0 in + let currpos = ref 0 in + let output_fun code = + output_code_string outchan code; + currpos := !currpos + String.length code + and currpos_fun () = !currpos in List.iter (link_file output_fun currpos_fun) tolink; (* The final STOP instruction *) Printf.fprintf outchan "\n0x%x};\n\n" Opcodes.opSTOP; @@ -415,25 +444,31 @@ CAMLextern void caml_startup_code( (* The table of primitives *) Symtable.output_primitive_table outchan; (* The entry point *) - output_string outchan "\n -void caml_startup(char ** argv) -{ - caml_startup_code(caml_code, sizeof(caml_code), - caml_data, sizeof(caml_data), - caml_sections, sizeof(caml_sections), - argv); -}\n"; + output_string outchan "\n\ +void caml_startup(char ** argv)\n\ +{\n\ + caml_startup_code(caml_code, sizeof(caml_code),\n\ + caml_data, sizeof(caml_data),\n\ + caml_sections, sizeof(caml_sections),\n\ + argv);\n\ +}\n\ +#ifdef __cplusplus\n\ +}\n\ +#endif\n"; close_out outchan with x -> close_out outchan; raise x + end; + if !Clflags.debug then + output_cds_file ((Filename.chop_extension outfile) ^ ".cds") (* Build a custom runtime *) let build_custom_runtime prim_name exec_name = - Ccomp.call_linker Ccomp.Exe exec_name + Ccomp.call_linker Ccomp.Exe exec_name ([prim_name] @ List.rev !Clflags.ccobjs @ ["-lcamlrun"]) - Config.bytecomp_c_libraries + (Clflags.std_include_flag "-I" ^ " " ^ Config.bytecomp_c_libraries) let append_bytecode_and_cleanup bytecode_name exec_name prim_name = let oc = open_out_gen [Open_wronly; Open_append; Open_binary] 0 exec_name in @@ -475,7 +510,20 @@ let link objfiles output_name = try link_bytecode tolink bytecode_name false; let poc = open_out prim_name in + output_string poc "\ + #ifdef __cplusplus\n\ + extern \"C\" {\n\ + #endif\n\ + #ifdef _WIN64\n\ + typedef __int64 value;\n\ + #else\n\ + typedef long value;\n\ + #endif\n"; Symtable.output_primitive_table poc; + output_string poc "\ + #ifdef __cplusplus\n\ + }\n\ + #endif\n"; close_out poc; let exec_name = fix_exec_name output_name in if not (build_custom_runtime prim_name exec_name) diff --git a/bytecomp/symtable.ml b/bytecomp/symtable.ml index 1538451634..bad39a2135 100644 --- a/bytecomp/symtable.ml +++ b/bytecomp/symtable.ml @@ -114,14 +114,10 @@ open Printf let output_primitive_table outchan = let prim = all_primitives() in - fprintf outchan "\ - #ifdef __cplusplus\n\ - extern \"C\" {\n\ - #endif\n"; for i = 0 to Array.length prim - 1 do - fprintf outchan "extern long %s();\n" prim.(i) + fprintf outchan "extern value %s();\n" prim.(i) done; - fprintf outchan "typedef long (*primitive)();\n"; + fprintf outchan "typedef value (*primitive)();\n"; fprintf outchan "primitive caml_builtin_cprim[] = {\n"; for i = 0 to Array.length prim - 1 do fprintf outchan " %s,\n" prim.(i) @@ -131,11 +127,7 @@ let output_primitive_table outchan = for i = 0 to Array.length prim - 1 do fprintf outchan " \"%s\",\n" prim.(i) done; - fprintf outchan " (char *) 0 };\n"; - fprintf outchan "\ - #ifdef __cplusplus\n\ - }\n\ - #endif\n" + fprintf outchan " (char *) 0 };\n" (* Initialization for batch linking *) diff --git a/bytecomp/typeopt.ml b/bytecomp/typeopt.ml index 8a49ea16ba..e1c6a86a3b 100644 --- a/bytecomp/typeopt.ml +++ b/bytecomp/typeopt.ml @@ -22,18 +22,17 @@ open Types open Typedtree open Lambda +let scrape env ty = + (Ctype.repr (Ctype.expand_head_opt env (Ctype.correct_levels ty))).desc + let has_base_type exp base_ty_path = - let exp_ty = - Ctype.expand_head_opt exp.exp_env (Ctype.correct_levels exp.exp_type) in - match Ctype.repr exp_ty with - {desc = Tconstr(p, _, _)} -> Path.same p base_ty_path + match scrape exp.exp_env exp.exp_type with + | Tconstr(p, _, _) -> Path.same p base_ty_path | _ -> false let maybe_pointer exp = - let exp_ty = - Ctype.expand_head_opt exp.exp_env (Ctype.correct_levels exp.exp_type) in - match (Ctype.repr exp_ty).desc with - Tconstr(p, args, abbrev) -> + match scrape exp.exp_env exp.exp_type with + | Tconstr(p, args, abbrev) -> not (Path.same p Predef.path_int) && not (Path.same p Predef.path_char) && begin try @@ -50,9 +49,8 @@ let maybe_pointer exp = | _ -> true let array_element_kind env ty = - let ty = Ctype.repr (Ctype.expand_head_opt env ty) in - match ty.desc with - Tvar | Tunivar -> + match scrape env ty with + | Tvar | Tunivar -> Pgenarray | Tconstr(p, args, abbrev) -> if Path.same p Predef.path_int || Path.same p Predef.path_char then @@ -85,9 +83,8 @@ let array_element_kind env ty = Paddrarray let array_kind_gen ty env = - let array_ty = Ctype.expand_head_opt env (Ctype.correct_levels ty) in - match (Ctype.repr array_ty).desc with - Tconstr(p, [elt_ty], _) | Tpoly({desc = Tconstr(p, [elt_ty], _)}, _) + match scrape env ty with + | Tconstr(p, [elt_ty], _) | Tpoly({desc = Tconstr(p, [elt_ty], _)}, _) when Path.same p Predef.path_array -> array_element_kind env elt_ty | _ -> @@ -98,9 +95,9 @@ let array_kind exp = array_kind_gen exp.exp_type exp.exp_env let array_pattern_kind pat = array_kind_gen pat.pat_type pat.pat_env -let bigarray_decode_type ty tbl dfl = - match (Ctype.repr ty).desc with - Tconstr(Pdot(Pident mod_id, type_name, _), [], _) +let bigarray_decode_type env ty tbl dfl = + match scrape env ty with + | Tconstr(Pdot(Pident mod_id, type_name, _), [], _) when Ident.name mod_id = "Bigarray" -> begin try List.assoc type_name tbl with Not_found -> dfl end | _ -> @@ -125,11 +122,10 @@ let layout_table = "fortran_layout", Pbigarray_fortran_layout] let bigarray_kind_and_layout exp = - let ty = Ctype.repr (Ctype.expand_head_opt exp.exp_env exp.exp_type) in - match ty.desc with - Tconstr(p, [caml_type; elt_type; layout_type], abbrev) -> - (bigarray_decode_type elt_type kind_table Pbigarray_unknown, - bigarray_decode_type layout_type layout_table Pbigarray_unknown_layout) + match scrape exp.exp_env exp.exp_type with + | Tconstr(p, [caml_type; elt_type; layout_type], abbrev) -> + (bigarray_decode_type exp.exp_env elt_type kind_table Pbigarray_unknown, + bigarray_decode_type exp.exp_env layout_type layout_table Pbigarray_unknown_layout) | _ -> (Pbigarray_unknown, Pbigarray_unknown_layout) diff --git a/byterun/.cvsignore b/byterun/.cvsignore index 9020f408e2..b4714b0506 100644 --- a/byterun/.cvsignore +++ b/byterun/.cvsignore @@ -15,3 +15,5 @@ interp.a.lst *.[sd]obj *.lib .gdb_history +*.so +*.a diff --git a/byterun/.depend b/byterun/.depend index b92cc6de2a..4ff7c0c693 100644 --- a/byterun/.depend +++ b/byterun/.depend @@ -105,13 +105,13 @@ printexc.o: printexc.c backtrace.h mlvalues.h compatibility.h config.h \ roots.o: roots.c finalise.h roots.h misc.h compatibility.h config.h \ ../config/m.h ../config/s.h memory.h gc.h mlvalues.h major_gc.h \ freelist.h minor_gc.h globroots.h stacks.h +signals_byt.o: signals_byt.c config.h ../config/m.h ../config/s.h \ + compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ + minor_gc.h osdeps.h signals.h signals_machdep.h signals.o: signals.c alloc.h compatibility.h misc.h config.h \ ../config/m.h ../config/s.h mlvalues.h callback.h fail.h memory.h gc.h \ major_gc.h freelist.h minor_gc.h roots.h signals.h signals_machdep.h \ sys.h -signals_byt.o: signals_byt.c config.h ../config/m.h ../config/s.h \ - compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ - minor_gc.h osdeps.h signals.h signals_machdep.h stacks.o: stacks.c config.h ../config/m.h ../config/s.h compatibility.h \ fail.h misc.h mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h \ minor_gc.h @@ -243,13 +243,13 @@ printexc.d.o: printexc.c backtrace.h mlvalues.h compatibility.h config.h \ roots.d.o: roots.c finalise.h roots.h misc.h compatibility.h config.h \ ../config/m.h ../config/s.h memory.h gc.h mlvalues.h major_gc.h \ freelist.h minor_gc.h globroots.h stacks.h +signals_byt.d.o: signals_byt.c config.h ../config/m.h ../config/s.h \ + compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ + minor_gc.h osdeps.h signals.h signals_machdep.h signals.d.o: signals.c alloc.h compatibility.h misc.h config.h \ ../config/m.h ../config/s.h mlvalues.h callback.h fail.h memory.h gc.h \ major_gc.h freelist.h minor_gc.h roots.h signals.h signals_machdep.h \ sys.h -signals_byt.d.o: signals_byt.c config.h ../config/m.h ../config/s.h \ - compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ - minor_gc.h osdeps.h signals.h signals_machdep.h stacks.d.o: stacks.c config.h ../config/m.h ../config/s.h compatibility.h \ fail.h misc.h mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h \ minor_gc.h @@ -379,13 +379,13 @@ printexc.pic.o: printexc.c backtrace.h mlvalues.h compatibility.h config.h \ roots.pic.o: roots.c finalise.h roots.h misc.h compatibility.h config.h \ ../config/m.h ../config/s.h memory.h gc.h mlvalues.h major_gc.h \ freelist.h minor_gc.h globroots.h stacks.h +signals_byt.pic.o: signals_byt.c config.h ../config/m.h ../config/s.h \ + compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ + minor_gc.h osdeps.h signals.h signals_machdep.h signals.pic.o: signals.c alloc.h compatibility.h misc.h config.h \ ../config/m.h ../config/s.h mlvalues.h callback.h fail.h memory.h gc.h \ major_gc.h freelist.h minor_gc.h roots.h signals.h signals_machdep.h \ sys.h -signals_byt.pic.o: signals_byt.c config.h ../config/m.h ../config/s.h \ - compatibility.h memory.h gc.h mlvalues.h misc.h major_gc.h freelist.h \ - minor_gc.h osdeps.h signals.h signals_machdep.h stacks.pic.o: stacks.c config.h ../config/m.h ../config/s.h compatibility.h \ fail.h misc.h mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h \ minor_gc.h diff --git a/byterun/backtrace.c b/byterun/backtrace.c index 2e645ab512..1afce8ae2a 100644 --- a/byterun/backtrace.c +++ b/byterun/backtrace.c @@ -39,6 +39,7 @@ CAMLexport int caml_backtrace_active = 0; CAMLexport int caml_backtrace_pos = 0; CAMLexport code_t * caml_backtrace_buffer = NULL; CAMLexport value caml_backtrace_last_exn = Val_unit; +CAMLexport char * caml_cds_file = NULL; #define BACKTRACE_BUFFER_SIZE 1024 /* Location of fields in the Instruct.debug_event record */ @@ -135,7 +136,11 @@ static value read_debug_info(void) uint32 num_events, orig, i; value evl, l; - exec_name = caml_exe_name; + if (caml_cds_file != NULL) { + exec_name = caml_cds_file; + } else { + exec_name = caml_exe_name; + } fd = caml_attempt_open(&exec_name, &trail, 1); if (fd < 0) CAMLreturn(Val_false); caml_read_section_descriptors(fd, &trail); diff --git a/byterun/backtrace.h b/byterun/backtrace.h index c2a21c2088..2d9c202eaa 100644 --- a/byterun/backtrace.h +++ b/byterun/backtrace.h @@ -22,6 +22,7 @@ CAMLextern int caml_backtrace_active; CAMLextern int caml_backtrace_pos; CAMLextern code_t * caml_backtrace_buffer; CAMLextern value caml_backtrace_last_exn; +CAMLextern char * caml_cds_file; CAMLprim value caml_record_backtrace(value vflag); #ifndef NATIVE_CODE diff --git a/byterun/gc_ctrl.c b/byterun/gc_ctrl.c index ec9c82ab12..0083f36734 100644 --- a/byterun/gc_ctrl.c +++ b/byterun/gc_ctrl.c @@ -41,7 +41,7 @@ intnat caml_stat_minor_collections = 0, caml_stat_compactions = 0, caml_stat_heap_chunks = 0; -extern asize_t caml_major_heap_increment; /* bytes; see major_gc.c */ +extern uintnat caml_major_heap_increment; /* bytes; see major_gc.c */ extern uintnat caml_percent_free; /* see major_gc.c */ extern uintnat caml_percent_max; /* see compact.c */ extern uintnat caml_allocation_policy; /* see freelist.c */ @@ -419,7 +419,7 @@ static void test_and_compact (void) fp = 100.0 * caml_fl_cur_size / (Wsize_bsize (caml_stat_heap_size) - caml_fl_cur_size); - if (fp > 1000000.0) fp = 1000000.0; + if (fp > 999999.0) fp = 999999.0; caml_gc_message (0x200, "Estimated overhead (lower bound) = %" ARCH_INTNAT_PRINTF_FORMAT "u%%\n", (uintnat) fp); diff --git a/byterun/interp.c b/byterun/interp.c index bbd8367e8a..a162a1327d 100644 --- a/byterun/interp.c +++ b/byterun/interp.c @@ -157,7 +157,8 @@ sp is a local copy of the global variable caml_extern_sp. */ #define SP_REG asm("a4") #define ACCU_REG asm("d7") #endif -#ifdef __arm__ +/* PR#4953: these specific registers not available in Thumb mode */ +#if defined (__arm__) && !defined(__thumb__) #define PC_REG asm("r9") #define SP_REG asm("r8") #define ACCU_REG asm("r7") diff --git a/byterun/major_gc.c b/byterun/major_gc.c index 1298498f48..b9ec8cbfe0 100644 --- a/byterun/major_gc.c +++ b/byterun/major_gc.c @@ -30,7 +30,7 @@ #include "weak.h" uintnat caml_percent_free; -intnat caml_major_heap_increment; +uintnat caml_major_heap_increment; CAMLexport char *caml_heap_start; char *caml_gc_sweep_hp; int caml_gc_phase; /* always Phase_mark, Phase_sweep, or Phase_idle */ diff --git a/byterun/obj.c b/byterun/obj.c index ded8416b1e..5e15c47dae 100644 --- a/byterun/obj.c +++ b/byterun/obj.c @@ -165,6 +165,10 @@ CAMLprim value caml_obj_truncate (value v, value newsize) return Val_unit; } +CAMLprim value caml_obj_add_offset (value v, value offset) +{ + return v + Int32_val (offset); +} /* The following functions are used in stdlib/lazy.ml. They are not written in O'Caml because they must be atomic with respect diff --git a/byterun/startup.c b/byterun/startup.c index 34d6f315c9..419d49be60 100644 --- a/byterun/startup.c +++ b/byterun/startup.c @@ -439,12 +439,18 @@ CAMLexport void caml_startup_code( char **argv) { value res; + char* cds_file; caml_init_ieee_floats(); caml_init_custom_operations(); #ifdef DEBUG caml_verb_gc = 63; #endif + cds_file = getenv("CAML_DEBUG_FILE"); + if (cds_file != NULL) { + caml_cds_file = caml_stat_alloc(strlen(cds_file) + 1); + strcpy(caml_cds_file, cds_file); + } parse_camlrunparam(); caml_external_raise = NULL; /* Initialize the abstract machine */ @@ -454,8 +460,17 @@ CAMLexport void caml_startup_code( init_atoms(); /* Initialize the interpreter */ caml_interprete(NULL, 0); + /* Initialize the debugger, if needed */ + caml_debugger_init(); /* Load the code */ caml_start_code = code; + caml_code_size = code_size; + if (caml_debugger_in_use) { + int len, i; + len = code_size / sizeof(opcode_t); + caml_saved_code = (unsigned char *) caml_stat_alloc(len); + for (i = 0; i < len; i++) caml_saved_code[i] = caml_start_code[i]; + } #ifdef THREADED_CODE caml_thread_code(caml_start_code, code_size); #endif @@ -469,10 +484,19 @@ CAMLexport void caml_startup_code( /* Record the sections (for caml_get_section_table in meta.c) */ caml_section_table = section_table; caml_section_table_size = section_table_size; - /* Run the code */ + /* Initialize system libraries */ caml_init_exceptions(); caml_sys_init("", argv); - res = caml_interprete(caml_start_code, code_size); - if (Is_exception_result(res)) - caml_fatal_uncaught_exception(Extract_exception(res)); + /* Execute the program */ + caml_debugger(PROGRAM_START); + res = caml_interprete(caml_start_code, caml_code_size); + if (Is_exception_result(res)) { + caml_exn_bucket = Extract_exception(res); + if (caml_debugger_in_use) { + caml_extern_sp = &caml_exn_bucket; /* The debugger needs the + exception value.*/ + caml_debugger(UNCAUGHT_EXC); + } + caml_fatal_uncaught_exception(caml_exn_bucket); + } } diff --git a/config/Makefile-templ b/config/Makefile-templ index c77c585681..30170423b9 100644 --- a/config/Makefile-templ +++ b/config/Makefile-templ @@ -78,10 +78,14 @@ SHARPBANGSCRIPTS=true # Under FreeBSD: #CPP=cpp -P +### Magic declarations for ocamlbuild -- leave unchanged +#ml let syslib x = "-l"^x;; +#ml let mklib out files opts = Printf.sprintf "ar rc %s %s %s; ranlib %s" out opts files out;; + ### How to invoke ranlib -# BSD-style: -#RANLIB=ranlib -#RANLIBCMD=ranlib +RANLIB=ranlib +RANLIBCMD=ranlib + # If ranlib is not needed: #RANLIB=ar rs #RANLIBCMD= diff --git a/config/Makefile.mingw b/config/Makefile.mingw index 3e755f99a6..f72c2eaa99 100644 --- a/config/Makefile.mingw +++ b/config/Makefile.mingw @@ -145,11 +145,11 @@ BNG_ARCH=ia32 BNG_ASM_LEVEL=1 ### Configuration for LablTk -# Set TK_ROOT to the directory where you installed TCL/TK 8.4 +# Set TK_ROOT to the directory where you installed TCL/TK 8.5 # There must be no spaces or special characters in $(TK_ROOT) TK_ROOT=c:/tcl TK_DEFS=-I$(TK_ROOT)/include -TK_LINK=$(TK_ROOT)/bin/tk84.dll $(TK_ROOT)/bin/tcl84.dll -lws2_32 +TK_LINK=$(TK_ROOT)/bin/tk85.dll $(TK_ROOT)/bin/tcl85.dll -lws2_32 ############# Aliases for common commands diff --git a/config/Makefile.msvc b/config/Makefile.msvc index c9a42b6212..351503001a 100644 --- a/config/Makefile.msvc +++ b/config/Makefile.msvc @@ -80,7 +80,7 @@ BYTECC=cl /nologo -D_CRT_SECURE_NO_DEPRECATE BYTECCCOMPOPTS=/Ox /MD ### Additional link-time options for $(BYTECC). (For static linking.) -BYTECCLINKOPTS=/MD /F16777216 +BYTECCLINKOPTS= ### Additional compile-time options for $(BYTECC). (For building a DLL.) DLLCCCOMPOPTS=/Ox /MD @@ -131,7 +131,7 @@ NATIVECC=cl /nologo -D_CRT_SECURE_NO_DEPRECATE NATIVECCCOMPOPTS=/Ox /MD ### Additional link-time options for $(NATIVECC) -NATIVECCLINKOPTS=/MD /F16777216 +NATIVECCLINKOPTS= ### Build partially-linked object file PACKLD=link /lib /nologo /out:# there must be no space after this '/out:' @@ -145,17 +145,17 @@ BNG_ARCH=generic BNG_ASM_LEVEL=0 ### Configuration for LablTk -# Set TK_ROOT to the directory where you installed TCL/TK 8.3 +# Set TK_ROOT to the directory where you installed TCL/TK 8.5 TK_ROOT=c:/tcl TK_DEFS=-I$(TK_ROOT)/include # The following definition avoids hard-wiring $(TK_ROOT) in the libraries # produced by OCaml, and is therefore required for binary distribution # of these libraries. However, $(TK_ROOT)/lib must be added to the LIB # environment variable, as described in README.win32. -TK_LINK=tk84.lib tcl84.lib ws2_32.lib +TK_LINK=tk85.lib tcl85.lib ws2_32.lib # An alternative definition that avoids mucking with the LIB variable, # but hard-wires the Tcl/Tk location in the binaries -# TK_LINK=$(TK_ROOT)/tk84.lib $(TK_ROOT)/tcl84.lib ws2_32.lib +# TK_LINK=$(TK_ROOT)/tk85.lib $(TK_ROOT)/tcl85.lib ws2_32.lib ############# Aliases for common commands diff --git a/config/Makefile.msvc64 b/config/Makefile.msvc64 index a067fd0653..a9f2309b6c 100644 --- a/config/Makefile.msvc64 +++ b/config/Makefile.msvc64 @@ -83,7 +83,7 @@ BYTECCCOMPOPTS=/Ox /MD BYTECCDBGCOMPOPTS=-DDEBUG /Zi /W3 /Wp64 ### Additional link-time options for $(BYTECC). (For static linking.) -BYTECCLINKOPTS=/MD /F33554432 +BYTECCLINKOPTS= ### Additional compile-time options for $(BYTECC). (For building a DLL.) DLLCCCOMPOPTS=/Ox /MD @@ -135,7 +135,7 @@ NATIVECC=cl /nologo NATIVECCCOMPOPTS=/Ox /MD ### Additional link-time options for $(NATIVECC) -NATIVECCLINKOPTS=/MD /F33554432 +NATIVECCLINKOPTS= ### Build partially-linked object file PACKLD=link /lib /nologo /machine:AMD64 /out:# there must be no space after this '/out:' @@ -337,14 +337,16 @@ case "$bytecc,$host" in gcc*,*-*-cygwin*) bytecccompopts="-fno-defer-pop $gcc_warnings -U_WIN32" dllccompopts="-D_WIN32 -DCAML_DLL" - flexlink="flexlink -chain cygwin -merge-manifest" - flexdir=`$flexlink -where | dos2unix` - if test -z "$flexdir"; then - echo "flexlink not found: native shared libraries won't be available" - withsharedlibs=no - else - iflexdir="-I\"$flexdir\"" - mkexe="$flexlink -exe" + if test $withsharedlibs = yes; then + flexlink="flexlink -chain cygwin -merge-manifest" + flexdir=`$flexlink -where | dos2unix` + if test -z "$flexdir"; then + echo "flexlink not found: native shared libraries won't be available" + withsharedlibs=no + else + iflexdir="-I\"$flexdir\"" + mkexe="$flexlink -exe" + fi fi exe=".exe" ostype="Cygwin";; diff --git a/emacs/caml-types.el b/emacs/caml-types.el index 44f09a031e..05b1a2c0a6 100644 --- a/emacs/caml-types.el +++ b/emacs/caml-types.el @@ -256,9 +256,9 @@ See `caml-types-location-re' for annotation file format. (let* ((loc-re (concat caml-types-position-re " " caml-types-position-re)) (end-re (concat caml-types-position-re " --")) - (def-re (concat "def \\([^ ]\\)* " loc-re)) - (def-end-re (concat "def \\([^ ]\\)* " end-re)) - (internal-re (concat "int_ref \\([^ ]\\)* " loc-re)) + (def-re (concat "def \\([^ ]*\\) " loc-re)) + (def-end-re (concat "def \\([^ ]*\\) " end-re)) + (internal-re (concat "int_ref \\([^ ]*\\) " loc-re)) (external-re "ext_ref \\(.*\\)")) (cond ((string-match def-re kind) @@ -359,7 +359,7 @@ See `caml-types-location-re' for annotation file format. (expand-file-name "_build" project-dir))))) (if (equal project-dir (parent-dir project-dir)) (error (concat "No annotation file. " - "You should compile with option \"-dtypes\"."))) + "You should compile with option \"-annot\"."))) (setq project-dir (parent-dir project-dir))) type-path)))) diff --git a/lex/Makefile b/lex/Makefile index ac68f5539a..1a81ecdd90 100644 --- a/lex/Makefile +++ b/lex/Makefile @@ -19,8 +19,8 @@ CAMLOPT=../boot/ocamlrun ../ocamlopt -nostdlib -I ../stdlib $(NOJOIN) COMPFLAGS=-warn-error A CAMLYACC=../boot/ocamlyacc YACCFLAGS=-v -CAMLLEX=../boot/ocamlrun ../boot/ocamllex -CAMLDEP=../boot/ocamlrun ../tools/ocamldep +CAMLLEX=../boot/ocamlrun ../boot/ocamllex $(NOJOIN) +CAMLDEP=../boot/ocamlrun ../tools/ocamldep $(NOJOIN) OBJS=cset.cmo syntax.cmo parser.cmo lexer.cmo table.cmo lexgen.cmo compact.cmo common.cmo output.cmo outputbis.cmo main.cmo diff --git a/lex/Makefile.nt b/lex/Makefile.nt index ab2a42a109..cb1ef94a5d 100644 --- a/lex/Makefile.nt +++ b/lex/Makefile.nt @@ -14,6 +14,8 @@ # The lexer generator +include ../config/Makefile + CAMLC=../boot/ocamlrun ../boot/ocamlc -I ../boot CAMLOPT=../boot/ocamlrun ../ocamlopt -I ../stdlib COMPFLAGS=-warn-error A diff --git a/ocamldoc/.cvsignore b/ocamldoc/.cvsignore index 720ee641a5..0372a09821 100644 --- a/ocamldoc/.cvsignore +++ b/ocamldoc/.cvsignore @@ -14,3 +14,4 @@ stdlib_man test_stdlib test_latex test +*.a diff --git a/ocamldoc/odoc.ml b/ocamldoc/odoc.ml index dbc7a7d007..b24f325826 100644 --- a/ocamldoc/odoc.ml +++ b/ocamldoc/odoc.ml @@ -81,11 +81,11 @@ let _ = prerr_endline (Odoc_messages.load_file_error file "Not_found"); exit 1 | Sys_error s - | Failure s -> + | Failure s -> prerr_endline (Odoc_messages.load_file_error file s); exit 1 -let _ = print_DEBUG "Fin du chargement dynamique éventuel" +let _ = print_DEBUG "Fin du chargement dynamique eventuel" let default_html_generator = new Odoc_html.html let default_latex_generator = new Odoc_latex.latex diff --git a/ocamldoc/odoc_ast.ml b/ocamldoc/odoc_ast.ml index e282e32654..62c82be05c 100644 --- a/ocamldoc/odoc_ast.ml +++ b/ocamldoc/odoc_ast.ml @@ -335,7 +335,7 @@ module Analyser = in (new_param, func_body2) | _ -> - print_DEBUG3 "Pas le bon filtre pour le paramètre optionnel avec valeur par défaut."; + print_DEBUG3 "Pas le bon filtre pour le parametre optionnel avec valeur par defaut."; (parameter, func_body) ) ) @@ -480,7 +480,7 @@ module Analyser = in (new_param, body2) | _ -> - print_DEBUG3 "Pas le bon filtre pour le paramètre optionnel avec valeur par défaut."; + print_DEBUG3 "Pas le bon filtre pour le parametre optionnel avec valeur par defaut."; (parameter, body) ) ) diff --git a/ocamldoc/remove_DEBUG b/ocamldoc/remove_DEBUG index 7233afbac0..78b11e6128 100755 --- a/ocamldoc/remove_DEBUG +++ b/ocamldoc/remove_DEBUG @@ -18,4 +18,5 @@ # respecting the cpp # line annotation conventions echo "# 1 \"$1\"" -LC_ALL=C sed -e '/DEBUG/s/.*//' "$1" +LC_ALL=C sed -e '/DEBUG/c\ +(* DEBUG statement removed *)' "$1" diff --git a/otherlibs/dynlink/.cvsignore b/otherlibs/dynlink/.cvsignore index 5ea9775e1d..29b3102d19 100644 --- a/otherlibs/dynlink/.cvsignore +++ b/otherlibs/dynlink/.cvsignore @@ -1 +1,2 @@ extract_crc +*.a diff --git a/otherlibs/graph/.cvsignore b/otherlibs/graph/.cvsignore index 074dd28a45..29fea47264 100644 --- a/otherlibs/graph/.cvsignore +++ b/otherlibs/graph/.cvsignore @@ -1 +1,3 @@ so_locations +*.so +*.a diff --git a/otherlibs/systhreads/.cvsignore b/otherlibs/systhreads/.cvsignore index b175e39d68..1f1e6a3877 100644 --- a/otherlibs/systhreads/.cvsignore +++ b/otherlibs/systhreads/.cvsignore @@ -1,3 +1,5 @@ *.x thread.ml so_locations +*.so +*.a diff --git a/otherlibs/threads/.cvsignore b/otherlibs/threads/.cvsignore index fb2df562de..c17596c7d0 100644 --- a/otherlibs/threads/.cvsignore +++ b/otherlibs/threads/.cvsignore @@ -1,3 +1,5 @@ marshal.mli pervasives.mli unix.mli +*.so +*.a diff --git a/otherlibs/threads/.depend b/otherlibs/threads/.depend index 8d262a6a1f..38f2d528d2 100644 --- a/otherlibs/threads/.depend +++ b/otherlibs/threads/.depend @@ -22,24 +22,21 @@ event.cmi: join_debug.cmi: join_extern.cmi: thread.cmi join_hash.cmi: -join_link.cmi: unix.cmi +join_link.cmi: unix.cmo join_message.cmi: join_types.cmi join_link.cmi -join_misc.cmi: unix.cmi marshal.cmi -join_port.cmi: unix.cmi join_link.cmi +join_misc.cmi: unix.cmo marshal.cmo +join_port.cmi: unix.cmo join_link.cmi join_prim.cmi: join_types.cmi join_queue.cmi: join_scheduler.cmi: mutex.cmi join_types.cmi join_set.cmi: -join_space.cmi: unix.cmi marshal.cmi join_types.cmi -join_test.cmi: marshal.cmi join_types.cmi -join_types.cmi: unix.cmi mutex.cmi join_set.cmi join_misc.cmi join_link.cmi \ +join_space.cmi: unix.cmo marshal.cmo join_types.cmi +join_test.cmi: marshal.cmo join_types.cmi +join_types.cmi: unix.cmo mutex.cmi join_set.cmi join_misc.cmi join_link.cmi \ join_hash.cmi condition.cmi -marshal.cmi: mutex.cmi: -pervasives.cmi: -thread.cmi: unix.cmi -threadUnix.cmi: unix.cmi -unix.cmi: +thread.cmi: unix.cmo +threadUnix.cmi: unix.cmo condition.cmo: thread.cmi mutex.cmi condition.cmi condition.cmx: thread.cmx mutex.cmx condition.cmi event.cmo: mutex.cmi condition.cmi event.cmi @@ -50,15 +47,15 @@ join_extern.cmo: thread.cmi join_extern.cmi join_extern.cmx: thread.cmx join_extern.cmi join_hash.cmo: join_misc.cmi join_hash.cmi join_hash.cmx: join_misc.cmx join_hash.cmi -join_link.cmo: unix.cmi join_misc.cmi join_debug.cmi join_link.cmi +join_link.cmo: unix.cmo join_misc.cmi join_debug.cmi join_link.cmi join_link.cmx: unix.cmx join_misc.cmx join_debug.cmx join_link.cmi -join_message.cmo: marshal.cmi join_types.cmi join_link.cmi join_hash.cmi \ +join_message.cmo: marshal.cmo join_types.cmi join_link.cmi join_hash.cmi \ join_debug.cmi join_message.cmi join_message.cmx: marshal.cmx join_types.cmi join_link.cmx join_hash.cmx \ join_debug.cmx join_message.cmi -join_misc.cmo: unix.cmi mutex.cmi join_debug.cmi condition.cmi join_misc.cmi +join_misc.cmo: unix.cmo mutex.cmi join_debug.cmi condition.cmi join_misc.cmi join_misc.cmx: unix.cmx mutex.cmx join_debug.cmx condition.cmx join_misc.cmi -join_port.cmo: unix.cmi join_scheduler.cmi join_misc.cmi join_link.cmi \ +join_port.cmo: unix.cmo join_scheduler.cmi join_misc.cmi join_link.cmi \ join_debug.cmi join_port.cmi join_port.cmx: unix.cmx join_scheduler.cmx join_misc.cmx join_link.cmx \ join_debug.cmx join_port.cmi @@ -74,7 +71,7 @@ join_scheduler.cmx: thread.cmx mutex.cmx join_types.cmi join_misc.cmx \ join_extern.cmx join_debug.cmx condition.cmx join_scheduler.cmi join_set.cmo: mutex.cmi join_misc.cmi join_set.cmi join_set.cmx: mutex.cmx join_misc.cmx join_set.cmi -join_space.cmo: unix.cmi thread.cmi pervasives.cmi mutex.cmi marshal.cmi \ +join_space.cmo: unix.cmo thread.cmi pervasives.cmo mutex.cmi marshal.cmo \ join_types.cmi join_set.cmi join_scheduler.cmi join_port.cmi \ join_misc.cmi join_message.cmi join_link.cmi join_hash.cmi join_debug.cmi \ condition.cmi join_space.cmi @@ -84,15 +81,15 @@ join_space.cmx: unix.cmx thread.cmx pervasives.cmx mutex.cmx marshal.cmx \ condition.cmx join_space.cmi join_test.cmo: join_space.cmi join_test.cmi join_test.cmx: join_space.cmx join_test.cmi -marshal.cmo: pervasives.cmi marshal.cmi -marshal.cmx: pervasives.cmx marshal.cmi +marshal.cmo: pervasives.cmo +marshal.cmx: pervasives.cmx mutex.cmo: thread.cmi mutex.cmi mutex.cmx: thread.cmx mutex.cmi -pervasives.cmo: unix.cmi pervasives.cmi -pervasives.cmx: unix.cmx pervasives.cmi -thread.cmo: unix.cmi thread.cmi +pervasives.cmo: unix.cmo +pervasives.cmx: unix.cmx +thread.cmo: unix.cmo thread.cmi thread.cmx: unix.cmx thread.cmi -threadUnix.cmo: unix.cmi thread.cmi threadUnix.cmi +threadUnix.cmo: unix.cmo thread.cmi threadUnix.cmi threadUnix.cmx: unix.cmx thread.cmx threadUnix.cmi -unix.cmo: unix.cmi -unix.cmx: unix.cmi +unix.cmo: +unix.cmx: diff --git a/otherlibs/unix/.cvsignore b/otherlibs/unix/.cvsignore index 074dd28a45..29fea47264 100644 --- a/otherlibs/unix/.cvsignore +++ b/otherlibs/unix/.cvsignore @@ -1 +1,3 @@ so_locations +*.so +*.a diff --git a/otherlibs/unix/socketaddr.c b/otherlibs/unix/socketaddr.c index 0ee1cf5ee1..f285d15a7b 100644 --- a/otherlibs/unix/socketaddr.c +++ b/otherlibs/unix/socketaddr.c @@ -80,6 +80,9 @@ void get_sockaddr(value mladr, adr->s_inet6.sin6_family = AF_INET6; adr->s_inet6.sin6_addr = GET_INET6_ADDR(Field(mladr, 0)); adr->s_inet6.sin6_port = htons(Int_val(Field(mladr, 1))); +#ifdef SIN6_LEN + adr->s_inet6.sin6_len = sizeof(struct sockaddr_in6); +#endif *adr_len = sizeof(struct sockaddr_in6); break; } @@ -88,6 +91,9 @@ void get_sockaddr(value mladr, adr->s_inet.sin_family = AF_INET; adr->s_inet.sin_addr = GET_INET_ADDR(Field(mladr, 0)); adr->s_inet.sin_port = htons(Int_val(Field(mladr, 1))); +#ifdef SIN6_LEN + adr->s_inet.sin_len = sizeof(struct sockaddr_in); +#endif *adr_len = sizeof(struct sockaddr_in); break; } diff --git a/parsing/parser.mly b/parsing/parser.mly index 8f0d69a0d9..a2a2a7b4c0 100644 --- a/parsing/parser.mly +++ b/parsing/parser.mly @@ -1423,7 +1423,13 @@ signed_constant: | MINUS INT32 { Const_int32(Int32.neg $2) } | MINUS INT64 { Const_int64(Int64.neg $2) } | MINUS NATIVEINT { Const_nativeint(Nativeint.neg $2) } + | PLUS INT { Const_int $2 } + | PLUS FLOAT { Const_float $2 } + | PLUS INT32 { Const_int32 $2 } + | PLUS INT64 { Const_int64 $2 } + | PLUS NATIVEINT { Const_nativeint $2 } ; + /* Identifiers and long identifiers */ ident: diff --git a/stdlib/.cvsignore b/stdlib/.cvsignore index 343f6abd6a..6aa0cd421b 100644 --- a/stdlib/.cvsignore +++ b/stdlib/.cvsignore @@ -4,3 +4,4 @@ labelled-* caml *.annot sys.ml +*.a diff --git a/stdlib/.depend b/stdlib/.depend index faa3382181..5e8aefbba4 100644 --- a/stdlib/.depend +++ b/stdlib/.depend @@ -1,6 +1,6 @@ arg.cmi: -array.cmi: arrayLabels.cmi: +array.cmi: buffer.cmi: callback.cmi: camlinternalLazy.cmi: @@ -10,7 +10,7 @@ char.cmi: complex.cmi: digest.cmi: filename.cmi: -format.cmi: buffer.cmi +format.cmi: pervasives.cmi buffer.cmi gc.cmi: genlex.cmi: stream.cmi hashtbl.cmi: @@ -18,8 +18,8 @@ int32.cmi: int64.cmi: lazy.cmi: lexing.cmi: -list.cmi: listLabels.cmi: +list.cmi: map.cmi: marshal.cmi: moreLabels.cmi: set.cmi map.cmi hashtbl.cmi @@ -38,16 +38,16 @@ sort.cmi: stack.cmi: stdLabels.cmi: stream.cmi: -string.cmi: stringLabels.cmi: +string.cmi: sys.cmi: weak.cmi: hashtbl.cmi arg.cmo: sys.cmi string.cmi printf.cmi list.cmi buffer.cmi array.cmi arg.cmi arg.cmx: sys.cmx string.cmx printf.cmx list.cmx buffer.cmx array.cmx arg.cmi -array.cmo: array.cmi -array.cmx: array.cmi arrayLabels.cmo: array.cmi arrayLabels.cmi arrayLabels.cmx: array.cmx arrayLabels.cmi +array.cmo: array.cmi +array.cmx: array.cmi buffer.cmo: sys.cmi string.cmi buffer.cmi buffer.cmx: sys.cmx string.cmx buffer.cmi callback.cmo: obj.cmi callback.cmi @@ -86,10 +86,10 @@ lazy.cmo: obj.cmi camlinternalLazy.cmi lazy.cmi lazy.cmx: obj.cmx camlinternalLazy.cmx lazy.cmi lexing.cmo: sys.cmi string.cmi array.cmi lexing.cmi lexing.cmx: sys.cmx string.cmx array.cmx lexing.cmi -list.cmo: list.cmi -list.cmx: list.cmi listLabels.cmo: list.cmi listLabels.cmi listLabels.cmx: list.cmx listLabels.cmi +list.cmo: list.cmi +list.cmx: list.cmi map.cmo: map.cmi map.cmx: map.cmi marshal.cmo: string.cmi marshal.cmi @@ -98,8 +98,8 @@ moreLabels.cmo: set.cmi map.cmi hashtbl.cmi moreLabels.cmi moreLabels.cmx: set.cmx map.cmx hashtbl.cmx moreLabels.cmi nativeint.cmo: sys.cmi pervasives.cmi nativeint.cmi nativeint.cmx: sys.cmx pervasives.cmx nativeint.cmi -obj.cmo: marshal.cmi obj.cmi -obj.cmx: marshal.cmx obj.cmi +obj.cmo: marshal.cmi array.cmi obj.cmi +obj.cmx: marshal.cmx array.cmx obj.cmi oo.cmo: camlinternalOO.cmi oo.cmi oo.cmx: camlinternalOO.cmx oo.cmi parsing.cmo: obj.cmi lexing.cmi array.cmi parsing.cmi @@ -108,10 +108,10 @@ pervasives.cmo: pervasives.cmi pervasives.cmx: pervasives.cmi printexc.cmo: printf.cmi obj.cmi buffer.cmi array.cmi printexc.cmi printexc.cmx: printf.cmx obj.cmx buffer.cmx array.cmx printexc.cmi -printf.cmo: string.cmi obj.cmi list.cmi char.cmi buffer.cmi array.cmi \ - printf.cmi -printf.cmx: string.cmx obj.cmx list.cmx char.cmx buffer.cmx array.cmx \ - printf.cmi +printf.cmo: string.cmi pervasives.cmi obj.cmi list.cmi char.cmi buffer.cmi \ + array.cmi printf.cmi +printf.cmx: string.cmx pervasives.cmx obj.cmx list.cmx char.cmx buffer.cmx \ + array.cmx printf.cmi queue.cmo: obj.cmi queue.cmi queue.cmx: obj.cmx queue.cmi random.cmo: string.cmi pervasives.cmi nativeint.cmi int64.cmi int32.cmi \ @@ -128,16 +128,16 @@ sort.cmo: array.cmi sort.cmi sort.cmx: array.cmx sort.cmi stack.cmo: list.cmi stack.cmi stack.cmx: list.cmx stack.cmi -stdLabels.cmo: stringLabels.cmi listLabels.cmi arrayLabels.cmi stdLabels.cmi -stdLabels.cmx: stringLabels.cmx listLabels.cmx arrayLabels.cmx stdLabels.cmi std_exit.cmo: std_exit.cmx: +stdLabels.cmo: stringLabels.cmi listLabels.cmi arrayLabels.cmi stdLabels.cmi +stdLabels.cmx: stringLabels.cmx listLabels.cmx arrayLabels.cmx stdLabels.cmi stream.cmo: string.cmi obj.cmi list.cmi lazy.cmi stream.cmi stream.cmx: string.cmx obj.cmx list.cmx lazy.cmx stream.cmi -string.cmo: pervasives.cmi list.cmi char.cmi string.cmi -string.cmx: pervasives.cmx list.cmx char.cmx string.cmi stringLabels.cmo: string.cmi stringLabels.cmi stringLabels.cmx: string.cmx stringLabels.cmi +string.cmo: pervasives.cmi list.cmi char.cmi string.cmi +string.cmx: pervasives.cmx list.cmx char.cmx string.cmi sys.cmo: sys.cmi sys.cmx: sys.cmi weak.cmo: sys.cmi obj.cmi hashtbl.cmi array.cmi weak.cmi diff --git a/stdlib/buffer.ml b/stdlib/buffer.ml index 8dfe875993..0888409813 100644 --- a/stdlib/buffer.ml +++ b/stdlib/buffer.ml @@ -39,6 +39,14 @@ let sub b ofs len = end ;; +let blit src srcoff dst dstoff len = + if len < 0 || srcoff < 0 || srcoff > src.position - len + || dstoff < 0 || dstoff > (String.length dst) - len + then invalid_arg "Buffer.blit" + else + String.blit src.buffer srcoff dst dstoff len +;; + let nth b ofs = if ofs < 0 || ofs >= b.position then invalid_arg "Buffer.nth" diff --git a/stdlib/buffer.mli b/stdlib/buffer.mli index d7afbb1833..32d15349e4 100644 --- a/stdlib/buffer.mli +++ b/stdlib/buffer.mli @@ -48,6 +48,15 @@ current contents of the buffer [b] starting at offset [off] of length [len] bytes. May raise [Invalid_argument] if out of bounds request. The buffer itself is unaffected. *) +val blit : t -> int -> string -> int -> int -> unit +(** [Buffer.blit src srcoff dst dstoff len] copies [len] characters from + the current contents of the buffer [src], starting at offset [srcoff] + to string [dst], starting at character [dstoff]. + + Raise [Invalid_argument] if [srcoff] and [len] do not designate a valid + substring of [src], or if [dstoff] and [len] do not designate a valid + substring of [dst]. *) + val nth : t -> int -> char (** get the n-th character of the buffer. Raise [Invalid_argument] if index out of bounds *) diff --git a/stdlib/filename.ml b/stdlib/filename.ml index d3a68cf632..e11f1e3304 100644 --- a/stdlib/filename.ml +++ b/stdlib/filename.ml @@ -194,14 +194,14 @@ external close_desc: int -> unit = "caml_sys_close" let prng = Random.State.make_self_init ();; -let temp_file_name prefix suffix = +let temp_file_name temp_dir prefix suffix = let rnd = (Random.State.bits prng) land 0xFFFFFF in - concat temp_dir_name (Printf.sprintf "%s%06x%s" prefix rnd suffix) + concat temp_dir (Printf.sprintf "%s%06x%s" prefix rnd suffix) ;; -let temp_file prefix suffix = +let temp_file ?(temp_dir=temp_dir_name) prefix suffix = let rec try_name counter = - let name = temp_file_name prefix suffix in + let name = temp_file_name temp_dir prefix suffix in try close_desc(open_desc name [Open_wronly; Open_creat; Open_excl] 0o600); name @@ -209,9 +209,9 @@ let temp_file prefix suffix = if counter >= 1000 then raise e else try_name (counter + 1) in try_name 0 -let open_temp_file ?(mode = [Open_text]) prefix suffix = +let open_temp_file ?(mode = [Open_text]) ?(temp_dir=temp_dir_name) prefix suffix = let rec try_name counter = - let name = temp_file_name prefix suffix in + let name = temp_file_name temp_dir prefix suffix in try (name, open_out_gen (Open_wronly::Open_creat::Open_excl::mode) 0o600 name) diff --git a/stdlib/filename.mli b/stdlib/filename.mli index 3a968e0a1f..e016609527 100644 --- a/stdlib/filename.mli +++ b/stdlib/filename.mli @@ -22,6 +22,9 @@ val parent_dir_name : string (** The conventional name for the parent of the current directory (e.g. [..] in Unix). *) +val dir_sep : string +(** The directory separator (e.g. [/] in Unix). *) + val concat : string -> string -> string (** [concat dir file] returns a file name that designates file [file] in directory [dir]. *) @@ -68,11 +71,13 @@ val basename : string -> string val dirname : string -> string (** See {!Filename.basename}. *) -val temp_file : string -> string -> string +val temp_file : ?temp_dir: string -> string -> string -> string (** [temp_file prefix suffix] returns the name of a fresh temporary file in the temporary directory. The base name of the temporary file is formed by concatenating [prefix], then a suitably chosen integer number, then [suffix]. + The optional argument [temp_dir] indicates the temporary directory + to use, defaulting to {!Filename.temp_dir_name}. The temporary file is created empty, with permissions [0o600] (readable and writable only by the file owner). The file is guaranteed to be different from any other file that existed when @@ -80,7 +85,7 @@ val temp_file : string -> string -> string *) val open_temp_file : - ?mode: open_flag list -> string -> string -> string * out_channel + ?mode: open_flag list -> ?temp_dir: string -> string -> string -> string * out_channel (** Same as {!Filename.temp_file}, but returns both the name of a fresh temporary file, and an output channel opened (atomically) on this file. This function is more secure than [temp_file]: there diff --git a/stdlib/format.mli b/stdlib/format.mli index dcb2ad4700..e805d83ce0 100644 --- a/stdlib/format.mli +++ b/stdlib/format.mli @@ -72,7 +72,6 @@ the evaluation order of printing commands. *) - (** {6 Boxes} *) val open_box : int -> unit;; @@ -112,7 +111,6 @@ val print_char : char -> unit;; val print_bool : bool -> unit;; (** Prints a boolean in the current box. *) - (** {6 Break hints} *) val print_space : unit -> unit;; @@ -156,7 +154,6 @@ val print_if_newline : unit -> unit;; has just been split. Otherwise, ignore the next formatting command. *) - (** {6 Margin} *) val set_margin : int -> unit;; @@ -170,7 +167,6 @@ val set_margin : int -> unit;; val get_margin : unit -> int;; (** Returns the position of the right margin. *) - (** {6 Maximum indentation limit} *) val set_max_indent : int -> unit;; @@ -201,7 +197,6 @@ val get_max_boxes : unit -> int;; val over_max_boxes : unit -> bool;; (** Tests if the maximum number of boxes allowed have already been opened. *) - (** {6 Advanced formatting} *) val open_hbox : unit -> unit;; @@ -235,7 +230,6 @@ val open_hovbox : int -> unit;; When a new line is printed in the box, [d] is added to the current indentation. *) - (** {6 Tabulations} *) val open_tbox : unit -> unit;; @@ -260,8 +254,7 @@ val set_tab : unit -> unit;; (** Sets a tabulation mark at the current insertion point. *) val print_tab : unit -> unit;; -(** [print_tab ()] is equivalent to [print_tbreak (0,0)]. *) - +(** [print_tab ()] is equivalent to [print_tbreak 0 0]. *) (** {6 Ellipsis} *) @@ -272,14 +265,13 @@ val set_ellipsis_text : string -> unit;; val get_ellipsis_text : unit -> string;; (** Return the text of the ellipsis. *) - -(** {6 Tags} *) +(** {6 Semantics Tags} *) type tag = string;; -(** Tags are used to decorate printed entities for user's defined - purposes, e.g. setting font and giving size indications for a - display device, or marking delimitations of semantics entities +(** {i Semantics tags} (or simply {e tags}) are used to decorate printed + entities for user's defined purposes, e.g. setting font and giving size + indications for a display device, or marking delimitation of semantics entities (e.g. HTML or TeX elements or terminal escape sequences). By default, those tags do not influence line breaking calculation: @@ -293,7 +285,7 @@ type tag = string;; material or richer decorated output depending on the treatment of tags. By default, tags are not active, hence the output is not decorated with tag information. Once [set_tags] is set to [true], - the pretty printer engine honors tags and decorates the output + the pretty printer engine honours tags and decorates the output accordingly. When a tag has been opened (or closed), it is both and successively @@ -345,10 +337,9 @@ val get_print_tags : unit -> bool;; val get_mark_tags : unit -> bool;; (** Return the current status of tags printing and tags marking. *) +(** {6 Redirecting the standard formatter output} *) -(** {6 Redirecting formatter output} *) - -val set_formatter_out_channel : out_channel -> unit;; +val set_formatter_out_channel : Pervasives.out_channel -> unit;; (** Redirect the pretty-printer output to the given channel. *) val set_formatter_output_functions : @@ -356,17 +347,56 @@ val set_formatter_output_functions : (** [set_formatter_output_functions out flush] redirects the pretty-printer output to the functions [out] and [flush]. - The [out] function performs the pretty-printer output. It is called + The [out] function performs the pretty-printer string output. It is called with a string [s], a start position [p], and a number of characters [n]; it is supposed to output characters [p] to [p + n - 1] of [s]. The [flush] function is called whenever the pretty-printer is - flushed using [print_flush] or [print_newline]. *) + flushed (via conversion [%!], pretty-printing indications [@?] or [@.], + or using low level function [print_flush] or [print_newline]). *) val get_formatter_output_functions : unit -> (string -> int -> int -> unit) * (unit -> unit);; (** Return the current output functions of the pretty-printer. *) -(** {6 Changing the meaning of printing tags} *) +(** {6 Changing the meaning of standard formatter pretty printing} *) + +(** The [Format] module is versatile enough to let you completely redefine + the meaning of pretty printing: you may provide your own functions to define + how to handle indentation, line breaking, and even printing of all the + characters that have to be printed! *) + +val set_all_formatter_output_functions : + out:(string -> int -> int -> unit) -> + flush:(unit -> unit) -> + newline:(unit -> unit) -> + spaces:(int -> unit) -> + unit;; +(** [set_all_formatter_output_functions out flush outnewline outspace] + redirects the pretty-printer output to the functions [out] and + [flush] as described in [set_formatter_output_functions]. In + addition, the pretty-printer function that outputs a newline is set + to the function [outnewline] and the function that outputs + indentation spaces is set to the function [outspace]. + + This way, you can change the meaning of indentation (which can be + something else than just printing space characters) and the + meaning of new lines opening (which can be connected to any other + action needed by the application at hand). The two functions + [outspace] and [outnewline] are normally connected to [out] and + [flush]: respective default values for [outspace] and [outnewline] + are [out (String.make n ' ') 0 n] and [out "\n" 0 1]. *) + +val get_all_formatter_output_functions : + unit -> + (string -> int -> int -> unit) * + (unit -> unit) * + (unit -> unit) * + (int -> unit);; +(** Return the current output functions of the pretty-printer, + including line breaking and indentation functions. Useful to record the + current setting and restore it afterwards. *) + +(** {6 Changing the meaning of printing semantics tags} *) type formatter_tag_functions = { mark_open_tag : tag -> string; @@ -403,56 +433,22 @@ val get_formatter_tag_functions : unit -> formatter_tag_functions;; (** Return the current tag functions of the pretty-printer. *) -(** {6 Changing the meaning of pretty printing (indentation, line breaking, - and printing material)} *) - -val set_all_formatter_output_functions : - out:(string -> int -> int -> unit) -> - flush:(unit -> unit) -> - newline:(unit -> unit) -> - spaces:(int -> unit) -> - unit;; -(** [set_all_formatter_output_functions out flush outnewline outspace] - redirects the pretty-printer output to the functions [out] and - [flush] as described in [set_formatter_output_functions]. In - addition, the pretty-printer function that outputs a newline is set - to the function [outnewline] and the function that outputs - indentation spaces is set to the function [outspace]. - - This way, you can change the meaning of indentation (which can be - something else than just printing space characters) and the - meaning of new lines opening (which can be connected to any other - action needed by the application at hand). The two functions - [outspace] and [outnewline] are normally connected to [out] and - [flush]: respective default values for [outspace] and [outnewline] - are [out (String.make n ' ') 0 n] and [out "\n" 0 1]. *) - -val get_all_formatter_output_functions : - unit -> - (string -> int -> int -> unit) * - (unit -> unit) * - (unit -> unit) * - (int -> unit);; -(** Return the current output functions of the pretty-printer, - including line breaking and indentation functions. *) - - (** {6 Multiple formatted output} *) type formatter;; (** Abstract data type corresponding to a pretty-printer (also called a - formatter) and all its machinery. - Defining new pretty-printers permits the output of - material in parallel on several channels. - Parameters of a pretty-printer are local to this pretty-printer: - margin, maximum indentation limit, maximum number of boxes - simultaneously opened, ellipsis, and so on, are specific to - each pretty-printer and may be fixed independently. - Given an output channel [oc], a new formatter writing to - that channel is obtained by calling [formatter_of_out_channel oc]. - Alternatively, the [make_formatter] function allocates a new - formatter with explicit output and flushing functions - (convenient to output material to strings for instance). *) + formatter) and all its machinery. + Defining new pretty-printers permits the output of + material in parallel on several channels. + Parameters of a pretty-printer are local to this pretty-printer: + margin, maximum indentation limit, maximum number of boxes + simultaneously opened, ellipsis, and so on, are specific to + each pretty-printer and may be fixed independently. + Given an output channel [oc], a new formatter writing to + that channel is obtained by calling [formatter_of_out_channel oc]. + Alternatively, the [make_formatter] function allocates a new + formatter with explicit output and flushing functions + (convenient to output material to strings for instance). *) val formatter_of_out_channel : out_channel -> formatter;; (** [formatter_of_out_channel oc] returns a new formatter that diff --git a/stdlib/obj.ml b/stdlib/obj.ml index 9685be38ff..922febd65c 100644 --- a/stdlib/obj.ml +++ b/stdlib/obj.ml @@ -27,9 +27,12 @@ external set_tag : t -> int -> unit = "caml_obj_set_tag" external size : t -> int = "%obj_size" external field : t -> int -> t = "%obj_field" external set_field : t -> int -> t -> unit = "%obj_set_field" +let double_field x i = Array.get (obj x : float array) i +let set_double_field x i v = Array.set (obj x : float array) i v external new_block : int -> int -> t = "caml_obj_block" external dup : t -> t = "caml_obj_dup" external truncate : t -> int -> unit = "caml_obj_truncate" +external add_offset : t -> int -> t = "caml_obj_add_offset" let marshal (obj : t) = Marshal.to_string obj [] diff --git a/stdlib/obj.mli b/stdlib/obj.mli index a35b119bde..34b78fdb4a 100644 --- a/stdlib/obj.mli +++ b/stdlib/obj.mli @@ -28,11 +28,14 @@ external is_int : t -> bool = "%obj_is_int" external tag : t -> int = "caml_obj_tag" external set_tag : t -> int -> unit = "caml_obj_set_tag" external size : t -> int = "%obj_size" -external truncate : t -> int -> unit = "caml_obj_truncate" external field : t -> int -> t = "%obj_field" external set_field : t -> int -> t -> unit = "%obj_set_field" +val double_field : t -> int -> float +val set_double_field : t -> int -> float -> unit external new_block : int -> int -> t = "caml_obj_block" external dup : t -> t = "caml_obj_dup" +external truncate : t -> int -> unit = "caml_obj_truncate" +external add_offset : t -> int -> t = "caml_obj_add_offset" val lazy_tag : int val closure_tag : int diff --git a/stdlib/pervasives.ml b/stdlib/pervasives.ml index 9e34cf2fd4..7cc4ba6144 100644 --- a/stdlib/pervasives.ml +++ b/stdlib/pervasives.ml @@ -398,7 +398,7 @@ external incr: int ref -> unit = "%incr" external decr: int ref -> unit = "%decr" (* Formats *) -type ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'c, 'c, 'd) format6 +type ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'c, 'c, 'd) format6 type ('a, 'b, 'c) format = ('a, 'b, 'c, 'c) format4 @@ -416,7 +416,8 @@ let (( ^^ ) : ('f, 'b, 'c, 'e, 'g, 'h) format6 -> ('a, 'b, 'c, 'd, 'g, 'h) format6) = fun fmt1 fmt2 -> - string_to_format (format_to_string fmt1 ^ format_to_string fmt2);; + string_to_format (format_to_string fmt1 ^ "%," ^ format_to_string fmt2) +;; let string_of_format fmt = let s = format_to_string fmt in diff --git a/stdlib/pervasives.mli b/stdlib/pervasives.mli index 97ee3c94b8..c788901ce0 100644 --- a/stdlib/pervasives.mli +++ b/stdlib/pervasives.mli @@ -71,7 +71,7 @@ external ( >= ) : 'a -> 'a -> bool = "%greaterequal" The ordering is compatible with [(=)]. As in the case of [(=)], mutable structures are compared by contents. Comparison between functional values raises [Invalid_argument]. - Comparison between cyclic structures does not terminate. *) + Comparison between cyclic structures may not terminate. *) external compare : 'a -> 'a -> int = "%compare" (** [compare x y] returns [0] if [x] is equal to [y], @@ -93,10 +93,14 @@ external compare : 'a -> 'a -> int = "%compare" the {!List.sort} and {!Array.sort} functions. *) val min : 'a -> 'a -> 'a -(** Return the smaller of the two arguments. *) +(** Return the smaller of the two arguments. + The result is unspecified if one of the arguments contains + the float value [nan]. *) val max : 'a -> 'a -> 'a -(** Return the greater of the two arguments. *) +(** Return the greater of the two arguments. + The result is unspecified if one of the arguments contains + the float value [nan]. *) external ( == ) : 'a -> 'a -> bool = "%eq" (** [e1 == e2] tests for physical equality of [e1] and [e2]. @@ -226,8 +230,8 @@ external ( asr ) : int -> int -> int = "%asrint" [neg_infinity] for [-1.0 /. 0.0], and [nan] (``not a number'') for [0.0 /. 0.0]. These special numbers then propagate through floating-point computations as expected: for instance, - [1.0 /. infinity] is [0.0], and any operation with [nan] as - argument returns [nan] as result. + [1.0 /. infinity] is [0.0], and any arithmetic operation with [nan] + as argument returns [nan] as result. *) external ( ~-. ) : float -> float = "%negfloat" diff --git a/stdlib/printexc.ml b/stdlib/printexc.ml index f06717c274..11e7d4fd6e 100644 --- a/stdlib/printexc.ml +++ b/stdlib/printexc.ml @@ -15,6 +15,8 @@ open Printf;; +let printers = ref [] + let locfmt = format_of_string "File \"%s\", line %d, characters %d-%d: %s";; let field x i = @@ -48,9 +50,16 @@ let to_string = function | Assert_failure(file, line, char) -> sprintf locfmt file line char (char+6) "Assertion failed" | x -> - let x = Obj.repr x in - let constructor = (Obj.magic(Obj.field (Obj.field x 0) 0) : string) in - constructor ^ (fields x) + let rec conv = function + | hd :: tl -> + (match try hd x with _ -> None with + | Some s -> s + | None -> conv tl) + | [] -> + let x = Obj.repr x in + let constructor = (Obj.magic(Obj.field (Obj.field x 0) 0) : string) in + constructor ^ (fields x) in + conv !printers ;; let print fct arg = @@ -125,3 +134,5 @@ let get_backtrace () = external record_backtrace: bool -> unit = "caml_record_backtrace" external backtrace_status: unit -> bool = "caml_backtrace_status" +let register_printer fn = + printers := fn :: !printers diff --git a/stdlib/printexc.mli b/stdlib/printexc.mli index a3ae6ba7b4..99729e10fd 100644 --- a/stdlib/printexc.mli +++ b/stdlib/printexc.mli @@ -57,3 +57,13 @@ val record_backtrace: bool -> unit val backtrace_status: unit -> bool (** [Printexc.backtrace_status()] returns [true] if exception backtraces are currently recorded, [false] if not. *) + +val register_printer : (exn -> string option) -> unit +(** [Printexc.register_printer fn] registers [fn] as an exception printer. + The printer should return [None] if it does not know how to convert + the passed exception, and [Some s] with [s] the resulting string if + it can convert the passed exception. + When converting an exception into a string, the printers will be invoked + in the reverse order of their registrations, until a printer returns + a [Some s] value (if no such printer exists, the runtime will use a + generic printer). *) diff --git a/stdlib/printf.ml b/stdlib/printf.ml index a061af7359..6bdd1c15a8 100644 --- a/stdlib/printf.ml +++ b/stdlib/printf.ml @@ -39,8 +39,8 @@ module Sformat = struct let add_int_index i idx = index_of_int (i + int_of_index idx);; let succ_index = add_int_index 1;; - (* Litteral position are one-based (hence pred p instead of p). *) - let index_of_litteral_position p = index_of_int (pred p);; + (* Literal position are one-based (hence pred p instead of p). *) + let index_of_literal_position p = index_of_int (pred p);; external length : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> int = "%string_length" @@ -122,12 +122,12 @@ let extract_format fmt start stop widths = let skip_positional_spec start = match Sformat.unsafe_get fmt start with | '0'..'9' -> - let rec skip_int_litteral i = + let rec skip_int_literal i = match Sformat.unsafe_get fmt i with - | '0'..'9' -> skip_int_litteral (succ i) + | '0'..'9' -> skip_int_literal (succ i) | '$' -> succ i | _ -> start in - skip_int_litteral (succ start) + skip_int_literal (succ start) | _ -> start in let start = skip_positional_spec (succ start) in let b = Buffer.create (stop - start + 10) in @@ -140,7 +140,7 @@ let extract_format fmt start stop widths = let i = skip_positional_spec (succ i) in fill_format i t | ('*', []) -> - assert false (* should not happen *) + assert false (* Should not happen since this is ill-typed. *) | (c, _) -> Buffer.add_char b c; fill_format (succ i) widths in @@ -161,7 +161,7 @@ let extract_format_float conv fmt start stop widths = let sfmt = extract_format fmt start stop widths in match conv with | 'F' -> - sfmt.[String.length sfmt - 1] <- 'f'; + sfmt.[String.length sfmt - 1] <- 'g'; sfmt | _ -> sfmt ;; @@ -169,7 +169,7 @@ let extract_format_float conv fmt start stop widths = (* Returns the position of the next character following the meta format string, starting from position [i], inside a given format [fmt]. According to the character [conv], the meta format string is - enclosed by the delimitors %{ and %} (when [conv = '{']) or %( and + enclosed by the delimiters %{ and %} (when [conv = '{']) or %( and %) (when [conv = '(']). Hence, [sub_format] returns the index of the character following the [')'] or ['}'] that ends the meta format, according to the character [conv]. *) @@ -215,7 +215,7 @@ let iter_on_format_args fmt add_conv add_char = and scan_conv skip i = if i > lim then incomplete_format fmt else match Sformat.unsafe_get fmt i with - | '%' | '!' -> succ i + | '%' | '!' | ',' -> succ i | 's' | 'S' | '[' -> add_conv skip i 's' | 'c' | 'C' -> add_conv skip i 'c' | 'd' | 'i' |'o' | 'u' | 'x' | 'X' | 'N' -> add_conv skip i 'i' @@ -307,6 +307,7 @@ let ac_of_format fmt = let count_arguments_of_format fmt = let ac = ac_of_format fmt in + (* For printing only regular arguments have to be counted. *) ac.ac_rglr ;; @@ -384,7 +385,7 @@ type positional_specification = Unfortunately, the type of a parameter specified via a [*$] positional specification should be the type of the corresponding argument to - [printf], hence this sould be the type of the $n$-th argument to [printf] + [printf], hence this should be the type of the $n$-th argument to [printf] with $n$ being the {\em value} of the integer argument defining [*]; we clearly cannot statically guess the value of this parameter in the general case. Put it another way: this means type dependency, which is completely @@ -393,19 +394,19 @@ type positional_specification = let scan_positional_spec fmt got_spec n i = match Sformat.unsafe_get fmt i with | '0'..'9' as d -> - let rec get_int_litteral accu j = + let rec get_int_literal accu j = match Sformat.unsafe_get fmt j with | '0'..'9' as d -> - get_int_litteral (10 * accu + (int_of_char d - 48)) (succ j) + get_int_literal (10 * accu + (int_of_char d - 48)) (succ j) | '$' -> if accu = 0 then failwith "printf: bad positional specification (0)." else - got_spec (Spec_index (Sformat.index_of_litteral_position accu)) (succ j) + got_spec (Spec_index (Sformat.index_of_literal_position accu)) (succ j) (* Not a positional specification: tell so the caller, and go back to scanning the format from the original [i] position we were called at first. *) | _ -> got_spec Spec_none i in - get_int_litteral (int_of_char d - 48) (succ i) + get_int_literal (int_of_char d - 48) (succ i) (* No positional specification: tell so the caller, and go back to scanning the format from the original [i] position. *) | _ -> got_spec Spec_none i @@ -427,15 +428,12 @@ let get_index spec n = | Spec_index p -> p ;; -(* Format a float argument as a valid Caml lexem. *) -let format_float_lexem = - let valid_float_lexem sfmt s = +(* Format a float argument as a valid Caml lexeme. *) +let format_float_lexeme = + let valid_float_lexeme sfmt s = let l = String.length s in if l = 0 then "nan" else - let add_dot sfmt s = - if s.[0] = ' ' || s.[0] = '+' || s.[0] = '0' - then String.sub s 1 (l - 1) ^ "." - else String.sub s 0 (l - 1) ^ "." in + let add_dot sfmt s = s ^ "." in let rec loop i = if i >= l then add_dot sfmt s else @@ -448,7 +446,7 @@ let format_float_lexem = (fun sfmt x -> let s = format_float sfmt x in match classify_float x with - | FP_normal | FP_subnormal | FP_zero -> valid_float_lexem sfmt s + | FP_normal | FP_subnormal | FP_zero -> valid_float_lexeme sfmt s | FP_nan | FP_infinite -> s) ;; @@ -470,8 +468,8 @@ let format_float_lexem = (* Note: here, rather than test explicitly against [Sformat.length fmt] to detect the end of the format, we use [Sformat.unsafe_get] and - rely on the fact that we'll get a "nul" character if we access - one past the end of the string. These "nul" characters are then + rely on the fact that we'll get a "null" character if we access + one past the end of the string. These "null" characters are then caught by the [_ -> bad_conversion] clauses below. Don't do this at home, kids. *) let scan_format fmt args n pos cont_s cont_a cont_t cont_f cont_m = @@ -502,7 +500,7 @@ let scan_format fmt args n pos cont_s cont_a cont_t cont_f cont_m = let (x : string) = get_arg spec n in let x = if conv = 's' then x else "\"" ^ String.escaped x ^ "\"" in let s = - (* optimize for common case %s *) + (* Optimize for common case %s *) if i = succ pos then x else format_string (extract_format fmt pos i widths) x in cont_s (next_index spec n) s (succ i) @@ -523,7 +521,8 @@ let scan_format fmt args n pos cont_s cont_a cont_t cont_f cont_m = | 'F' as conv -> let (x : float) = get_arg spec n in let s = - format_float_lexem (extract_format_float conv fmt pos i widths) x in + if widths = [] then Pervasives.string_of_float x else + format_float_lexeme (extract_format_float conv fmt pos i widths) x in cont_s (next_index spec n) s (succ i) | 'B' | 'b' -> let (x : bool) = get_arg spec n in @@ -560,6 +559,7 @@ let scan_format fmt args n pos cont_s cont_a cont_t cont_f cont_m = let s = format_int (extract_format_int 'n' fmt pos i widths) x in cont_s (next_index spec n) s (succ i) end + | ',' -> cont_s n "" (succ i) | '!' -> cont_f n (succ i) | '{' | '(' as conv (* ')' '}' *) -> let (xf : ('a, 'b, 'c, 'd, 'e, 'f) format6) = get_arg spec n in diff --git a/stdlib/printf.mli b/stdlib/printf.mli index 059779922b..43106505a3 100644 --- a/stdlib/printf.mli +++ b/stdlib/printf.mli @@ -78,6 +78,7 @@ val fprintf : out_channel -> ('a, out_channel, unit) format -> 'a type as [fmt]. - [!]: take no argument and flush the output. - [%]: take no argument and output one [%] character. + - [,]: the no-op delimiter for conversion specifications. The optional [flags] are: - [-]: left-justify the output (default is right justification). diff --git a/stdlib/scanf.ml b/stdlib/scanf.ml index 88a0f97f82..7cd018d3fb 100644 --- a/stdlib/scanf.ml +++ b/stdlib/scanf.ml @@ -47,16 +47,16 @@ val checked_peek_char : scanbuf -> char;; input buffer has reached an end of file, the function raises exception [End_of_file]. *) -val store_char : scanbuf -> char -> int -> int;; -(* [Scanning.store_char ib c lim] adds [c] to the token buffer +val store_char : int -> scanbuf -> char -> int;; +(* [Scanning.store_char lim ib c] adds [c] to the token buffer of the scanning buffer. It also advances the scanning buffer for one character and returns [lim - 1], indicating the new limit for the length of the current token. *) -val skip_char : scanbuf -> int -> int;; -(* [Scanning.skip_char ib lim] ignores the current character. *) +val skip_char : int -> scanbuf -> int;; +(* [Scanning.skip_char lim ib] ignores the current character. *) -val ignore_char : scanbuf -> int -> int;; +val ignore_char : int -> scanbuf -> int;; (* [Scanning.ignore_char ib lim] ignores the current character and decrements the limit. *) @@ -186,16 +186,16 @@ let token ib = let token_count ib = ib.token_count;; -let skip_char ib max = +let skip_char max ib = invalidate_current_char ib; max ;; -let ignore_char ib max = skip_char ib (max - 1);; +let ignore_char max ib = skip_char (max - 1) ib;; -let store_char ib c max = +let store_char max ib c = Buffer.add_char ib.tokbuf c; - ignore_char ib max + ignore_char max ib ;; let default_token_buffer_size = 1024;; @@ -379,8 +379,8 @@ let incomplete_format fmt = (Sformat.to_string fmt)) ;; -let bad_float () = bad_input "no dot or exponent part found in -float token" +let bad_float () = + bad_input "no dot or exponent part found in float token" ;; let character_mismatch_err c ci = @@ -407,11 +407,18 @@ let compatible_format_type fmt1 fmt2 = In this case, the character c has been explicitely specified in the format as being mandatory in the input; hence we should fail with End_of_file in case of end_of_input. - That's why we use checked_peek_char here. *) -let check_char ib c = + That's why we use checked_peek_char here. + We are also careful to treat "\r\n" in the input as a end of line marker: it + always matches a '\n' specification in the input format string. + *) +let rec check_char ib c = let ci = Scanning.checked_peek_char ib in - if ci = c then Scanning.invalidate_current_char ib else - character_mismatch c ci + if ci = c then Scanning.invalidate_current_char ib else begin + match ci with + | '\r' when c = '\n' -> + Scanning.invalidate_current_char ib; check_char ib '\n' + | _ -> character_mismatch c ci + end ;; (* Checks that the current char is indeed one of the stopper characters, @@ -500,10 +507,10 @@ let rec scan_decimal_digits max ib = if Scanning.eof ib then max else match c with | '0' .. '9' as c -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in scan_decimal_digits max ib | '_' -> - let max = Scanning.ignore_char ib max in + let max = Scanning.ignore_char max ib in scan_decimal_digits max ib | _ -> max ;; @@ -512,7 +519,7 @@ let scan_decimal_digits_plus max ib = let c = Scanning.checked_peek_char ib in match c with | '0' .. '9' -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in scan_decimal_digits max ib | c -> bad_input_char c ;; @@ -526,16 +533,16 @@ let scan_digits_plus digitp max ib = if Scanning.eof ib then max else match c with | c when digitp c -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in scan_digits max | '_' -> - let max = Scanning.ignore_char ib max in + let max = Scanning.ignore_char max ib in scan_digits max | _ -> max in let c = Scanning.checked_peek_char ib in if digitp c then - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in scan_digits max else bad_input_char c ;; @@ -567,8 +574,8 @@ let scan_unsigned_decimal_int = scan_decimal_digits_plus;; let scan_sign max ib = let c = Scanning.checked_peek_char ib in match c with - | '+' -> Scanning.store_char ib c max - | '-' -> Scanning.store_char ib c max + | '+' -> Scanning.store_char max ib c + | '-' -> Scanning.store_char max ib c | c -> max ;; @@ -584,14 +591,14 @@ let scan_optionally_signed_decimal_int max ib = let scan_unsigned_int max ib = match Scanning.checked_peek_char ib with | '0' as c -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else begin match c with - | 'x' | 'X' -> scan_hexadecimal_int (Scanning.store_char ib c max) ib - | 'o' -> scan_octal_int (Scanning.store_char ib c max) ib - | 'b' -> scan_binary_int (Scanning.store_char ib c max) ib + | 'x' | 'X' -> scan_hexadecimal_int (Scanning.store_char max ib c) ib + | 'o' -> scan_octal_int (Scanning.store_char max ib c) ib + | 'b' -> scan_binary_int (Scanning.store_char max ib c) ib | c -> scan_decimal_digits max ib end | c -> scan_unsigned_decimal_int max ib ;; @@ -620,7 +627,7 @@ let scan_frac_part max ib = if Scanning.eof ib then max else match c with | '0' .. '9' as c -> - scan_decimal_digits (Scanning.store_char ib c max) ib + scan_decimal_digits (Scanning.store_char max ib c) ib | _ -> max ;; @@ -631,7 +638,7 @@ let scan_exp_part max ib = if Scanning.eof ib then max else match c with | 'e' | 'E' as c -> - scan_optionally_signed_decimal_int (Scanning.store_char ib c max) ib + scan_optionally_signed_decimal_int (Scanning.store_char max ib c) ib | _ -> max ;; @@ -651,7 +658,7 @@ let scan_float max ib = if Scanning.eof ib then max else match c with | '.' -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in let max = scan_frac_part max ib in scan_exp_part max ib | c -> scan_exp_part max ib @@ -664,7 +671,7 @@ let scan_Float max ib = if Scanning.eof ib then bad_float () else match c with | '.' -> - let max = Scanning.store_char ib c max in + let max = Scanning.store_char max ib c in let max = scan_frac_part max ib in scan_exp_part max ib | 'e' | 'E' -> @@ -683,15 +690,15 @@ let scan_string stp max ib = if stp = [] then match c with | ' ' | '\t' | '\n' | '\r' -> max - | c -> loop (Scanning.store_char ib c max) else - if List.memq c stp then Scanning.skip_char ib max else - loop (Scanning.store_char ib c max) in + | c -> loop (Scanning.store_char max ib c) else + if List.memq c stp then Scanning.skip_char max ib else + loop (Scanning.store_char max ib c) in loop max ;; (* Scan a char: peek strictly one character in the input, whatsoever. *) let scan_char max ib = - Scanning.store_char ib (Scanning.checked_peek_char ib) max + Scanning.store_char max ib (Scanning.checked_peek_char ib) ;; let char_for_backslash = function @@ -704,27 +711,58 @@ let char_for_backslash = function (* The integer value corresponding to the facial value of a valid decimal digit character. *) -let int_value_of_char c = int_of_char c - 48;; +let decimal_value_of_char c = int_of_char c - int_of_char '0';; let char_for_decimal_code c0 c1 c2 = let c = - 100 * int_value_of_char c0 + - 10 * int_value_of_char c1 + - int_value_of_char c2 in + 100 * decimal_value_of_char c0 + + 10 * decimal_value_of_char c1 + + decimal_value_of_char c2 in if c < 0 || c > 255 then bad_input (Printf.sprintf "bad char \\%c%c%c" c0 c1 c2) else char_of_int c ;; +(* The integer value corresponding to the facial value of a valid + hexadecimal digit character. *) +let hexadecimal_value_of_char c = + let d = int_of_char c in + (* Could also be: + if d <= int_of_char '9' then d - int_of_char '0' else + if d <= int_of_char 'F' then 10 + d - int_of_char 'A' else + if d <= int_of_char 'f' then 10 + d - int_of_char 'a' else assert false + *) + if d >= int_of_char 'a' then + d - 87 (* 10 + int_of_char c - int_of_char 'a' *) else + if d >= int_of_char 'A' then + d - 55 (* 10 + int_of_char c - int_of_char 'A' *) else + d - int_of_char '0' +;; + +let char_for_hexadecimal_code c1 c2 = + let c = + 16 * hexadecimal_value_of_char c1 + + hexadecimal_value_of_char c2 in + if c < 0 || c > 255 + then bad_input (Printf.sprintf "bad char \\%c%c" c1 c2) + else char_of_int c +;; + (* Called when encountering '\\' as starter of a char. Stops before the corresponding '\''. *) -let scan_backslash_char max ib = - if max = 0 then bad_input "a char" else +let check_next_char message max ib = + if max = 0 then bad_input message else let c = Scanning.peek_char ib in - if Scanning.eof ib then bad_input "a char" else - match c with - | '\\' | '\'' | '"' | 'n' | 't' | 'b' | 'r' (* '"' helping Emacs *) -> - Scanning.store_char ib (char_for_backslash c) max + if Scanning.eof ib then bad_input message else c +;; + +let check_next_char_for_char = check_next_char "a char";; +let check_next_char_for_string = check_next_char "a string";; + +let scan_backslash_char max ib = + match check_next_char_for_char max ib with + | '\\' | '\'' | '\"' | 'n' | 't' | 'b' | 'r' as c -> + Scanning.store_char max ib (char_for_backslash c) | '0' .. '9' as c -> let get_digit () = let c = Scanning.next_char ib in @@ -734,57 +772,69 @@ let scan_backslash_char max ib = let c0 = c in let c1 = get_digit () in let c2 = get_digit () in - Scanning.store_char ib (char_for_decimal_code c0 c1 c2) (max - 2) + Scanning.store_char (max - 2) ib (char_for_decimal_code c0 c1 c2) + | 'x' -> + let get_digit () = + let c = Scanning.next_char ib in + match c with + | '0' .. '9' | 'A' .. 'F' | 'a' .. 'f' as c -> c + | c -> bad_input_escape c in + let c1 = get_digit () in + let c2 = get_digit () in + Scanning.store_char (max - 2) ib (char_for_hexadecimal_code c1 c2) | c -> bad_input_char c ;; let scan_Char max ib = - let rec loop s max = - if max = 0 then bad_input "a char" else - let c = Scanning.checked_peek_char ib in - if Scanning.eof ib then bad_input "a char" else - match c, s with - (* Looking for the '\'' at the beginning of the delimited char. *) - | '\'', 3 -> loop 2 (Scanning.ignore_char ib max) - (* Looking for the '\'' at the end of the delimited char. *) - | '\'', 1 -> Scanning.ignore_char ib max - (* Any other char at the beginning or end of the delimited char should be - '\''. *) - | c, (3 | 1) -> character_mismatch '\'' c - (* Found a '\\': check and read this escape char. *) - | '\\', 2 -> loop 1 (scan_backslash_char (Scanning.ignore_char ib max) ib) - (* The regular case, remember the char, then look for the terminal '\\'. *) - | c, 2 -> loop 1 (Scanning.store_char ib c max) - (* Any other case is an error, *) - | c, _ -> bad_input_char c in - loop 3 max + + let rec find_start max = + match check_next_char_for_char max ib with + | '\'' -> find_char (Scanning.ignore_char max ib) + | c -> character_mismatch '\'' c + + and find_char max = + match check_next_char_for_char max ib with + | '\\' -> find_stop (scan_backslash_char (Scanning.ignore_char max ib) ib) + | c -> find_stop (Scanning.store_char max ib c) + + and find_stop max = + match check_next_char_for_char max ib with + | '\'' -> Scanning.ignore_char max ib + | c -> character_mismatch '\'' c in + + find_start max ;; let scan_String max ib = - let rec loop s max = - if max = 0 then bad_input "a string" else - let c = Scanning.checked_peek_char ib in - if Scanning.eof ib then bad_input "a string" else - match c, s with - | '"', true (* '"' helping Emacs *) -> - loop false (Scanning.ignore_char ib max) - | '"', false (* '"' helping Emacs *) -> - Scanning.ignore_char ib max - | '\\', false -> - skip_spaces true (Scanning.ignore_char ib max) - | c, false -> loop false (Scanning.store_char ib c max) - | c, _ -> bad_input_char c - and skip_spaces s max = - if max = 0 then bad_input "a string" else - let c = Scanning.checked_peek_char ib in - if Scanning.eof ib then bad_input "a string" else - match c, s with - | '\n', true - | ' ', false -> - skip_spaces false (Scanning.ignore_char ib max) - | c, false -> loop false max - | _, _ -> loop false (scan_backslash_char (max - 1) ib) in - loop true max + + let rec find_start max = + match check_next_char_for_string max ib with + | '\"' -> find_stop (Scanning.ignore_char max ib) + | c -> character_mismatch '\"' c + + and find_stop max = + match check_next_char_for_string max ib with + | '\"' -> Scanning.ignore_char max ib + | '\\' -> scan_backslash (Scanning.ignore_char max ib) + | c -> find_stop (Scanning.store_char max ib c) + + and scan_backslash max = + match check_next_char_for_string max ib with + | '\r' -> skip_newline (Scanning.ignore_char max ib) + | '\n' -> skip_spaces (Scanning.ignore_char max ib) + | c -> find_stop (scan_backslash_char max ib) + + and skip_newline max = + match check_next_char_for_string max ib with + | '\n' -> skip_spaces (Scanning.ignore_char max ib) + | _ -> find_stop (Scanning.store_char max ib '\r') + + and skip_spaces max = + match check_next_char_for_string max ib with + | ' ' -> skip_spaces (Scanning.ignore_char max ib) + | _ -> find_stop max in + + find_start max ;; let scan_bool max ib = @@ -964,49 +1014,49 @@ let scan_chars_in_char_set stp char_set max ib = let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c == cp1 - then loop_pos1 cp1 (Scanning.store_char ib c max) + then loop_pos1 cp1 (Scanning.store_char max ib c) else max and loop_pos2 cp1 cp2 max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c == cp1 || c == cp2 - then loop_pos2 cp1 cp2 (Scanning.store_char ib c max) + then loop_pos2 cp1 cp2 (Scanning.store_char max ib c) else max and loop_pos3 cp1 cp2 cp3 max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c == cp1 || c == cp2 || c == cp3 - then loop_pos3 cp1 cp2 cp3 (Scanning.store_char ib c max) + then loop_pos3 cp1 cp2 cp3 (Scanning.store_char max ib c) else max and loop_neg1 cp1 max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c != cp1 - then loop_neg1 cp1 (Scanning.store_char ib c max) + then loop_neg1 cp1 (Scanning.store_char max ib c) else max and loop_neg2 cp1 cp2 max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c != cp1 && c != cp2 - then loop_neg2 cp1 cp2 (Scanning.store_char ib c max) + then loop_neg2 cp1 cp2 (Scanning.store_char max ib c) else max and loop_neg3 cp1 cp2 cp3 max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if c != cp1 && c != cp2 && c != cp3 - then loop_neg3 cp1 cp2 cp3 (Scanning.store_char ib c max) + then loop_neg3 cp1 cp2 cp3 (Scanning.store_char max ib c) else max and loop setp max = if max = 0 then max else let c = Scanning.peek_char ib in if Scanning.eof ib then max else if setp c == 1 - then loop setp (Scanning.store_char ib c max) + then loop setp (Scanning.store_char max ib c) else max in let max = @@ -1175,25 +1225,27 @@ let scan_format ib ef fmt rv f = if ir > limr then assert false else let token = Obj.magic rv.(ir) ib in scan_fmt (succ ir) (stack f token) (succ i) - | 'l' | 'n' | 'L' as conv -> + | 'l' | 'n' | 'L' as conv0 -> let i = succ i in - if i > lim then scan_fmt ir (stack f (get_count conv ib)) i else begin + if i > lim then scan_fmt ir (stack f (get_count conv0 ib)) i else begin match Sformat.get fmt i with (* This is in fact an integer conversion (e.g. %ld, %ni, or %Lo). *) - | 'd' | 'i' | 'o' | 'u' | 'x' | 'X' as conv -> - let _x = scan_int_conv conv max ib in + | 'd' | 'i' | 'o' | 'u' | 'x' | 'X' as conv1 -> + let _x = scan_int_conv conv1 max ib in (* Look back to the character that triggered the integer conversion - (this character is either 'l', 'n' or 'L'), to find the + (this character is either 'l', 'n' or 'L') to find the conversion to apply to the integer token read. *) - begin match Sformat.get fmt (i - 1) with - | 'l' -> scan_fmt ir (stack f (token_int32 conv ib)) (succ i) - | 'n' -> scan_fmt ir (stack f (token_nativeint conv ib)) (succ i) - | _ -> scan_fmt ir (stack f (token_int64 conv ib)) (succ i) end + begin match conv0 with + | 'l' -> scan_fmt ir (stack f (token_int32 conv1 ib)) (succ i) + | 'n' -> scan_fmt ir (stack f (token_nativeint conv1 ib)) (succ i) + | _ -> scan_fmt ir (stack f (token_int64 conv1 ib)) (succ i) end (* This is not an integer conversion, but a regular %l, %n or %L. *) - | _ -> scan_fmt ir (stack f (get_count conv ib)) i end + | _ -> scan_fmt ir (stack f (get_count conv0 ib)) i end | '!' -> if Scanning.end_of_input ib then scan_fmt ir f (succ i) else bad_input "end of input not found" + | ',' -> + scan_fmt ir f (succ i) | '_' -> if i > lim then incomplete_format fmt else scan_conversion true max ir f (succ i) @@ -1202,10 +1254,10 @@ let scan_format ib ef fmt rv f = if i > lim then accu, i else match Sformat.get fmt i with | '0' .. '9' as c -> - let accu = 10 * accu + int_value_of_char c in + let accu = 10 * accu + decimal_value_of_char c in read_width accu (succ i) | _ -> accu, i in - let max, i = read_width (int_value_of_char conv) (succ i) in + let max, i = read_width (decimal_value_of_char conv) (succ i) in if i > lim then incomplete_format fmt else begin match Sformat.get fmt i with | '.' -> diff --git a/stdlib/scanf.mli b/stdlib/scanf.mli index f3049f91eb..65217fc393 100644 --- a/stdlib/scanf.mli +++ b/stdlib/scanf.mli @@ -69,7 +69,7 @@ However, it is also largely different, simpler, and yet more powerful: the formatted input functions are higher-order functionals and the parameter passing mechanism is just the regular function application not - the variable assigment based mechanism which is typical for formatted + the variable assignment based mechanism which is typical for formatted input in imperative languages; the Caml format strings also feature useful additions to easily define complex tokens; as expected within a functional programming language, the formatted input functions also @@ -197,16 +197,19 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;; (** {7 The space character in format strings} *) (** As mentioned above, a plain character in the format string is just - matched with the characters of the input; however, one character is a - special exception to this simple rule: the space character (ASCII code - 32) does not match a single space character, but any amount of + matched with the next character of the input; however, two characters are + special exceptions to this rule: the space character ([' '] or ASCII code + 32) and the line feed character (['\n'] or ASCII code 10). + A space does not match a single space character, but any amount of ``whitespace'' in the input. More precisely, a space inside the format string matches {e any number} of tab, space, line feed and carriage - return characters. + return characters. Similarly, a line feed character in the format string + matches either a single line feed or a carriage return followed by a line + feed. Matching {e any} amount of whitespace, a space in the format string also matches no amount of whitespace at all; hence, the call [bscanf ib - "Price = %d $" (fun p -> p)] succeds and returns [1] when reading an + "Price = %d $" (fun p -> p)] succeeds and returns [1] when reading an input with various whitespace in it, such as [Price = 1 $], [Price = 1 $], or even [Price=1$]. *) @@ -287,6 +290,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;; - [N] or [L]: returns the number of tokens read so far. - [!]: matches the end of input condition. - [%]: matches one [%] character in the input. + - [,]: the no-op delimiter for conversion specifications. Following the [%] character that introduces a conversion, there may be the special flag [_]: the conversion that follows occurs as usual, @@ -303,7 +307,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;; Notes: - - as mentioned above, a [%s] convertion always succeeds, even if there is + - as mentioned above, a [%s] conversion always succeeds, even if there is nothing to read in the input: it simply returns [""]. - in addition to the relevant digits, ['_'] characters may appear @@ -361,7 +365,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;; [End_of_file]: if the end of input is reached the conversion succeeds and simply returns the characters read so far, or [""] if none were read. *) -(** {6 Specialized formatted input functions} *) +(** {6 Specialised formatted input functions} *) val fscanf : in_channel -> ('a, 'b, 'c, 'd) scanner;; (** Same as {!Scanf.bscanf}, but reads from the given channel. @@ -373,7 +377,7 @@ val fscanf : in_channel -> ('a, 'b, 'c, 'd) scanner;; primitives on the channel (reading characters, seeking the reading position, and so on). - As a consequence, never mixt direct low level reading and high level + As a consequence, never mix direct low level reading and high level scanning from the same input channel. *) val sscanf : string -> ('a, 'b, 'c, 'd) scanner;; @@ -397,7 +401,7 @@ val kscanf : val bscanf_format : Scanning.scanbuf -> ('a, 'b, 'c, 'd, 'e, 'f) format6 -> (('a, 'b, 'c, 'd, 'e, 'f) format6 -> 'g) -> 'g;; -(** [bscanf_format ib fmt f] reads a format string token from the scannning +(** [bscanf_format ib fmt f] reads a format string token from the scanning buffer [ib], according to the given format string [fmt], and applies [f] to the resulting format string value. Raise [Scan_failure] if the format string value read does not have the diff --git a/stdlib/stdlib.mllib b/stdlib/stdlib.mllib index 9f835c6fa6..91265e5da9 100644 --- a/stdlib/stdlib.mllib +++ b/stdlib/stdlib.mllib @@ -1,48 +1,49 @@ -# This file lists all standard library modules. +# This file lists all standard library modules +# (in the same order as Makefile.shared). # It is used in particular to know what to expunge in toplevels. # $Id$ Pervasives -Arg Array -ArrayLabels -Buffer -Callback -CamlinternalLazy -CamlinternalMod -CamlinternalOO +List Char -Complex -Digest -Filename -Format -Gc -Genlex +String +Sys Hashtbl +Sort +Marshal +Obj Int32 Int64 -Lazy -Lexing -List -ListLabels -Map -Marshal -MoreLabels Nativeint -Obj -Oo +Lexing Parsing -Printexc -Printf -Queue -Random -Scanf Set -Sort +Map Stack -StdLabels +Queue +CamlinternalLazy +Lazy Stream -String -StringLabels -Sys +Buffer +Printf +Format +Scanf +Arg +Printexc +Gc +Digest +Random +Callback +CamlinternalOO +Oo +CamlinternalMod +Genlex Weak +Filename +Complex +ArrayLabels +ListLabels +StringLabels +MoreLabels +StdLabels diff --git a/tools/.cvsignore b/tools/.cvsignore index da394be959..6adfbf20f8 100644 --- a/tools/.cvsignore +++ b/tools/.cvsignore @@ -6,6 +6,7 @@ dumpobj dumpapprox objinfo cvt_emit +cvt_emit.bak cvt_emit.ml ocamlcp ocamlmktop diff --git a/tools/.depend b/tools/.depend index b51459b67e..f4eb6794b9 100644 --- a/tools/.depend +++ b/tools/.depend @@ -24,8 +24,6 @@ dumpobj.cmx: ../utils/tbl.cmx opnames.cmx ../bytecomp/opcodes.cmx \ ../typing/ident.cmx ../bytecomp/emitcode.cmx ../utils/config.cmx \ ../bytecomp/cmo_format.cmi ../bytecomp/bytesections.cmx \ ../parsing/asttypes.cmi -lexer301.cmo: ../utils/warnings.cmi ../utils/misc.cmi ../parsing/location.cmi -lexer301.cmx: ../utils/warnings.cmx ../utils/misc.cmx ../parsing/location.cmx myocamlbuild_config.cmo: myocamlbuild_config.cmx: objinfo.cmo: ../utils/config.cmi ../bytecomp/cmo_format.cmi @@ -60,5 +58,5 @@ primreq.cmo: ../utils/config.cmi ../bytecomp/cmo_format.cmi primreq.cmx: ../utils/config.cmx ../bytecomp/cmo_format.cmi profiling.cmo: profiling.cmi profiling.cmx: profiling.cmi -scrapelabels.cmo: lexer301.cmo -scrapelabels.cmx: lexer301.cmx +scrapelabels.cmo: +scrapelabels.cmx: diff --git a/tools/ocamlmklib.mlp b/tools/ocamlmklib.mlp index 39aac11ff1..71e4836e5f 100644 --- a/tools/ocamlmklib.mlp +++ b/tools/ocamlmklib.mlp @@ -15,19 +15,25 @@ open Printf open Myocamlbuild_config -let bytecode_objs = ref [] (* .cmo,.cma,.ml,.mli files to pass to jocamlc *) -and native_objs = ref [] (* .cmx,.cmxa,.ml,.mli files to pass to jocamlopt *) -and c_objs = ref [] (* .o, .a, .obj, .libfiles to pass to mksharedlib and ar *) -and caml_libs = ref [] (* -cclib to pass to jocamlc, jocamlopt *) -and caml_opts = ref [] (* -ccopt to pass to jocamlc, jocamlopt *) +(* PR#4783: under Windows, don't use absolute paths because we do + not know where the binary distribution will be installed. *) +let compiler_path name = + if Sys.os_type = "Win32" then name else Filename.concat bindir name + +let bytecode_objs = ref [] (* .cmo,.cma,.ml,.mli files to pass to ocamlc *) +and native_objs = ref [] (* .cmx,.cmxa,.ml,.mli files to pass to ocamlopt *) +and c_objs = ref [] (* .o, .a, .obj, .lib, .dll files to pass to mksharedlib and ar *) +and caml_libs = ref [] (* -cclib to pass to ocamlc, ocamlopt *) +and caml_opts = ref [] (* -ccopt to pass to ocamlc, ocamlopt *) and dynlink = ref supports_shared_libraries and failsafe = ref false (* whether to fall back on static build only *) and c_libs = ref [] (* libs to pass to mksharedlib and jocamlc -cclib *) and c_opts = ref [] (* options to pass to mksharedlib and jocamlc -ccopt *) and ld_opts = ref [] (* options to pass only to the linker *) -and jocamlc = ref (Filename.concat bindir "jocamlc") -and jocamlopt = ref (Filename.concat bindir "jocamlopt") +and jocamlc = ref (compiler_path "jocamlc") +and jocamlopt = ref (compiler_path "jocamlopt") + and output = ref "a" (* Output name for Caml part of library *) and output_c = ref "" (* Output name for C part of library *) and rpath = ref [] (* rpath options *) @@ -124,9 +130,8 @@ let parse_arguments argv = done; List.iter (fun r -> r := List.rev !r) - [ bytecode_objs; native_objs; c_objs; caml_libs; caml_opts; + [ bytecode_objs; native_objs; caml_libs; caml_opts; c_libs; c_objs; c_opts; ld_opts; rpath ]; - (* On retourne deux fois c_objs ?? -- AF *) if !output_c = "" then output_c := !output @@ -188,7 +193,7 @@ let make_rpath flag = else flag ^ String.concat ":" (make_set !rpath) let make_rpath_ccopt flag = - if !rpath = [] || flag = "" + if !rpath = [] || flag = "" then "" else "-ccopt " ^ flag ^ String.concat ":" (make_set !rpath) @@ -204,10 +209,10 @@ let prepostfix pre name post = let transl_path s = match Sys.os_type with | "Win32" -> - let rec aux i = - if i = String.length s || s.[i] = ' ' then s - else (if s.[i] = '/' then s.[i] <- '\\'; aux (i + 1)) - in aux 0 + let rec aux i = + if i = String.length s || s.[i] = ' ' then s + else (if s.[i] = '/' then s.[i] <- '\\'; aux (i + 1)) + in aux 0 | _ -> s let build_libs () = diff --git a/typing/ctype.ml b/typing/ctype.ml index ceb3fe04b9..95d0783dfc 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -3381,39 +3381,29 @@ let nondep_type env id ty = let nondep_type_decl env mid id is_covariant decl = try let params = List.map (nondep_type_rec env mid) decl.type_params in - let decl = - { type_params = params; - type_arity = decl.type_arity; - type_kind = - begin try - match decl.type_kind with - Type_abstract -> - Type_abstract - | Type_variant cstrs -> - Type_variant(List.map - (fun (c, tl) -> (c, List.map (nondep_type_rec env mid) tl)) - cstrs) - | Type_record(lbls, rep) -> - Type_record( - List.map - (fun (c, mut, t) -> (c, mut, nondep_type_rec env mid t)) - lbls, - rep) - with Not_found when is_covariant -> - Type_abstract - end; - type_manifest = - begin try - match decl.type_manifest with - None -> None - | Some ty -> - Some (unroll_abbrev id params (nondep_type_rec env mid ty)) - with Not_found when is_covariant -> - None - end; - type_private = decl.type_private; - type_variance = decl.type_variance; - } + let tk = + try match decl.type_kind with + Type_abstract -> + Type_abstract + | Type_variant cstrs -> + Type_variant + (List.map + (fun (c, tl) -> (c, List.map (nondep_type_rec env mid) tl)) + cstrs) + | Type_record(lbls, rep) -> + Type_record + (List.map + (fun (c, mut, t) -> (c, mut, nondep_type_rec env mid t)) + lbls, + rep) + with Not_found when is_covariant -> Type_abstract + and tm = + try match decl.type_manifest with + None -> None + | Some ty -> + Some (unroll_abbrev id params (nondep_type_rec env mid ty)) + with Not_found when is_covariant -> + None in cleanup_types (); List.iter unmark_type decl.type_params; @@ -3428,7 +3418,18 @@ let nondep_type_decl env mid id is_covariant decl = None -> () | Some ty -> unmark_type ty end; - decl + let priv = + match tm with + | Some ty when Btype.has_constr_row ty -> Private + | _ -> decl.type_private + in + { type_params = params; + type_arity = decl.type_arity; + type_kind = tk; + type_manifest = tm; + type_private = priv; + type_variance = decl.type_variance; + } with Not_found -> cleanup_types (); raise Not_found diff --git a/typing/includecore.ml b/typing/includecore.ml index 1550488721..16c048b5c3 100644 --- a/typing/includecore.ml +++ b/typing/includecore.ml @@ -40,7 +40,8 @@ let value_descriptions env vd1 vd2 = let private_flags decl1 decl2 = match decl1.type_private, decl2.type_private with | Private, Public -> - decl2.type_kind = Type_abstract && decl2.type_manifest = None + decl2.type_kind = Type_abstract && + (decl2.type_manifest = None || decl1.type_kind <> Type_abstract) | _, _ -> true (* Inclusion between manifest types (particularly for private row types) *) diff --git a/typing/typecore.ml b/typing/typecore.ml index 694c68519e..57f793c7e0 100644 --- a/typing/typecore.ml +++ b/typing/typecore.ml @@ -938,7 +938,7 @@ let type_format loc fmt = and scan_conversion i j = if j >= len then incomplete_format fmt else match fmt.[j] with - | '%' | '!' -> scan_format (j + 1) + | '%' | '!' | ',' -> scan_format (j + 1) | 's' | 'S' -> conversion j Predef.type_string | '[' -> let j = range_closing_index fmt j in diff --git a/typing/typedecl.ml b/typing/typedecl.ml index 8bad0ef504..b69a2f8cf6 100644 --- a/typing/typedecl.ml +++ b/typing/typedecl.ml @@ -184,11 +184,7 @@ let transl_declaration env (name, sdecl) id = None -> None | Some sty -> let no_row = not (is_fixed_type sdecl) in - let ty = - transl_simple_type env no_row sty in - if Ctype.cyclic_abbrev env id ty then - raise(Error(sdecl.ptype_loc, Recursive_abbrev name)); - Some ty + Some (transl_simple_type env no_row sty) end; type_variance = List.map (fun _ -> true, true, true) params; } in @@ -200,12 +196,19 @@ let transl_declaration env (name, sdecl) id = raise(Error(loc, Unconsistent_constraint tr))) cstrs; Ctype.end_def (); + (* Add abstract row *) if is_fixed_type sdecl then begin let (p, _) = try Env.lookup_type (Longident.Lident(Ident.name id ^ "#row")) env with Not_found -> assert false in set_fixed_row env sdecl.ptype_loc p decl end; + (* Check for cyclic abbreviations *) + begin match decl.type_manifest with None -> () + | Some ty -> + if Ctype.cyclic_abbrev env id ty then + raise(Error(sdecl.ptype_loc, Recursive_abbrev name)); + end; (id, decl) (* Generalize a type declaration *) diff --git a/typing/typetexp.ml b/typing/typetexp.ml index ec2b7ed8df..52046b661e 100644 --- a/typing/typetexp.ml +++ b/typing/typetexp.ml @@ -39,6 +39,7 @@ type error = | Variant_tags of string * string | Invalid_variable_name of string | Cannot_quantify of string * type_expr + | Repeated_method_label of string exception Error of Location.t * error @@ -156,7 +157,7 @@ let rec transl_type env policy styp = end; constr | Ptyp_object fields -> - newobj (transl_fields env policy fields) + newobj (transl_fields env policy [] fields) | Ptyp_class(lid, stl, present) -> let (path, decl, is_variant) = try @@ -384,15 +385,16 @@ let rec transl_type env policy styp = unify_var env (newvar()) ty'; ty' -and transl_fields env policy = +and transl_fields env policy seen = function [] -> newty Tnil | {pfield_desc = Pfield_var}::_ -> if policy = Univars then new_pre_univar () else newvar () - | {pfield_desc = Pfield(s, e)}::l -> + | {pfield_desc = Pfield(s, e); pfield_loc = loc}::l -> + if List.mem s seen then raise (Error (loc, Repeated_method_label s)); let ty1 = transl_type env policy e in - let ty2 = transl_fields env policy l in + let ty2 = transl_fields env policy (s::seen) l in newty (Tfield (s, Fpresent, ty1, ty2)) @@ -557,3 +559,6 @@ let report_error ppf = function (if v.desc = Tvar then "it escapes this scope" else if v.desc = Tunivar then "it is aliased to another variable" else "it is not a variable") + | Repeated_method_label s -> + fprintf ppf "@[This is the second method `%s' of this object type.@ %s@]" + s "Multiple occurences are not allowed." diff --git a/typing/typetexp.mli b/typing/typetexp.mli index ba3abaa412..49a280f768 100644 --- a/typing/typetexp.mli +++ b/typing/typetexp.mli @@ -54,6 +54,7 @@ type error = | Variant_tags of string * string | Invalid_variable_name of string | Cannot_quantify of string * Types.type_expr + | Repeated_method_label of string exception Error of Location.t * error |