fusion des changements 3.09.2 -> 3.09.3

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@7619 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Damien Doligez 2006-09-20 11:14:37 +00:00
parent 403f1e1a34
commit fbea66a95e
63 changed files with 3494 additions and 2071 deletions

50
.depend
View File

@ -62,8 +62,8 @@ typing/includeclass.cmi: typing/types.cmi typing/typedtree.cmi typing/env.cmi \
typing/ctype.cmi
typing/includecore.cmi: typing/types.cmi typing/typedtree.cmi \
typing/ident.cmi typing/env.cmi
typing/includemod.cmi: typing/types.cmi typing/typedtree.cmi typing/ident.cmi \
typing/env.cmi typing/ctype.cmi
typing/includemod.cmi: typing/types.cmi typing/typedtree.cmi typing/path.cmi \
typing/ident.cmi typing/env.cmi typing/ctype.cmi
typing/mtype.cmi: typing/types.cmi typing/path.cmi typing/ident.cmi \
typing/env.cmi
typing/oprint.cmi: typing/outcometree.cmi
@ -112,11 +112,11 @@ typing/datarepr.cmx: typing/types.cmx typing/predef.cmx utils/misc.cmx \
typing/env.cmo: typing/types.cmi utils/tbl.cmi typing/subst.cmi \
typing/predef.cmi typing/path.cmi utils/misc.cmi parsing/longident.cmi \
typing/ident.cmi typing/datarepr.cmi utils/consistbl.cmi utils/config.cmi \
typing/btype.cmi parsing/asttypes.cmi typing/env.cmi
utils/clflags.cmi typing/btype.cmi parsing/asttypes.cmi typing/env.cmi
typing/env.cmx: typing/types.cmx utils/tbl.cmx typing/subst.cmx \
typing/predef.cmx typing/path.cmx utils/misc.cmx parsing/longident.cmx \
typing/ident.cmx typing/datarepr.cmx utils/consistbl.cmx utils/config.cmx \
typing/btype.cmx parsing/asttypes.cmi typing/env.cmi
utils/clflags.cmx typing/btype.cmx parsing/asttypes.cmi typing/env.cmi
typing/ident.cmo: typing/ident.cmi
typing/ident.cmx: typing/ident.cmi
typing/includeclass.cmo: typing/types.cmi typing/printtyp.cmi \
@ -443,8 +443,8 @@ asmcomp/asmlink.cmi: asmcomp/compilenv.cmi
asmcomp/clambda.cmi: bytecomp/lambda.cmi typing/ident.cmi \
parsing/asttypes.cmi
asmcomp/closure.cmi: bytecomp/lambda.cmi asmcomp/clambda.cmi
asmcomp/cmmgen.cmi: asmcomp/cmm.cmi asmcomp/clambda.cmi
asmcomp/cmm.cmi: typing/ident.cmi
asmcomp/cmmgen.cmi: asmcomp/cmm.cmi asmcomp/clambda.cmi
asmcomp/codegen.cmi: asmcomp/cmm.cmi
asmcomp/comballoc.cmi: asmcomp/mach.cmi
asmcomp/compilenv.cmi: typing/ident.cmi asmcomp/clambda.cmi
@ -458,8 +458,8 @@ asmcomp/printlinear.cmi: asmcomp/linearize.cmi
asmcomp/printmach.cmi: asmcomp/reg.cmi asmcomp/mach.cmi
asmcomp/proc.cmi: asmcomp/reg.cmi asmcomp/mach.cmi
asmcomp/reg.cmi: asmcomp/cmm.cmi
asmcomp/reloadgen.cmi: asmcomp/reg.cmi asmcomp/mach.cmi
asmcomp/reload.cmi: asmcomp/mach.cmi
asmcomp/reloadgen.cmi: asmcomp/reg.cmi asmcomp/mach.cmi
asmcomp/schedgen.cmi: asmcomp/mach.cmi asmcomp/linearize.cmi
asmcomp/scheduling.cmi: asmcomp/linearize.cmi
asmcomp/selectgen.cmi: utils/tbl.cmi asmcomp/reg.cmi asmcomp/mach.cmi \
@ -523,6 +523,8 @@ asmcomp/closure.cmx: utils/tbl.cmx bytecomp/switch.cmx typing/primitive.cmx \
utils/misc.cmx bytecomp/lambda.cmx typing/ident.cmx asmcomp/compilenv.cmx \
utils/clflags.cmx asmcomp/clambda.cmx parsing/asttypes.cmi \
asmcomp/closure.cmi
asmcomp/cmm.cmo: typing/ident.cmi asmcomp/arch.cmo asmcomp/cmm.cmi
asmcomp/cmm.cmx: typing/ident.cmx asmcomp/arch.cmx asmcomp/cmm.cmi
asmcomp/cmmgen.cmo: typing/types.cmi bytecomp/switch.cmi asmcomp/proc.cmi \
typing/primitive.cmi utils/misc.cmi bytecomp/lambda.cmi typing/ident.cmi \
utils/config.cmi asmcomp/compilenv.cmi asmcomp/cmm.cmi utils/clflags.cmi \
@ -533,8 +535,6 @@ asmcomp/cmmgen.cmx: typing/types.cmx bytecomp/switch.cmx asmcomp/proc.cmx \
utils/config.cmx asmcomp/compilenv.cmx asmcomp/cmm.cmx utils/clflags.cmx \
asmcomp/clambda.cmx parsing/asttypes.cmi asmcomp/arch.cmx \
asmcomp/cmmgen.cmi
asmcomp/cmm.cmo: typing/ident.cmi asmcomp/arch.cmo asmcomp/cmm.cmi
asmcomp/cmm.cmx: typing/ident.cmx asmcomp/arch.cmx asmcomp/cmm.cmi
asmcomp/codegen.cmo: asmcomp/split.cmi asmcomp/spill.cmi asmcomp/reload.cmi \
asmcomp/reg.cmi asmcomp/printmach.cmi asmcomp/printlinear.cmi \
asmcomp/printcmm.cmi asmcomp/liveness.cmi asmcomp/linearize.cmi \
@ -555,16 +555,16 @@ asmcomp/compilenv.cmo: utils/misc.cmi typing/ident.cmi typing/env.cmi \
utils/config.cmi asmcomp/clambda.cmi asmcomp/compilenv.cmi
asmcomp/compilenv.cmx: utils/misc.cmx typing/ident.cmx typing/env.cmx \
utils/config.cmx asmcomp/clambda.cmx asmcomp/compilenv.cmi
asmcomp/emitaux.cmo: asmcomp/emitaux.cmi
asmcomp/emitaux.cmx: asmcomp/emitaux.cmi
asmcomp/emit.cmo: asmcomp/reg.cmi asmcomp/proc.cmi utils/misc.cmi \
asmcomp/mach.cmi parsing/location.cmi asmcomp/linearize.cmi \
asmcomp/emitaux.cmi utils/config.cmi asmcomp/compilenv.cmi \
asmcomp/cmm.cmi utils/clflags.cmi asmcomp/arch.cmo asmcomp/emit.cmi
asmcomp/cmm.cmi asmcomp/arch.cmo asmcomp/emit.cmi
asmcomp/emit.cmx: asmcomp/reg.cmx asmcomp/proc.cmx utils/misc.cmx \
asmcomp/mach.cmx parsing/location.cmx asmcomp/linearize.cmx \
asmcomp/emitaux.cmx utils/config.cmx asmcomp/compilenv.cmx \
asmcomp/cmm.cmx utils/clflags.cmx asmcomp/arch.cmx asmcomp/emit.cmi
asmcomp/cmm.cmx asmcomp/arch.cmx asmcomp/emit.cmi
asmcomp/emitaux.cmo: asmcomp/emitaux.cmi
asmcomp/emitaux.cmx: asmcomp/emitaux.cmi
asmcomp/interf.cmo: asmcomp/reg.cmi asmcomp/proc.cmi utils/misc.cmi \
asmcomp/mach.cmi asmcomp/interf.cmi
asmcomp/interf.cmx: asmcomp/reg.cmx asmcomp/proc.cmx utils/misc.cmx \
@ -599,34 +599,32 @@ asmcomp/proc.cmx: asmcomp/reg.cmx utils/misc.cmx asmcomp/mach.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/reload.cmo: asmcomp/reloadgen.cmi asmcomp/reload.cmi
asmcomp/reload.cmx: asmcomp/reloadgen.cmx asmcomp/reload.cmi
asmcomp/reloadgen.cmo: asmcomp/reg.cmi utils/misc.cmi asmcomp/mach.cmi \
asmcomp/reloadgen.cmi
asmcomp/reloadgen.cmx: asmcomp/reg.cmx utils/misc.cmx asmcomp/mach.cmx \
asmcomp/reloadgen.cmi
asmcomp/reload.cmo: asmcomp/reloadgen.cmi asmcomp/reg.cmi asmcomp/mach.cmi \
asmcomp/cmm.cmi asmcomp/arch.cmo asmcomp/reload.cmi
asmcomp/reload.cmx: asmcomp/reloadgen.cmx asmcomp/reg.cmx asmcomp/mach.cmx \
asmcomp/cmm.cmx asmcomp/arch.cmx asmcomp/reload.cmi
asmcomp/schedgen.cmo: asmcomp/reg.cmi utils/misc.cmi asmcomp/mach.cmi \
asmcomp/linearize.cmi asmcomp/cmm.cmi asmcomp/arch.cmo \
asmcomp/schedgen.cmi
asmcomp/schedgen.cmx: asmcomp/reg.cmx utils/misc.cmx asmcomp/mach.cmx \
asmcomp/linearize.cmx asmcomp/cmm.cmx asmcomp/arch.cmx \
asmcomp/schedgen.cmi
asmcomp/scheduling.cmo: asmcomp/schedgen.cmi asmcomp/scheduling.cmi
asmcomp/scheduling.cmx: asmcomp/schedgen.cmx asmcomp/scheduling.cmi
asmcomp/scheduling.cmo: asmcomp/schedgen.cmi asmcomp/mach.cmi \
asmcomp/arch.cmo asmcomp/scheduling.cmi
asmcomp/scheduling.cmx: asmcomp/schedgen.cmx asmcomp/mach.cmx \
asmcomp/arch.cmx asmcomp/scheduling.cmi
asmcomp/selectgen.cmo: utils/tbl.cmi asmcomp/reg.cmi asmcomp/proc.cmi \
utils/misc.cmi asmcomp/mach.cmi typing/ident.cmi asmcomp/cmm.cmi \
asmcomp/arch.cmo asmcomp/selectgen.cmi
asmcomp/selectgen.cmx: utils/tbl.cmx asmcomp/reg.cmx asmcomp/proc.cmx \
utils/misc.cmx asmcomp/mach.cmx typing/ident.cmx asmcomp/cmm.cmx \
asmcomp/arch.cmx asmcomp/selectgen.cmi
asmcomp/selection.cmo: asmcomp/selectgen.cmi asmcomp/reg.cmi asmcomp/proc.cmi \
utils/misc.cmi asmcomp/mach.cmi asmcomp/cmm.cmi asmcomp/arch.cmo \
asmcomp/selection.cmi
asmcomp/selection.cmx: asmcomp/selectgen.cmx asmcomp/reg.cmx asmcomp/proc.cmx \
utils/misc.cmx asmcomp/mach.cmx asmcomp/cmm.cmx asmcomp/arch.cmx \
asmcomp/selection.cmi
asmcomp/selection.cmo: asmcomp/selectgen.cmi asmcomp/reg.cmi utils/misc.cmi \
asmcomp/mach.cmi asmcomp/cmm.cmi asmcomp/arch.cmo asmcomp/selection.cmi
asmcomp/selection.cmx: asmcomp/selectgen.cmx asmcomp/reg.cmx utils/misc.cmx \
asmcomp/mach.cmx asmcomp/cmm.cmx asmcomp/arch.cmx asmcomp/selection.cmi
asmcomp/spill.cmo: asmcomp/reg.cmi asmcomp/proc.cmi utils/misc.cmi \
asmcomp/mach.cmi asmcomp/spill.cmi
asmcomp/spill.cmx: asmcomp/reg.cmx asmcomp/proc.cmx utils/misc.cmx \
@ -665,8 +663,6 @@ driver/errors.cmx: utils/warnings.cmx typing/typetexp.cmx typing/typemod.cmx \
parsing/location.cmx parsing/lexer.cmx typing/includemod.cmx \
typing/env.cmx typing/ctype.cmx bytecomp/bytepackager.cmx \
bytecomp/bytelink.cmx bytecomp/bytelibrarian.cmx driver/errors.cmi
driver/main_args.cmo: driver/main_args.cmi
driver/main_args.cmx: driver/main_args.cmi
driver/main.cmo: utils/warnings.cmi utils/misc.cmi driver/main_args.cmi \
driver/errors.cmi utils/config.cmi driver/compile.cmi utils/clflags.cmi \
bytecomp/bytepackager.cmi bytecomp/bytelink.cmi \
@ -675,6 +671,8 @@ driver/main.cmx: utils/warnings.cmx utils/misc.cmx driver/main_args.cmx \
driver/errors.cmx utils/config.cmx driver/compile.cmx utils/clflags.cmx \
bytecomp/bytepackager.cmx bytecomp/bytelink.cmx \
bytecomp/bytelibrarian.cmx driver/main.cmi
driver/main_args.cmo: driver/main_args.cmi
driver/main_args.cmx: driver/main_args.cmi
driver/optcompile.cmo: utils/warnings.cmi typing/unused_var.cmi \
typing/typemod.cmi typing/typedtree.cmi bytecomp/translmod.cmi \
bytecomp/simplif.cmi typing/printtyp.cmi bytecomp/printlambda.cmi \

39
Changes
View File

@ -7,6 +7,43 @@ Language features:
definition replaces the old one, rather than creating a new
variable.
Objective Caml 3.09.3:
----------------------
Bug fixes:
- ocamldoc: -using modtype constraint to filter module elements displayed
in doc PR#4016
- ocamldoc: error in merging of top dependencies of modules PR#4007
- ocamldoc: -dot-colors has no effect PR#3981
- ocamdloc: missing crossref in text from intro files PR#4066
- compilers: segfault with recursive modules PR#4008
- compilers: infinite loop when compiling objects PR#4018
- compilers: bad error message when signature mismatch PR#4001
- compilers: infinite loop with -rectypes PR#3999
- compilers: contravariance bug in private rows
- compilers: unsafe cast with polymorphic exception PR#4002
- native compiler: bad assembly code generated for AMD64 PR#4067
- native compiler: stack alignment problems on MacOSX/i386 PR#4036
- stdlib: crash in marshalling PR#4030
- stdlib: crash when closing a channel twice PR#4039
- stdlib: memory leak in Sys.readdir PR#4093
- C interface: better definition of CAMLreturn PR#4068
- otherlibs/unix: crash in gethostbyname PR#3043
- tools: subtle problem with unset in makefile PR#4048
- camlp4: install pa_o_fast.o PR#3812
- camlp4: install more modules PR#3689
New features:
- ocamldoc: name resolution in cross-referencing {!name}: if name is not
found, then it is searched in the parent module/class, and in the parent
of the parent, and so on until it is found.
- ocamldoc: new option -short-functors to use a short form to display
functors in html generator PR#4017
- ocamlprof: added "-version" option
Objective Caml 3.09.2:
----------------------
@ -31,7 +68,7 @@ Bug fixes:
- stdlib: Filename.dirname/basename wrong on Win32 PR#3933
- stdlib: incomplete documentation of Pervasives.abs PR#3967
- stdlib: Printf bugs PR#3902, PR#3955
- tools/checkstack.c missing include
- tools/checkstack.c: missing include
- yacc: crash when given argument "-" PR#3956
New features:

25
README
View File

@ -22,10 +22,10 @@ native-code compiler currently runs on the following platforms:
Tier 1 (actively used and maintained by the core Caml team):
AMD64 (Opteron) Linux
IA32 (Pentium) Linux, FreeBSD, MS Windows
IA32 (Pentium) Linux, FreeBSD, MacOS X, MS Windows
PowerPC MacOS X
Tier 2 (maintained but less actively, with help from users):
Tier 2 (maintained when possible, with help from users):
Alpha Digital Unix/Compaq Tru64, Linux, all BSD
AMD64 FreeBSD, OpenBSD
@ -78,9 +78,9 @@ CONTENTS:
COPYRIGHT:
All files marked "Copyright INRIA" in this distribution are copyright
1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Institut National de
Recherche en Informatique et en Automatique (INRIA) and distributed
under the conditions stated in file LICENSE.
1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Institut National de Recherche en Informatique et en Automatique
(INRIA) and distributed under the conditions stated in file LICENSE.
INSTALLATION:
@ -112,11 +112,9 @@ Messages to the list should be sent to:
caml-list@inria.fr
If you wish to subscribe to this list, please send a message to:
You can subscribe to this list via the Web interface at
caml-list-request@inria.fr
with the single word "subscribe" in the body of the message.
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives of the list are available on the Web site http://caml.inria.fr/
@ -126,11 +124,7 @@ including Caml.
BUG REPORTS AND USER FEEDBACK:
Send your bug reports by E-mail to:
caml-bugs@inria.fr
or report them using the Web interface to the bug-tracking system
Please report bugs using the Web interface to the bug-tracking system
at http://caml.inria.fr/bin/caml-bugs
To be effective, bug reports should include a complete program
@ -139,3 +133,6 @@ configuration you are using (machine type, etc).
You can also contact the implementors directly at caml@inria.fr.
----
$Id$

View File

@ -43,24 +43,20 @@ The remainder of this document gives more information on each port.
REQUIREMENTS:
This port runs under MS Windows NT, 2000 and XP.
Windows 95, 98 and ME are also supported, but less reliably.
Windows 95, 98 and ME are no longer supported.
The base bytecode system (ocamlc, ocaml, ocamllex, ocamlyacc, ...)
runs without any additional tools.
Statically linking Caml bytecode with C code (ocamlc -custom) requires the
Microsoft Visual C++ compiler. Dynamic loading of DLLs is
supported out of the box, without additional software.
Microsoft Visual C++ compiler (items [1] and [2] in the section
"third-party software" below). Dynamic loading of DLLs is supported
out of the box, without additional software.
The native-code compiler (ocamlopt) requires Visual C++ and the
Microsoft assembler MASM version 6.11 or later. MASM can be
downloaded for free from Microsoft's Web site; for directions, see
http://www.easystreet.com/~jkirwan/pctools.html
or http://www2.dgsys.com/~raymoon/faq/masm.html
or the comp.lang.asm.x86 FAQ.
The native-code compiler (ocamlopt) requires Visual C++ (items [1], [2])
and the Microsoft assembler MASM (item [3]).
The LablTk GUI requires Tcl/Tk 8.3. Windows binaries are
available from http://prdownloads.sourceforge.net/tcl/tcl832.exe.
The LablTk GUI requires Tcl/Tk 8.3 (item [4]).
INSTALLATION:
@ -68,20 +64,6 @@ INSTALLATION:
The binary distribution is a self-installing executable archive.
Just run it and it should install OCaml automatically.
If you are using Windows 95, 98 or ME, you need to adjust environment
variables as follows:
- add the "bin" subdirectory of the OCaml installation directory
to the PATH variable;
- set the OCAMLLIB variable to the "lib" subdirectory of the
OCaml installation directory.
For instance, if you installed OCaml in C:\Program Files\Objective Caml,
add the following two lines at the end of C:\autoexec.bat:
set PATH=%PATH%;"C:\Program Files\Objective Caml\bin"
set OCAMLLIB=C:\Program Files\Objective Caml\lib
No such tweaking of environment variables is needed under NT, 2000 and XP.
To run programs that use the LablTK GUI, the directory where the
DLLs tk83.dll and tcl83.dll were installed (by the Tcl/Tk
installer) must be added to the PATH environment variable.
@ -93,6 +75,26 @@ environment variable. E.g. if Tcl/Tk was installed in C:\tcl, add
"C:\tcl\lib" to the LIB environment variable.
THIRD-PARTY SOFTWARE:
[1] Visual C++ version 6 or later. We use Visual C++ 2003.
The free download Visual C++ 2005 Express Edition works under
Windows 2000, but not under Windows XP because of the "manifest"
annotations on DLLs, which are not yet supported by OCaml.
So, please stick with the 2003 edition for the time being.
[2] Windows header files and development libraries. We found them in
the Microsoft Windows Server 2003 SP1 Platform SDK, which can
be downloaded for free from http://www.microsoft.com/.
[3] MASM version 6.11 or later. MASM can be
downloaded for free from Microsoft's Web site; for directions, see
http://users.easystreet.com/jkirwan/new/pctools.html.
[4] TCL/TK version 8.3. Windows binaries are available from
http://prdownloads.sourceforge.net/tcl/tcl832.exe.
RECOMPILATION FROM THE SOURCES:
The command-line tools can be recompiled from the Unix source
@ -100,11 +102,9 @@ distribution (ocaml-X.YZ.tar.gz), which also contains the files modified
for Windows.
You will need the following software components to perform the recompilation:
- Windows NT, 2000, or XP (we advise against compiling under Windows 95/98/ME)
- Visual C++ version 6 or 7
- MASM version 6.11 (see above)
- The Cygwin port of GNU tools, available from http://cygwin.com/
- TCL/TK version 8.3 (for the LablTK GUI) (see above).
- Windows NT, 2000, or XP.
- Items [1], [2], [3] and [4] from the list of recommended software above.
- The Cygwin port of GNU tools, available from http://www.cygwin.com/
Remember to add the directory where the libraries tk83.lib and
tcl83.lib were installed (by the Tcl/Tk installer) to the LIB variable
@ -127,6 +127,7 @@ Finally, use "make -f Makefile.nt" to build the system, e.g.
make -f Makefile.nt world
make -f Makefile.nt bootstrap
make -f Makefile.nt opt
make -f Makefile.nt opt.opt
make -f Makefile.nt install
@ -167,8 +168,9 @@ runs without any additional tools.
The native-code compiler (ocamlopt), as well as static linking of
Caml bytecode with C code (ocamlc -custom), require
the Cygwin development tools, available at
http://sources.redhat.com/cygwin/
You will need to install at least the following Cygwin packages:
http://www.cygwin.com/
You will need to install at least the following Cygwin packages (use
the Setup tool from Cygwin):
binutils, gcc-core, gcc-mingw-core, mingw-runtime, w32-api.
Do *not* install the Mingw/MSYS development tools from www.mingw.org:
@ -184,20 +186,6 @@ INSTALLATION:
The binary distribution is a self-installing executable archive.
Just run it and it should install OCaml automatically.
If you are using Windows 95, 98 or ME, you need to adjust environment
variables as follows:
- add the "bin" subdirectory of the OCaml installation directory
to the PATH variable;
- set the OCAMLLIB variable to the "lib" subdirectory of the
OCaml installation directory.
For instance, if you installed OCaml in C:\Program Files\Objective Caml,
add the following two lines at the end of C:\autoexec.bat:
set PATH=%PATH%;"C:\Program Files\Objective Caml\bin"
set OCAMLLIB=C:\Program Files\Objective Caml\lib
No such tweaking of environment variables is needed under NT, 2000 and XP.
To run programs that use the LablTK GUI, the directory where the
DLLs tk83.dll and tcl83.dll were installed (by the Tcl/Tk
installer) must be added to the PATH environment variable.
@ -212,7 +200,7 @@ environment variable. E.g. if Tcl/Tk was installed in C:\tcl, add
RECOMPILATION FROM THE SOURCES:
You will need the following software components to perform the recompilation:
- Windows NT, 2000, or XP (we advise against compiling under Windows 95/98/ME)
- Windows NT, 2000, or XP.
- Cygwin: http://sourceware.cygnus.com/cygwin/
- TCL/TK version 8.3 (see above).
@ -258,15 +246,16 @@ REQUIREMENTS:
This port requires the Cygwin environment from Cygnus/RedHat, which
is freely available at:
http://sources.redhat.com/cygwin/
http://www.cygwin.com/
This port runs under all versions of MS Windows supported by Cygwin.
INSTALLATION:
For technical reasons, no binary distribution of this port is available.
You need to recompile from the source distribution.
We do not distribute binaries for this port, but they can be found
in the Cygwin distribution (use the Setup tool from Cygwin and select
the OCaml packages). Alternatively, recompile from the source distribution.
RECOMPILATION FROM THE SOURCES:

View File

@ -19,7 +19,7 @@ open Mach
(* Reloading for the AMD64 *)
(* Summary of instruction set constraints:
(* Summary of instruction set constraints:
"S" means either stack or register, "R" means register only.
Operation Res Arg1 Arg2
Imove R S
@ -73,12 +73,6 @@ method reload_operation op arg res =
(* This add will be turned into a lea; args and results must be
in registers *)
super#reload_operation op arg res
| Iconst_symbol _ ->
if !pic_code
then super#reload_operation op arg res
else (arg, res)
| Iconst_int n when n >= -0x80000000n && n <= 0x7FFFFFFFn ->
(arg, res)
| Iintop(Idiv | Imod | Ilsl | Ilsr | Iasr)
| Iintop_imm(_, _) ->
(* The argument(s) and results can be either in register or on stack *)
@ -94,6 +88,14 @@ method reload_operation op arg res =
| Ifloatofint | Iintoffloat ->
(* Result must be in register, but argument can be on stack *)
(arg, (if stackp res.(0) then [| self#makereg res.(0) |] else res))
| Iconst_int n ->
if n <= 0x7FFFFFFFn && n >= -0x80000000n
then (arg, res)
else super#reload_operation op arg res
| Iconst_symbol _ ->
if !pic_code
then super#reload_operation op arg res
else (arg, res)
| _ -> (* Other operations: all args and results in registers *)
super#reload_operation op arg res

View File

@ -124,7 +124,7 @@ let calling_conventions first_int last_int first_float last_float make_stack
ofs := !ofs + size_float
end
done;
(loc, max 0 !ofs)
(loc, Misc.align stack_alignment (max 0 !ofs))
let incoming ofs = Incoming ofs
let outgoing ofs = Outgoing ofs

File diff suppressed because it is too large Load Diff

View File

@ -181,9 +181,8 @@ clean::
rm -f *.o *.a *~
depend: $(COBJS:.o=.c) ${LINKEDFILES}
gcc -MM $(FLAGS) *.c > .depend
-gcc -MM $(FLAGS) *.c > .depend
gcc -MM $(FLAGS) -DDEBUG *.c | sed -e 's/\.o/.d.o/' >> .depend
gcc -MM $(FLAGS) -DDEBUG *.c | sed -e 's/\.o/.p.o/' >> .depend
include .depend

View File

@ -89,6 +89,7 @@ LBL(105):
pushl %ebx
pushl %eax
movl %esp, G(caml_gc_regs)
/* MacOSX note: 16-alignment of stack preserved at this point */
/* Call the garbage collector */
call G(caml_garbage_collection)
/* Restore all regs used by the code generator */
@ -116,7 +117,13 @@ LBL(100):
movl %eax, G(caml_last_return_address)
leal 4(%esp), %eax
movl %eax, G(caml_bottom_of_stack)
#ifdef SYS_macosx
subl $12, %esp /* 16-alignment */
#endif
call LBL(105)
#ifdef SYS_macosx
addl $12, %esp /* undo 16-alignment */
#endif
jmp G(caml_alloc1)
.align FUNCTION_ALIGN
@ -133,7 +140,13 @@ LBL(101):
movl %eax, G(caml_last_return_address)
leal 4(%esp), %eax
movl %eax, G(caml_bottom_of_stack)
#ifdef SYS_macosx
subl $12, %esp /* 16-alignment */
#endif
call LBL(105)
#ifdef SYS_macosx
addl $12, %esp /* undo 16-alignment */
#endif
jmp G(caml_alloc2)
.align FUNCTION_ALIGN
@ -150,7 +163,13 @@ LBL(102):
movl %eax, G(caml_last_return_address)
leal 4(%esp), %eax
movl %eax, G(caml_bottom_of_stack)
#ifdef SYS_macosx
subl $12, %esp /* 16-alignment */
#endif
call LBL(105)
#ifdef SYS_macosx
addl $12, %esp /* undo 16-alignment */
#endif
jmp G(caml_alloc3)
.align FUNCTION_ALIGN
@ -171,7 +190,13 @@ LBL(103):
movl %eax, G(caml_last_return_address)
leal 8(%esp), %eax
movl %eax, G(caml_bottom_of_stack)
#ifdef SYS_macosx
subl $8, %esp /* 16-alignment */
#endif
call LBL(105)
#ifdef SYS_macosx
addl $8, %esp /* undo 16-alignment */
#endif
popl %eax /* recover desired size */
jmp G(caml_allocN)

View File

@ -312,7 +312,7 @@ value caml_install_signal_handler(value signal_number, value action) /* ML */
CAMLlocal1 (res);
sig = caml_convert_signal_number(Int_val(signal_number));
if (sig < 0 || sig >= NSIG)
if (sig < 0 || sig >= NSIG)
caml_invalid_argument("Sys.signal: unavailable signal");
#ifdef POSIX_SIGNALS
switch(action) {

Binary file not shown.

Binary file not shown.

View File

@ -77,7 +77,8 @@ major_gc.o: major_gc.c compact.h config.h ../config/m.h ../config/s.h \
compatibility.h misc.h custom.h mlvalues.h fail.h finalise.h roots.h \
memory.h gc.h major_gc.h freelist.h minor_gc.h gc_ctrl.h weak.h
md5.o: md5.c alloc.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h fail.h md5.h io.h reverse.h
../config/s.h mlvalues.h fail.h md5.h io.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h reverse.h
memory.o: memory.c fail.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h freelist.h gc.h gc_ctrl.h major_gc.h memory.h \
minor_gc.h signals.h
@ -127,11 +128,8 @@ unix.o: unix.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
weak.o: weak.c alloc.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h fail.h memory.h gc.h major_gc.h freelist.h \
../config/s.h mlvalues.h fail.h major_gc.h freelist.h memory.h gc.h \
minor_gc.h
win32.o: win32.c memory.h compatibility.h config.h ../config/m.h \
../config/s.h gc.h mlvalues.h misc.h major_gc.h freelist.h minor_gc.h \
osdeps.h signals.h
alloc.d.o: alloc.c alloc.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h custom.h major_gc.h freelist.h memory.h gc.h \
minor_gc.h stacks.h
@ -213,7 +211,8 @@ major_gc.d.o: major_gc.c compact.h config.h ../config/m.h ../config/s.h \
compatibility.h misc.h custom.h mlvalues.h fail.h finalise.h roots.h \
memory.h gc.h major_gc.h freelist.h minor_gc.h gc_ctrl.h weak.h
md5.d.o: md5.c alloc.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h fail.h md5.h io.h reverse.h
../config/s.h mlvalues.h fail.h md5.h io.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h reverse.h
memory.d.o: memory.c fail.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h freelist.h gc.h gc_ctrl.h major_gc.h memory.h \
minor_gc.h signals.h
@ -263,8 +262,5 @@ unix.d.o: unix.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
weak.d.o: weak.c alloc.h compatibility.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h fail.h memory.h gc.h major_gc.h freelist.h \
../config/s.h mlvalues.h fail.h major_gc.h freelist.h memory.h gc.h \
minor_gc.h
win32.d.o: win32.c memory.h compatibility.h config.h ../config/m.h \
../config/s.h gc.h mlvalues.h misc.h major_gc.h freelist.h minor_gc.h \
osdeps.h signals.h

View File

@ -115,7 +115,7 @@ version.h : ../stdlib/sys.ml
@ if test -f $*.f.o; then mv $*.f.o $*.o; else :; fi
depend : prims.c opnames.h jumptbl.h version.h
gcc -MM $(BYTECCCOMPOPTS) *.c > .depend
gcc -MM $(BYTECCCOMPOPTS) -DDEBUG *.c | sed -e 's/\.o/.d.o/' >> .depend
-gcc -MM $(BYTECCCOMPOPTS) *.c > .depend
-gcc -MM $(BYTECCCOMPOPTS) -DDEBUG *.c | sed -e 's/\.o/.d.o/' >> .depend
include .depend

View File

@ -401,7 +401,7 @@ static void extern_rec(value v)
void (*serialize)(value v, uintnat * wsize_32,
uintnat * wsize_64)
= Custom_ops_val(v)->serialize;
if (serialize == NULL)
if (serialize == NULL)
extern_invalid_argument("output_value: abstract value (Custom)");
Write(CODE_CUSTOM);
writeblock(ident, strlen(ident) + 1);
@ -536,17 +536,23 @@ CAMLprim value caml_output_value_to_string(value v, value flags)
{
intnat len, ofs;
value res;
struct output_block * blk;
struct output_block * blk, * nextblk;
init_extern_output();
len = extern_value(v, flags);
/* PR#4030: it is prudent to save extern_output_first before allocating
the result, as in caml_output_val */
blk = extern_output_first;
res = caml_alloc_string(len);
for (ofs = 0, blk = extern_output_first; blk != NULL; blk = blk->next) {
ofs = 0;
while (blk != NULL) {
int n = blk->end - blk->data;
memmove(&Byte(res, ofs), blk->data, n);
ofs += n;
nextblk = blk->next;
free(blk);
blk = nextblk;
}
free_extern_output();
return res;
}
@ -701,7 +707,7 @@ CAMLexport void caml_serialize_block_float_8(void * data, intnat len)
memmove(extern_ptr, data, len * 8);
extern_ptr += len * 8;
#elif ARCH_FLOAT_ENDIANNESS == 0x76543210
{
{
unsigned char * p;
char * q;
for (p = data, q = extern_ptr; len > 0; len--, p += 8, q += 8)
@ -709,7 +715,7 @@ CAMLexport void caml_serialize_block_float_8(void * data, intnat len)
extern_ptr = q;
}
#else
{
{
unsigned char * p;
char * q;
for (p = data, q = extern_ptr; len > 0; len--, p += 8, q += 8)

View File

@ -278,8 +278,9 @@ CAMLextern struct caml__roots_block *caml_local_roots; /* defined in roots.c */
}while (0)
#define CAMLreturn(result) do{ \
value caml__temp_result = (result); \
caml_local_roots = caml__frame; \
return (result); \
return (caml__temp_result); \
}while(0)
#define CAMLnoreturn ((void) caml__frame)

View File

@ -72,7 +72,7 @@ CAMLexport void caml_sys_error(value arg)
CAMLparam1 (arg);
char * err;
CAMLlocal1 (str);
if (errno == EAGAIN || errno == EWOULDBLOCK) {
caml_raise_sys_blocked_io();
} else {
@ -233,7 +233,7 @@ CAMLprim value caml_sys_system_command(value command)
int status, retcode;
char *buf;
intnat len;
len = caml_string_length (command);
buf = caml_stat_alloc (len + 1);
memmove (buf, String_val (command), len + 1);
@ -311,7 +311,10 @@ CAMLprim value caml_sys_read_directory(value path)
struct ext_table tbl;
caml_ext_table_init(&tbl, 50);
if (caml_read_directory(String_val(path), &tbl) == -1) caml_sys_error(path);
if (caml_read_directory(String_val(path), &tbl) == -1){
caml_ext_table_free(&tbl, 1);
caml_sys_error(path);
}
caml_ext_table_add(&tbl, NULL);
result = caml_copy_string_array((char const **) tbl.contents);
caml_ext_table_free(&tbl, 1);

View File

@ -1,3 +1,15 @@
#########################################################################
# #
# Objective Caml #
# #
# Nicolas Pouillard, projet Gallium, INRIA Rocquencourt #
# #
# Copyright 2006 Institut National de Recherche en Informatique et #
# en Automatique. All rights reserved. This file is distributed #
# under the terms of the Q Public License version 1.0. #
# #
#########################################################################
# $Id$
OCAMLRUN=CAML_LD_LIBRARY_PATH=../otherlibs/unix ../boot/ocamlrun
@ -31,6 +43,8 @@ uninstall:
rm -rf "$(LIBDIR)/camlp4"
cd "$(BINDIR)"; rm -f *camlp4*
depend:
# Normal bootstrap
bootstrap: backup promote clean all compare
@ -52,5 +66,5 @@ compare:
fi
.PHONY: clean install all uninstall backup restore boot-clean promote-debug \
promote compare opt doc cleanall all-local clean-local
promote compare opt doc cleanall all-local clean-local depend

View File

@ -45,7 +45,7 @@ EXE=.exe
########## Configuration for the bytecode compiler
### Which C compiler to use for the bytecode interpreter.
BYTECC=cl /nologo
BYTECC=cl /nologo -D_CRT_SECURE_NO_DEPRECATE
### Additional compile-time options for $(BYTECC). (For static linking.)
BYTECCCOMPOPTS=/Ox /MT
@ -67,7 +67,7 @@ CPP=cl /nologo /EP
MKDLL=link /nologo /dll /out:$(1) /implib:$(2) $(3)
### How to build a static library
MKLIB=link /lib /nologo /debugtype:CV /out:$(1) $(2)
MKLIB=link /lib /nologo /out:$(1) $(2)
### Canonicalize the name of a system library
SYSLIB=$(1).lib
@ -90,7 +90,7 @@ MODEL=default
SYSTEM=win32
### Which C compiler to use for the native-code compiler.
NATIVECC=cl /nologo
NATIVECC=cl /nologo -D_CRT_SECURE_NO_DEPRECATE
### Additional compile-time options for $(NATIVECC).
NATIVECCCOMPOPTS=/Ox /MT
@ -99,7 +99,7 @@ NATIVECCCOMPOPTS=/Ox /MT
NATIVECCLINKOPTS=/MT
### Build partially-linked object file
PARTIALLD=lib /nologo /debugtype:cv
PARTIALLD=lib /nologo
PACKLD=ld -r --oformat pe-i386
############# Configuration for the contributed libraries

View File

@ -1,60 +1,64 @@
breakpoints.cmi: primitives.cmi ../bytecomp/instruct.cmi
checkpoints.cmi: primitives.cmi debugcom.cmi
debugcom.cmi: primitives.cmi
breakpoints.cmi: ./primitives.cmi ../bytecomp/instruct.cmi
checkpoints.cmi: ./primitives.cmi ./debugcom.cmi
debugcom.cmi: ./primitives.cmi
envaux.cmi: ../typing/path.cmi ../bytecomp/instruct.cmi ../typing/env.cmi
eval.cmi: ../typing/types.cmi ../typing/path.cmi parser_aux.cmi \
eval.cmi: ../typing/types.cmi ../typing/path.cmi ./parser_aux.cmi \
../parsing/longident.cmi ../bytecomp/instruct.cmi ../typing/ident.cmi \
../typing/env.cmi debugcom.cmi
../typing/env.cmi ./debugcom.cmi
events.cmi: ../bytecomp/instruct.cmi
frames.cmi: primitives.cmi ../bytecomp/instruct.cmi
input_handling.cmi: primitives.cmi
lexer.cmi: parser.cmi
loadprinter.cmi: ../parsing/longident.cmi dynlink.cmi
parser_aux.cmi: primitives.cmi ../parsing/longident.cmi
parser.cmi: parser_aux.cmi ../parsing/longident.cmi
pattern_matching.cmi: ../typing/typedtree.cmi parser_aux.cmi debugcom.cmi
frames.cmi: ./primitives.cmi ../bytecomp/instruct.cmi
input_handling.cmi: ./primitives.cmi
lexer.cmi: ./parser.cmi
loadprinter.cmi: ../parsing/longident.cmi ./dynlink.cmi
parser.cmi: ./parser_aux.cmi ../parsing/longident.cmi
parser_aux.cmi: ./primitives.cmi ../parsing/longident.cmi
pattern_matching.cmi: ../typing/typedtree.cmi ./parser_aux.cmi ./debugcom.cmi
pos.cmi: ../bytecomp/instruct.cmi
primitives.cmi: ../otherlibs/unix/unix.cmi
printval.cmi: ../typing/types.cmi ../typing/path.cmi parser_aux.cmi \
../typing/env.cmi debugcom.cmi
program_loading.cmi: primitives.cmi
printval.cmi: ../typing/types.cmi ../typing/path.cmi ./parser_aux.cmi \
../typing/env.cmi ./debugcom.cmi
program_loading.cmi: ./primitives.cmi
show_information.cmi: ../bytecomp/instruct.cmi
show_source.cmi: ../bytecomp/instruct.cmi
symbols.cmi: ../bytecomp/instruct.cmi
time_travel.cmi: primitives.cmi
time_travel.cmi: ./primitives.cmi
unix_tools.cmi: ../otherlibs/unix/unix.cmi
breakpoints.cmo: symbols.cmi source.cmi primitives.cmi pos.cmi \
../bytecomp/instruct.cmi exec.cmi debugcom.cmi checkpoints.cmi \
breakpoints.cmo: ./symbols.cmi ./source.cmi ./primitives.cmi ./pos.cmi \
../bytecomp/instruct.cmi ./exec.cmi ./debugcom.cmi ./checkpoints.cmi \
breakpoints.cmi
breakpoints.cmx: symbols.cmx source.cmx primitives.cmx pos.cmx \
../bytecomp/instruct.cmx exec.cmx debugcom.cmx checkpoints.cmx \
breakpoints.cmx: ./symbols.cmx ./source.cmx ./primitives.cmx ./pos.cmx \
../bytecomp/instruct.cmx ./exec.cmx ./debugcom.cmx ./checkpoints.cmx \
breakpoints.cmi
checkpoints.cmo: primitives.cmi int64ops.cmi debugcom.cmi checkpoints.cmi
checkpoints.cmx: primitives.cmx int64ops.cmx debugcom.cmx checkpoints.cmi
command_line.cmo: unix_tools.cmi ../otherlibs/unix/unix.cmi \
../typing/types.cmi time_travel.cmi symbols.cmi source.cmi \
show_source.cmi show_information.cmi program_management.cmi \
program_loading.cmi printval.cmi primitives.cmi pos.cmi parser_aux.cmi \
parser.cmi parameters.cmi ../utils/misc.cmi ../parsing/location.cmi \
loadprinter.cmi lexer.cmi int64ops.cmi ../bytecomp/instruct.cmi \
input_handling.cmi history.cmi frames.cmi events.cmi eval.cmi envaux.cmi \
debugger_config.cmi debugcom.cmi ../typing/ctype.cmi ../utils/config.cmi \
checkpoints.cmi breakpoints.cmi command_line.cmi
command_line.cmx: unix_tools.cmx ../otherlibs/unix/unix.cmx \
../typing/types.cmx time_travel.cmx symbols.cmx source.cmx \
show_source.cmx show_information.cmx program_management.cmx \
program_loading.cmx printval.cmx primitives.cmx pos.cmx parser_aux.cmi \
parser.cmx parameters.cmx ../utils/misc.cmx ../parsing/location.cmx \
loadprinter.cmx lexer.cmx int64ops.cmx ../bytecomp/instruct.cmx \
input_handling.cmx history.cmx frames.cmx events.cmx eval.cmx envaux.cmx \
debugger_config.cmx debugcom.cmx ../typing/ctype.cmx ../utils/config.cmx \
checkpoints.cmx breakpoints.cmx command_line.cmi
debugcom.cmo: primitives.cmi ../utils/misc.cmi int64ops.cmi \
input_handling.cmi debugcom.cmi
debugcom.cmx: primitives.cmx ../utils/misc.cmx int64ops.cmx \
input_handling.cmx debugcom.cmi
debugger_config.cmo: int64ops.cmi debugger_config.cmi
debugger_config.cmx: int64ops.cmx debugger_config.cmi
checkpoints.cmo: ./primitives.cmi ./int64ops.cmi ./debugcom.cmi \
checkpoints.cmi
checkpoints.cmx: ./primitives.cmx ./int64ops.cmx ./debugcom.cmx \
checkpoints.cmi
command_line.cmo: ./unix_tools.cmi ../otherlibs/unix/unix.cmi \
../typing/types.cmi ./time_travel.cmi ./symbols.cmi ./source.cmi \
./show_source.cmi ./show_information.cmi ./program_management.cmi \
./program_loading.cmi ./printval.cmi ./primitives.cmi ./pos.cmi \
./parser_aux.cmi ./parser.cmi ./parameters.cmi ../utils/misc.cmi \
../parsing/location.cmi ./loadprinter.cmi ./lexer.cmi ./int64ops.cmi \
../bytecomp/instruct.cmi ./input_handling.cmi ./history.cmi ./frames.cmi \
./events.cmi ./eval.cmi ./envaux.cmi ./debugger_config.cmi ./debugcom.cmi \
../typing/ctype.cmi ../utils/config.cmi ./checkpoints.cmi \
./breakpoints.cmi command_line.cmi
command_line.cmx: ./unix_tools.cmx ../otherlibs/unix/unix.cmx \
../typing/types.cmx ./time_travel.cmx ./symbols.cmx ./source.cmx \
./show_source.cmx ./show_information.cmx ./program_management.cmx \
./program_loading.cmx ./printval.cmx ./primitives.cmx ./pos.cmx \
./parser_aux.cmi ./parser.cmx ./parameters.cmx ../utils/misc.cmx \
../parsing/location.cmx ./loadprinter.cmx ./lexer.cmx ./int64ops.cmx \
../bytecomp/instruct.cmx ./input_handling.cmx ./history.cmx ./frames.cmx \
./events.cmx ./eval.cmx ./envaux.cmx ./debugger_config.cmx ./debugcom.cmx \
../typing/ctype.cmx ../utils/config.cmx ./checkpoints.cmx \
./breakpoints.cmx command_line.cmi
debugcom.cmo: ./primitives.cmi ../utils/misc.cmi ./int64ops.cmi \
./input_handling.cmi debugcom.cmi
debugcom.cmx: ./primitives.cmx ../utils/misc.cmx ./int64ops.cmx \
./input_handling.cmx debugcom.cmi
debugger_config.cmo: ./int64ops.cmi debugger_config.cmi
debugger_config.cmx: ./int64ops.cmx debugger_config.cmi
dynlink.cmo: ../bytecomp/symtable.cmi ../bytecomp/opcodes.cmo \
../utils/misc.cmi ../bytecomp/meta.cmi ../bytecomp/dll.cmi \
../utils/consistbl.cmi ../utils/config.cmi ../bytecomp/cmo_format.cmi \
@ -69,137 +73,145 @@ envaux.cmo: ../typing/types.cmi ../typing/printtyp.cmi ../typing/path.cmi \
envaux.cmx: ../typing/types.cmx ../typing/printtyp.cmx ../typing/path.cmx \
../typing/mtype.cmx ../utils/misc.cmx ../bytecomp/instruct.cmx \
../typing/env.cmx envaux.cmi
eval.cmo: ../typing/types.cmi ../bytecomp/symtable.cmi printval.cmi \
eval.cmo: ../typing/types.cmi ../bytecomp/symtable.cmi ./printval.cmi \
../typing/printtyp.cmi ../typing/predef.cmi ../typing/path.cmi \
parser_aux.cmi ../utils/misc.cmi ../parsing/longident.cmi \
../bytecomp/instruct.cmi ../typing/ident.cmi frames.cmi ../typing/env.cmi \
debugger_config.cmi debugcom.cmi ../typing/ctype.cmi ../typing/btype.cmi \
eval.cmi
eval.cmx: ../typing/types.cmx ../bytecomp/symtable.cmx printval.cmx \
./parser_aux.cmi ../utils/misc.cmi ../parsing/longident.cmi \
../bytecomp/instruct.cmi ../typing/ident.cmi ./frames.cmi \
../typing/env.cmi ./debugger_config.cmi ./debugcom.cmi \
../typing/ctype.cmi ../typing/btype.cmi eval.cmi
eval.cmx: ../typing/types.cmx ../bytecomp/symtable.cmx ./printval.cmx \
../typing/printtyp.cmx ../typing/predef.cmx ../typing/path.cmx \
parser_aux.cmi ../utils/misc.cmx ../parsing/longident.cmx \
../bytecomp/instruct.cmx ../typing/ident.cmx frames.cmx ../typing/env.cmx \
debugger_config.cmx debugcom.cmx ../typing/ctype.cmx ../typing/btype.cmx \
eval.cmi
events.cmo: primitives.cmi ../parsing/location.cmi ../bytecomp/instruct.cmi \
checkpoints.cmi events.cmi
events.cmx: primitives.cmx ../parsing/location.cmx ../bytecomp/instruct.cmx \
checkpoints.cmx events.cmi
./parser_aux.cmi ../utils/misc.cmx ../parsing/longident.cmx \
../bytecomp/instruct.cmx ../typing/ident.cmx ./frames.cmx \
../typing/env.cmx ./debugger_config.cmx ./debugcom.cmx \
../typing/ctype.cmx ../typing/btype.cmx eval.cmi
events.cmo: ./primitives.cmi ../parsing/location.cmi ../bytecomp/instruct.cmi \
./checkpoints.cmi events.cmi
events.cmx: ./primitives.cmx ../parsing/location.cmx ../bytecomp/instruct.cmx \
./checkpoints.cmx events.cmi
exec.cmo: exec.cmi
exec.cmx: exec.cmi
frames.cmo: symbols.cmi primitives.cmi ../utils/misc.cmi \
../bytecomp/instruct.cmi events.cmi debugcom.cmi checkpoints.cmi \
frames.cmo: ./symbols.cmi ./primitives.cmi ../utils/misc.cmi \
../bytecomp/instruct.cmi ./events.cmi ./debugcom.cmi ./checkpoints.cmi \
frames.cmi
frames.cmx: symbols.cmx primitives.cmx ../utils/misc.cmx \
../bytecomp/instruct.cmx events.cmx debugcom.cmx checkpoints.cmx \
frames.cmx: ./symbols.cmx ./primitives.cmx ../utils/misc.cmx \
../bytecomp/instruct.cmx ./events.cmx ./debugcom.cmx ./checkpoints.cmx \
frames.cmi
history.cmo: primitives.cmi ../utils/misc.cmi int64ops.cmi \
debugger_config.cmi checkpoints.cmi history.cmi
history.cmx: primitives.cmx ../utils/misc.cmx int64ops.cmx \
debugger_config.cmx checkpoints.cmx history.cmi
input_handling.cmo: ../otherlibs/unix/unix.cmi primitives.cmi lexer.cmi \
history.cmo: ./primitives.cmi ../utils/misc.cmi ./int64ops.cmi \
./debugger_config.cmi ./checkpoints.cmi history.cmi
history.cmx: ./primitives.cmx ../utils/misc.cmx ./int64ops.cmx \
./debugger_config.cmx ./checkpoints.cmx history.cmi
input_handling.cmo: ../otherlibs/unix/unix.cmi ./primitives.cmi ./lexer.cmi \
input_handling.cmi
input_handling.cmx: ../otherlibs/unix/unix.cmx primitives.cmx lexer.cmx \
input_handling.cmx: ../otherlibs/unix/unix.cmx ./primitives.cmx ./lexer.cmx \
input_handling.cmi
int64ops.cmo: int64ops.cmi
int64ops.cmx: int64ops.cmi
lexer.cmo: primitives.cmi parser.cmi lexer.cmi
lexer.cmx: primitives.cmx parser.cmx lexer.cmi
loadprinter.cmo: ../typing/types.cmi ../bytecomp/symtable.cmi printval.cmi \
lexer.cmo: ./primitives.cmi ./parser.cmi lexer.cmi
lexer.cmx: ./primitives.cmx ./parser.cmx lexer.cmi
loadprinter.cmo: ../typing/types.cmi ../bytecomp/symtable.cmi ./printval.cmi \
../typing/printtyp.cmi ../typing/path.cmi ../utils/misc.cmi \
../parsing/longident.cmi ../typing/ident.cmi ../typing/env.cmi \
dynlink.cmi debugger_config.cmi ../typing/ctype.cmi ../utils/config.cmi \
loadprinter.cmi
loadprinter.cmx: ../typing/types.cmx ../bytecomp/symtable.cmx printval.cmx \
./dynlink.cmi ./debugger_config.cmi ../typing/ctype.cmi \
../utils/config.cmi loadprinter.cmi
loadprinter.cmx: ../typing/types.cmx ../bytecomp/symtable.cmx ./printval.cmx \
../typing/printtyp.cmx ../typing/path.cmx ../utils/misc.cmx \
../parsing/longident.cmx ../typing/ident.cmx ../typing/env.cmx \
dynlink.cmx debugger_config.cmx ../typing/ctype.cmx ../utils/config.cmx \
loadprinter.cmi
main.cmo: unix_tools.cmi ../otherlibs/unix/unix.cmi time_travel.cmi \
show_information.cmi program_management.cmi primitives.cmi parameters.cmi \
../utils/misc.cmi input_handling.cmi frames.cmi exec.cmi \
../typing/env.cmi debugger_config.cmi ../utils/config.cmi \
command_line.cmi checkpoints.cmi
main.cmx: unix_tools.cmx ../otherlibs/unix/unix.cmx time_travel.cmx \
show_information.cmx program_management.cmx primitives.cmx parameters.cmx \
../utils/misc.cmx input_handling.cmx frames.cmx exec.cmx \
../typing/env.cmx debugger_config.cmx ../utils/config.cmx \
command_line.cmx checkpoints.cmx
parameters.cmo: primitives.cmi ../utils/misc.cmi envaux.cmi \
./dynlink.cmx ./debugger_config.cmx ../typing/ctype.cmx \
../utils/config.cmx loadprinter.cmi
main.cmo: ./unix_tools.cmi ../otherlibs/unix/unix.cmi ./time_travel.cmi \
./show_information.cmi ./program_management.cmi ./primitives.cmi \
./parameters.cmi ../utils/misc.cmi ./input_handling.cmi ./frames.cmi \
./exec.cmi ../typing/env.cmi ./debugger_config.cmi ../utils/config.cmi \
./command_line.cmi ./checkpoints.cmi
main.cmx: ./unix_tools.cmx ../otherlibs/unix/unix.cmx ./time_travel.cmx \
./show_information.cmx ./program_management.cmx ./primitives.cmx \
./parameters.cmx ../utils/misc.cmx ./input_handling.cmx ./frames.cmx \
./exec.cmx ../typing/env.cmx ./debugger_config.cmx ../utils/config.cmx \
./command_line.cmx ./checkpoints.cmx
parameters.cmo: ./primitives.cmi ../utils/misc.cmi ./envaux.cmi \
../utils/config.cmi parameters.cmi
parameters.cmx: primitives.cmx ../utils/misc.cmx envaux.cmx \
parameters.cmx: ./primitives.cmx ../utils/misc.cmx ./envaux.cmx \
../utils/config.cmx parameters.cmi
parser.cmo: primitives.cmi parser_aux.cmi ../parsing/longident.cmi \
int64ops.cmi input_handling.cmi parser.cmi
parser.cmx: primitives.cmx parser_aux.cmi ../parsing/longident.cmx \
int64ops.cmx input_handling.cmx parser.cmi
pattern_matching.cmo: ../typing/typedtree.cmi parser_aux.cmi \
../utils/misc.cmi debugger_config.cmi debugcom.cmi ../typing/ctype.cmi \
pattern_matching.cmi
pattern_matching.cmx: ../typing/typedtree.cmx parser_aux.cmi \
../utils/misc.cmx debugger_config.cmx debugcom.cmx ../typing/ctype.cmx \
pattern_matching.cmi
pos.cmo: source.cmi primitives.cmi ../parsing/location.cmi \
parser.cmo: ./primitives.cmi ./parser_aux.cmi ../parsing/longident.cmi \
./int64ops.cmi ./input_handling.cmi parser.cmi
parser.cmx: ./primitives.cmx ./parser_aux.cmi ../parsing/longident.cmx \
./int64ops.cmx ./input_handling.cmx parser.cmi
pattern_matching.cmo: ../typing/typedtree.cmi ./parser_aux.cmi \
../utils/misc.cmi ./debugger_config.cmi ./debugcom.cmi \
../typing/ctype.cmi pattern_matching.cmi
pattern_matching.cmx: ../typing/typedtree.cmx ./parser_aux.cmi \
../utils/misc.cmx ./debugger_config.cmx ./debugcom.cmx \
../typing/ctype.cmx pattern_matching.cmi
pos.cmo: ./source.cmi ./primitives.cmi ../parsing/location.cmi \
../bytecomp/instruct.cmi pos.cmi
pos.cmx: source.cmx primitives.cmx ../parsing/location.cmx \
pos.cmx: ./source.cmx ./primitives.cmx ../parsing/location.cmx \
../bytecomp/instruct.cmx pos.cmi
primitives.cmo: ../otherlibs/unix/unix.cmi primitives.cmi
primitives.cmx: ../otherlibs/unix/unix.cmx primitives.cmi
printval.cmo: ../typing/types.cmi ../bytecomp/symtable.cmi \
../typing/printtyp.cmi ../typing/path.cmi parser_aux.cmi \
../typing/printtyp.cmi ../typing/path.cmi ./parser_aux.cmi \
../typing/outcometree.cmi ../typing/oprint.cmi ../utils/misc.cmi \
../toplevel/genprintval.cmi debugcom.cmi printval.cmi
../toplevel/genprintval.cmi ./debugcom.cmi printval.cmi
printval.cmx: ../typing/types.cmx ../bytecomp/symtable.cmx \
../typing/printtyp.cmx ../typing/path.cmx parser_aux.cmi \
../typing/printtyp.cmx ../typing/path.cmx ./parser_aux.cmi \
../typing/outcometree.cmi ../typing/oprint.cmx ../utils/misc.cmx \
../toplevel/genprintval.cmx debugcom.cmx printval.cmi
program_loading.cmo: unix_tools.cmi ../otherlibs/unix/unix.cmi primitives.cmi \
parameters.cmi ../utils/misc.cmi input_handling.cmi debugger_config.cmi \
program_loading.cmi
program_loading.cmx: unix_tools.cmx ../otherlibs/unix/unix.cmx primitives.cmx \
parameters.cmx ../utils/misc.cmx input_handling.cmx debugger_config.cmx \
program_loading.cmi
program_management.cmo: unix_tools.cmi ../otherlibs/unix/unix.cmi \
time_travel.cmi symbols.cmi program_loading.cmi primitives.cmi \
parameters.cmi ../utils/misc.cmi int64ops.cmi ../bytecomp/instruct.cmi \
input_handling.cmi history.cmi debugger_config.cmi debugcom.cmi \
breakpoints.cmi program_management.cmi
program_management.cmx: unix_tools.cmx ../otherlibs/unix/unix.cmx \
time_travel.cmx symbols.cmx program_loading.cmx primitives.cmx \
parameters.cmx ../utils/misc.cmx int64ops.cmx ../bytecomp/instruct.cmx \
input_handling.cmx history.cmx debugger_config.cmx debugcom.cmx \
breakpoints.cmx program_management.cmi
show_information.cmo: symbols.cmi show_source.cmi printval.cmi primitives.cmi \
../utils/misc.cmi ../bytecomp/instruct.cmi frames.cmi events.cmi \
debugcom.cmi checkpoints.cmi breakpoints.cmi show_information.cmi
show_information.cmx: symbols.cmx show_source.cmx printval.cmx primitives.cmx \
../utils/misc.cmx ../bytecomp/instruct.cmx frames.cmx events.cmx \
debugcom.cmx checkpoints.cmx breakpoints.cmx show_information.cmi
show_source.cmo: source.cmi primitives.cmi parameters.cmi ../utils/misc.cmi \
../parsing/location.cmi ../bytecomp/instruct.cmi events.cmi \
debugger_config.cmi show_source.cmi
show_source.cmx: source.cmx primitives.cmx parameters.cmx ../utils/misc.cmx \
../parsing/location.cmx ../bytecomp/instruct.cmx events.cmx \
debugger_config.cmx show_source.cmi
source.cmo: primitives.cmi ../utils/misc.cmi ../utils/config.cmi source.cmi
source.cmx: primitives.cmx ../utils/misc.cmx ../utils/config.cmx source.cmi
symbols.cmo: ../bytecomp/symtable.cmi primitives.cmi ../bytecomp/instruct.cmi \
events.cmi debugger_config.cmi debugcom.cmi checkpoints.cmi \
../bytecomp/bytesections.cmi symbols.cmi
symbols.cmx: ../bytecomp/symtable.cmx primitives.cmx ../bytecomp/instruct.cmx \
events.cmx debugger_config.cmx debugcom.cmx checkpoints.cmx \
../bytecomp/bytesections.cmx symbols.cmi
time_travel.cmo: trap_barrier.cmi symbols.cmi program_loading.cmi \
primitives.cmi ../utils/misc.cmi int64ops.cmi ../bytecomp/instruct.cmi \
input_handling.cmi exec.cmi events.cmi debugger_config.cmi debugcom.cmi \
checkpoints.cmi breakpoints.cmi time_travel.cmi
time_travel.cmx: trap_barrier.cmx symbols.cmx program_loading.cmx \
primitives.cmx ../utils/misc.cmx int64ops.cmx ../bytecomp/instruct.cmx \
input_handling.cmx exec.cmx events.cmx debugger_config.cmx debugcom.cmx \
checkpoints.cmx breakpoints.cmx time_travel.cmi
trap_barrier.cmo: exec.cmi debugcom.cmi checkpoints.cmi trap_barrier.cmi
trap_barrier.cmx: exec.cmx debugcom.cmx checkpoints.cmx trap_barrier.cmi
unix_tools.cmo: ../otherlibs/unix/unix.cmi primitives.cmi ../utils/misc.cmi \
../toplevel/genprintval.cmx ./debugcom.cmx printval.cmi
program_loading.cmo: ./unix_tools.cmi ../otherlibs/unix/unix.cmi \
./primitives.cmi ./parameters.cmi ../utils/misc.cmi ./input_handling.cmi \
./debugger_config.cmi program_loading.cmi
program_loading.cmx: ./unix_tools.cmx ../otherlibs/unix/unix.cmx \
./primitives.cmx ./parameters.cmx ../utils/misc.cmx ./input_handling.cmx \
./debugger_config.cmx program_loading.cmi
program_management.cmo: ./unix_tools.cmi ../otherlibs/unix/unix.cmi \
./time_travel.cmi ./symbols.cmi ./program_loading.cmi ./primitives.cmi \
./parameters.cmi ../utils/misc.cmi ./int64ops.cmi \
../bytecomp/instruct.cmi ./input_handling.cmi ./history.cmi \
./debugger_config.cmi ./debugcom.cmi ./breakpoints.cmi \
program_management.cmi
program_management.cmx: ./unix_tools.cmx ../otherlibs/unix/unix.cmx \
./time_travel.cmx ./symbols.cmx ./program_loading.cmx ./primitives.cmx \
./parameters.cmx ../utils/misc.cmx ./int64ops.cmx \
../bytecomp/instruct.cmx ./input_handling.cmx ./history.cmx \
./debugger_config.cmx ./debugcom.cmx ./breakpoints.cmx \
program_management.cmi
show_information.cmo: ./symbols.cmi ./show_source.cmi ./printval.cmi \
./primitives.cmi ../utils/misc.cmi ../bytecomp/instruct.cmi ./frames.cmi \
./events.cmi ./debugcom.cmi ./checkpoints.cmi ./breakpoints.cmi \
show_information.cmi
show_information.cmx: ./symbols.cmx ./show_source.cmx ./printval.cmx \
./primitives.cmx ../utils/misc.cmx ../bytecomp/instruct.cmx ./frames.cmx \
./events.cmx ./debugcom.cmx ./checkpoints.cmx ./breakpoints.cmx \
show_information.cmi
show_source.cmo: ./source.cmi ./primitives.cmi ./parameters.cmi \
../utils/misc.cmi ../parsing/location.cmi ../bytecomp/instruct.cmi \
./events.cmi ./debugger_config.cmi show_source.cmi
show_source.cmx: ./source.cmx ./primitives.cmx ./parameters.cmx \
../utils/misc.cmx ../parsing/location.cmx ../bytecomp/instruct.cmx \
./events.cmx ./debugger_config.cmx show_source.cmi
source.cmo: ./primitives.cmi ../utils/misc.cmi ../utils/config.cmi source.cmi
source.cmx: ./primitives.cmx ../utils/misc.cmx ../utils/config.cmx source.cmi
symbols.cmo: ../bytecomp/symtable.cmi ./primitives.cmi \
../bytecomp/instruct.cmi ./events.cmi ./debugger_config.cmi \
./debugcom.cmi ./checkpoints.cmi ../bytecomp/bytesections.cmi symbols.cmi
symbols.cmx: ../bytecomp/symtable.cmx ./primitives.cmx \
../bytecomp/instruct.cmx ./events.cmx ./debugger_config.cmx \
./debugcom.cmx ./checkpoints.cmx ../bytecomp/bytesections.cmx symbols.cmi
time_travel.cmo: ./trap_barrier.cmi ./symbols.cmi ./program_loading.cmi \
./primitives.cmi ../utils/misc.cmi ./int64ops.cmi \
../bytecomp/instruct.cmi ./input_handling.cmi ./exec.cmi ./events.cmi \
./debugger_config.cmi ./debugcom.cmi ./checkpoints.cmi ./breakpoints.cmi \
time_travel.cmi
time_travel.cmx: ./trap_barrier.cmx ./symbols.cmx ./program_loading.cmx \
./primitives.cmx ../utils/misc.cmx ./int64ops.cmx \
../bytecomp/instruct.cmx ./input_handling.cmx ./exec.cmx ./events.cmx \
./debugger_config.cmx ./debugcom.cmx ./checkpoints.cmx ./breakpoints.cmx \
time_travel.cmi
trap_barrier.cmo: ./exec.cmi ./debugcom.cmi ./checkpoints.cmi \
trap_barrier.cmi
trap_barrier.cmx: ./exec.cmx ./debugcom.cmx ./checkpoints.cmx \
trap_barrier.cmi
unix_tools.cmo: ../otherlibs/unix/unix.cmi ./primitives.cmi ../utils/misc.cmi \
unix_tools.cmi
unix_tools.cmx: ../otherlibs/unix/unix.cmx primitives.cmx ../utils/misc.cmx \
unix_tools.cmx: ../otherlibs/unix/unix.cmx ./primitives.cmx ../utils/misc.cmx \
unix_tools.cmi

View File

@ -1,32 +1,32 @@
common.cmi: syntax.cmi lexgen.cmi
compact.cmi: lexgen.cmi
lexer.cmi: parser.cmi
lexgen.cmi: syntax.cmi
output.cmi: syntax.cmi lexgen.cmi compact.cmi common.cmi
outputbis.cmi: syntax.cmi lexgen.cmi common.cmi
parser.cmi: syntax.cmi
syntax.cmi: cset.cmi
common.cmo: syntax.cmi lexgen.cmi common.cmi
common.cmx: syntax.cmx lexgen.cmx common.cmi
compact.cmo: table.cmi lexgen.cmi compact.cmi
compact.cmx: table.cmx lexgen.cmx compact.cmi
common.cmi: ./syntax.cmi ./lexgen.cmi
compact.cmi: ./lexgen.cmi
lexer.cmi: ./parser.cmi
lexgen.cmi: ./syntax.cmi
output.cmi: ./syntax.cmi ./lexgen.cmi ./compact.cmi ./common.cmi
outputbis.cmi: ./syntax.cmi ./lexgen.cmi ./common.cmi
parser.cmi: ./syntax.cmi
syntax.cmi: ./cset.cmi
common.cmo: ./syntax.cmi ./lexgen.cmi common.cmi
common.cmx: ./syntax.cmx ./lexgen.cmx common.cmi
compact.cmo: ./table.cmi ./lexgen.cmi compact.cmi
compact.cmx: ./table.cmx ./lexgen.cmx compact.cmi
cset.cmo: cset.cmi
cset.cmx: cset.cmi
lexer.cmo: syntax.cmi parser.cmi lexer.cmi
lexer.cmx: syntax.cmx parser.cmx lexer.cmi
lexgen.cmo: table.cmi syntax.cmi cset.cmi lexgen.cmi
lexgen.cmx: table.cmx syntax.cmx cset.cmx lexgen.cmi
main.cmo: syntax.cmi parser.cmi outputbis.cmi output.cmi lexgen.cmi lexer.cmi \
cset.cmi compact.cmi common.cmi
main.cmx: syntax.cmx parser.cmx outputbis.cmx output.cmx lexgen.cmx lexer.cmx \
cset.cmx compact.cmx common.cmx
output.cmo: syntax.cmi lexgen.cmi compact.cmi common.cmi output.cmi
output.cmx: syntax.cmx lexgen.cmx compact.cmx common.cmx output.cmi
outputbis.cmo: syntax.cmi lexgen.cmi common.cmi outputbis.cmi
outputbis.cmx: syntax.cmx lexgen.cmx common.cmx outputbis.cmi
parser.cmo: syntax.cmi cset.cmi parser.cmi
parser.cmx: syntax.cmx cset.cmx parser.cmi
syntax.cmo: cset.cmi syntax.cmi
syntax.cmx: cset.cmx syntax.cmi
lexer.cmo: ./syntax.cmi ./parser.cmi lexer.cmi
lexer.cmx: ./syntax.cmx ./parser.cmx lexer.cmi
lexgen.cmo: ./table.cmi ./syntax.cmi ./cset.cmi lexgen.cmi
lexgen.cmx: ./table.cmx ./syntax.cmx ./cset.cmx lexgen.cmi
main.cmo: ./syntax.cmi ./parser.cmi ./outputbis.cmi ./output.cmi ./lexgen.cmi \
./lexer.cmi ./cset.cmi ./compact.cmi ./common.cmi
main.cmx: ./syntax.cmx ./parser.cmx ./outputbis.cmx ./output.cmx ./lexgen.cmx \
./lexer.cmx ./cset.cmx ./compact.cmx ./common.cmx
output.cmo: ./syntax.cmi ./lexgen.cmi ./compact.cmi ./common.cmi output.cmi
output.cmx: ./syntax.cmx ./lexgen.cmx ./compact.cmx ./common.cmx output.cmi
outputbis.cmo: ./syntax.cmi ./lexgen.cmi ./common.cmi outputbis.cmi
outputbis.cmx: ./syntax.cmx ./lexgen.cmx ./common.cmx outputbis.cmi
parser.cmo: ./syntax.cmi ./cset.cmi parser.cmi
parser.cmx: ./syntax.cmx ./cset.cmx parser.cmi
syntax.cmo: ./cset.cmi syntax.cmi
syntax.cmx: ./cset.cmx syntax.cmi
table.cmo: table.cmi
table.cmx: table.cmi

View File

@ -1,233 +1,242 @@
odoc.cmo: ../typing/typedtree.cmi odoc_texi.cmo odoc_messages.cmo \
odoc_man.cmo odoc_latex.cmo odoc_info.cmi odoc_html.cmo odoc_global.cmi \
odoc_dot.cmo odoc_config.cmi odoc_args.cmi odoc_analyse.cmi \
../utils/misc.cmi ../utils/config.cmi ../utils/clflags.cmo
odoc.cmx: ../typing/typedtree.cmx odoc_texi.cmx odoc_messages.cmx \
odoc_man.cmx odoc_latex.cmx odoc_info.cmx odoc_html.cmx odoc_global.cmx \
odoc_dot.cmx odoc_config.cmx odoc_args.cmx odoc_analyse.cmx \
../utils/misc.cmx ../utils/config.cmx ../utils/clflags.cmx
odoc.cmo: ../typing/typedtree.cmi ./odoc_texi.cmo ./odoc_messages.cmo \
./odoc_man.cmo ./odoc_latex.cmo ./odoc_info.cmi ./odoc_html.cmo \
./odoc_global.cmi ./odoc_dot.cmo ./odoc_config.cmi ./odoc_args.cmi \
./odoc_analyse.cmi ../utils/misc.cmi ../utils/config.cmi \
../utils/clflags.cmi
odoc.cmx: ../typing/typedtree.cmx ./odoc_texi.cmx ./odoc_messages.cmx \
./odoc_man.cmx ./odoc_latex.cmx ./odoc_info.cmx ./odoc_html.cmx \
./odoc_global.cmx ./odoc_dot.cmx ./odoc_config.cmx ./odoc_args.cmx \
./odoc_analyse.cmx ../utils/misc.cmx ../utils/config.cmx \
../utils/clflags.cmx
odoc_analyse.cmo: ../utils/warnings.cmi ../typing/typetexp.cmi \
../typing/types.cmi ../typing/typemod.cmi ../typing/typedtree.cmi \
../typing/typedecl.cmi ../typing/typecore.cmi ../typing/typeclass.cmi \
../bytecomp/translcore.cmi ../bytecomp/translclass.cmi \
../parsing/syntaxerr.cmi ../parsing/parse.cmi odoc_types.cmi \
odoc_text.cmi odoc_sig.cmi odoc_module.cmo odoc_misc.cmi \
odoc_messages.cmo odoc_merge.cmi odoc_global.cmi odoc_dep.cmo \
odoc_cross.cmi odoc_comments.cmi odoc_class.cmo odoc_ast.cmi \
odoc_args.cmi ../utils/misc.cmi ../parsing/location.cmi \
../parsing/syntaxerr.cmi ../parsing/parse.cmi ./odoc_types.cmi \
./odoc_text.cmi ./odoc_sig.cmi ./odoc_module.cmo ./odoc_misc.cmi \
./odoc_messages.cmo ./odoc_merge.cmi ./odoc_global.cmi ./odoc_dep.cmo \
./odoc_cross.cmi ./odoc_comments.cmi ./odoc_class.cmo ./odoc_ast.cmi \
./odoc_args.cmi ../utils/misc.cmi ../parsing/location.cmi \
../parsing/lexer.cmi ../typing/includemod.cmi ../typing/env.cmi \
../typing/ctype.cmi ../utils/config.cmi ../utils/clflags.cmo \
../typing/ctype.cmi ../utils/config.cmi ../utils/clflags.cmi \
../utils/ccomp.cmi odoc_analyse.cmi
odoc_analyse.cmx: ../utils/warnings.cmx ../typing/typetexp.cmx \
../typing/types.cmx ../typing/typemod.cmx ../typing/typedtree.cmx \
../typing/typedecl.cmx ../typing/typecore.cmx ../typing/typeclass.cmx \
../bytecomp/translcore.cmx ../bytecomp/translclass.cmx \
../parsing/syntaxerr.cmx ../parsing/parse.cmx odoc_types.cmx \
odoc_text.cmx odoc_sig.cmx odoc_module.cmx odoc_misc.cmx \
odoc_messages.cmx odoc_merge.cmx odoc_global.cmx odoc_dep.cmx \
odoc_cross.cmx odoc_comments.cmx odoc_class.cmx odoc_ast.cmx \
odoc_args.cmx ../utils/misc.cmx ../parsing/location.cmx \
../parsing/syntaxerr.cmx ../parsing/parse.cmx ./odoc_types.cmx \
./odoc_text.cmx ./odoc_sig.cmx ./odoc_module.cmx ./odoc_misc.cmx \
./odoc_messages.cmx ./odoc_merge.cmx ./odoc_global.cmx ./odoc_dep.cmx \
./odoc_cross.cmx ./odoc_comments.cmx ./odoc_class.cmx ./odoc_ast.cmx \
./odoc_args.cmx ../utils/misc.cmx ../parsing/location.cmx \
../parsing/lexer.cmx ../typing/includemod.cmx ../typing/env.cmx \
../typing/ctype.cmx ../utils/config.cmx ../utils/clflags.cmx \
../utils/ccomp.cmx odoc_analyse.cmi
odoc_args.cmo: odoc_types.cmi odoc_module.cmo odoc_messages.cmo \
odoc_global.cmi odoc_config.cmi ../utils/misc.cmi ../utils/config.cmi \
../utils/clflags.cmo odoc_args.cmi
odoc_args.cmx: odoc_types.cmx odoc_module.cmx odoc_messages.cmx \
odoc_global.cmx odoc_config.cmx ../utils/misc.cmx ../utils/config.cmx \
odoc_args.cmo: ./odoc_types.cmi ./odoc_module.cmo ./odoc_messages.cmo \
./odoc_global.cmi ./odoc_config.cmi ../utils/misc.cmi ../utils/config.cmi \
../utils/clflags.cmi odoc_args.cmi
odoc_args.cmx: ./odoc_types.cmx ./odoc_module.cmx ./odoc_messages.cmx \
./odoc_global.cmx ./odoc_config.cmx ../utils/misc.cmx ../utils/config.cmx \
../utils/clflags.cmx odoc_args.cmi
odoc_ast.cmo: ../typing/types.cmi ../typing/typedtree.cmi \
../typing/predef.cmi ../typing/path.cmi ../parsing/parsetree.cmi \
odoc_value.cmo odoc_types.cmi odoc_type.cmo odoc_sig.cmi \
odoc_parameter.cmo odoc_name.cmi odoc_module.cmo odoc_messages.cmo \
odoc_global.cmi odoc_exception.cmo odoc_env.cmi odoc_class.cmo \
odoc_args.cmi ../utils/misc.cmi ../parsing/location.cmi \
../parsing/asttypes.cmi odoc_ast.cmi
./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo ./odoc_sig.cmi \
./odoc_parameter.cmo ./odoc_name.cmi ./odoc_module.cmo \
./odoc_messages.cmo ./odoc_global.cmi ./odoc_exception.cmo ./odoc_env.cmi \
./odoc_class.cmo ./odoc_args.cmi ../utils/misc.cmi \
../parsing/location.cmi ../typing/ident.cmi ../parsing/asttypes.cmi \
odoc_ast.cmi
odoc_ast.cmx: ../typing/types.cmx ../typing/typedtree.cmx \
../typing/predef.cmx ../typing/path.cmx ../parsing/parsetree.cmi \
odoc_value.cmx odoc_types.cmx odoc_type.cmx odoc_sig.cmx \
odoc_parameter.cmx odoc_name.cmx odoc_module.cmx odoc_messages.cmx \
odoc_global.cmx odoc_exception.cmx odoc_env.cmx odoc_class.cmx \
odoc_args.cmx ../utils/misc.cmx ../parsing/location.cmx \
../parsing/asttypes.cmi odoc_ast.cmi
odoc_class.cmo: ../typing/types.cmi odoc_value.cmo odoc_types.cmi \
odoc_parameter.cmo odoc_name.cmi
odoc_class.cmx: ../typing/types.cmx odoc_value.cmx odoc_types.cmx \
odoc_parameter.cmx odoc_name.cmx
odoc_comments.cmo: odoc_types.cmi odoc_text.cmi odoc_see_lexer.cmo \
odoc_parser.cmi odoc_misc.cmi odoc_messages.cmo odoc_lexer.cmo \
odoc_global.cmi odoc_comments_global.cmi odoc_comments.cmi
odoc_comments.cmx: odoc_types.cmx odoc_text.cmx odoc_see_lexer.cmx \
odoc_parser.cmx odoc_misc.cmx odoc_messages.cmx odoc_lexer.cmx \
odoc_global.cmx odoc_comments_global.cmx odoc_comments.cmi
./odoc_value.cmx ./odoc_types.cmx ./odoc_type.cmx ./odoc_sig.cmx \
./odoc_parameter.cmx ./odoc_name.cmx ./odoc_module.cmx \
./odoc_messages.cmx ./odoc_global.cmx ./odoc_exception.cmx ./odoc_env.cmx \
./odoc_class.cmx ./odoc_args.cmx ../utils/misc.cmx \
../parsing/location.cmx ../typing/ident.cmx ../parsing/asttypes.cmi \
odoc_ast.cmi
odoc_class.cmo: ../typing/types.cmi ./odoc_value.cmo ./odoc_types.cmi \
./odoc_parameter.cmo ./odoc_name.cmi
odoc_class.cmx: ../typing/types.cmx ./odoc_value.cmx ./odoc_types.cmx \
./odoc_parameter.cmx ./odoc_name.cmx
odoc_comments.cmo: ./odoc_types.cmi ./odoc_text.cmi ./odoc_see_lexer.cmo \
./odoc_parser.cmi ./odoc_misc.cmi ./odoc_messages.cmo ./odoc_lexer.cmo \
./odoc_global.cmi ./odoc_cross.cmi ./odoc_comments_global.cmi \
odoc_comments.cmi
odoc_comments.cmx: ./odoc_types.cmx ./odoc_text.cmx ./odoc_see_lexer.cmx \
./odoc_parser.cmx ./odoc_misc.cmx ./odoc_messages.cmx ./odoc_lexer.cmx \
./odoc_global.cmx ./odoc_cross.cmx ./odoc_comments_global.cmx \
odoc_comments.cmi
odoc_comments_global.cmo: odoc_comments_global.cmi
odoc_comments_global.cmx: odoc_comments_global.cmi
odoc_config.cmo: ../utils/config.cmi odoc_config.cmi
odoc_config.cmx: ../utils/config.cmx odoc_config.cmi
odoc_cross.cmo: odoc_value.cmo odoc_types.cmi odoc_type.cmo odoc_search.cmi \
odoc_scan.cmo odoc_parameter.cmo odoc_name.cmi odoc_module.cmo \
odoc_misc.cmi odoc_messages.cmo odoc_exception.cmo odoc_class.cmo \
odoc_cross.cmi
odoc_cross.cmx: odoc_value.cmx odoc_types.cmx odoc_type.cmx odoc_search.cmx \
odoc_scan.cmx odoc_parameter.cmx odoc_name.cmx odoc_module.cmx \
odoc_misc.cmx odoc_messages.cmx odoc_exception.cmx odoc_class.cmx \
odoc_cross.cmi
odoc_dag2html.cmo: odoc_info.cmi odoc_dag2html.cmi
odoc_dag2html.cmx: odoc_info.cmx odoc_dag2html.cmi
odoc_dep.cmo: ../parsing/parsetree.cmi odoc_type.cmo odoc_print.cmi \
odoc_module.cmo ../tools/depend.cmi
odoc_dep.cmx: ../parsing/parsetree.cmi odoc_type.cmx odoc_print.cmx \
odoc_module.cmx ../tools/depend.cmx
odoc_dot.cmo: odoc_info.cmi
odoc_dot.cmx: odoc_info.cmx
odoc_cross.cmo: ./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo \
./odoc_search.cmi ./odoc_scan.cmo ./odoc_parameter.cmo ./odoc_name.cmi \
./odoc_module.cmo ./odoc_misc.cmi ./odoc_messages.cmo \
./odoc_exception.cmo ./odoc_class.cmo odoc_cross.cmi
odoc_cross.cmx: ./odoc_value.cmx ./odoc_types.cmx ./odoc_type.cmx \
./odoc_search.cmx ./odoc_scan.cmx ./odoc_parameter.cmx ./odoc_name.cmx \
./odoc_module.cmx ./odoc_misc.cmx ./odoc_messages.cmx \
./odoc_exception.cmx ./odoc_class.cmx odoc_cross.cmi
odoc_dag2html.cmo: ./odoc_info.cmi odoc_dag2html.cmi
odoc_dag2html.cmx: ./odoc_info.cmx odoc_dag2html.cmi
odoc_dep.cmo: ../parsing/parsetree.cmi ./odoc_type.cmo ./odoc_print.cmi \
./odoc_module.cmo ../tools/depend.cmi
odoc_dep.cmx: ../parsing/parsetree.cmi ./odoc_type.cmx ./odoc_print.cmx \
./odoc_module.cmx ../tools/depend.cmx
odoc_dot.cmo: ./odoc_info.cmi
odoc_dot.cmx: ./odoc_info.cmx
odoc_env.cmo: ../typing/types.cmi ../typing/printtyp.cmi ../typing/predef.cmi \
../typing/path.cmi odoc_name.cmi ../typing/btype.cmi odoc_env.cmi
../typing/path.cmi ./odoc_name.cmi ../typing/btype.cmi odoc_env.cmi
odoc_env.cmx: ../typing/types.cmx ../typing/printtyp.cmx ../typing/predef.cmx \
../typing/path.cmx odoc_name.cmx ../typing/btype.cmx odoc_env.cmi
odoc_exception.cmo: ../typing/types.cmi odoc_types.cmi odoc_name.cmi
odoc_exception.cmx: ../typing/types.cmx odoc_types.cmx odoc_name.cmx
odoc_global.cmo: ../utils/clflags.cmo odoc_global.cmi
../typing/path.cmx ./odoc_name.cmx ../typing/btype.cmx odoc_env.cmi
odoc_exception.cmo: ../typing/types.cmi ./odoc_types.cmi ./odoc_name.cmi
odoc_exception.cmx: ../typing/types.cmx ./odoc_types.cmx ./odoc_name.cmx
odoc_global.cmo: ../utils/clflags.cmi odoc_global.cmi
odoc_global.cmx: ../utils/clflags.cmx odoc_global.cmi
odoc_html.cmo: odoc_text.cmi odoc_ocamlhtml.cmo odoc_messages.cmo \
odoc_info.cmi odoc_dag2html.cmi odoc_args.cmi
odoc_html.cmx: odoc_text.cmx odoc_ocamlhtml.cmx odoc_messages.cmx \
odoc_info.cmx odoc_dag2html.cmx odoc_args.cmx
odoc_info.cmo: ../typing/printtyp.cmi odoc_value.cmo odoc_types.cmi \
odoc_type.cmo odoc_text.cmi odoc_str.cmi odoc_search.cmi odoc_scan.cmo \
odoc_print.cmi odoc_parameter.cmo odoc_name.cmi odoc_module.cmo \
odoc_misc.cmi odoc_messages.cmo odoc_global.cmi odoc_exception.cmo \
odoc_dep.cmo odoc_comments.cmi odoc_class.cmo odoc_args.cmi \
odoc_analyse.cmi odoc_info.cmi
odoc_info.cmx: ../typing/printtyp.cmx odoc_value.cmx odoc_types.cmx \
odoc_type.cmx odoc_text.cmx odoc_str.cmx odoc_search.cmx odoc_scan.cmx \
odoc_print.cmx odoc_parameter.cmx odoc_name.cmx odoc_module.cmx \
odoc_misc.cmx odoc_messages.cmx odoc_global.cmx odoc_exception.cmx \
odoc_dep.cmx odoc_comments.cmx odoc_class.cmx odoc_args.cmx \
odoc_analyse.cmx odoc_info.cmi
odoc_latex.cmo: odoc_to_text.cmo odoc_messages.cmo odoc_latex_style.cmo \
odoc_info.cmi
odoc_latex.cmx: odoc_to_text.cmx odoc_messages.cmx odoc_latex_style.cmx \
odoc_info.cmx
odoc_lexer.cmo: odoc_parser.cmi odoc_messages.cmo odoc_comments_global.cmi \
odoc_args.cmi
odoc_lexer.cmx: odoc_parser.cmx odoc_messages.cmx odoc_comments_global.cmx \
odoc_args.cmx
odoc_man.cmo: odoc_str.cmi odoc_print.cmi odoc_misc.cmi odoc_messages.cmo \
odoc_info.cmi odoc_args.cmi
odoc_man.cmx: odoc_str.cmx odoc_print.cmx odoc_misc.cmx odoc_messages.cmx \
odoc_info.cmx odoc_args.cmx
odoc_merge.cmo: odoc_value.cmo odoc_types.cmi odoc_type.cmo \
odoc_parameter.cmo odoc_name.cmi odoc_module.cmo odoc_messages.cmo \
odoc_exception.cmo odoc_class.cmo odoc_args.cmi odoc_merge.cmi
odoc_merge.cmx: odoc_value.cmx odoc_types.cmx odoc_type.cmx \
odoc_parameter.cmx odoc_name.cmx odoc_module.cmx odoc_messages.cmx \
odoc_exception.cmx odoc_class.cmx odoc_args.cmx odoc_merge.cmi
odoc_messages.cmo: odoc_global.cmi ../utils/config.cmi
odoc_messages.cmx: odoc_global.cmx ../utils/config.cmx
odoc_html.cmo: ./odoc_text.cmi ./odoc_ocamlhtml.cmo ./odoc_messages.cmo \
./odoc_info.cmi ./odoc_dag2html.cmi ./odoc_args.cmi
odoc_html.cmx: ./odoc_text.cmx ./odoc_ocamlhtml.cmx ./odoc_messages.cmx \
./odoc_info.cmx ./odoc_dag2html.cmx ./odoc_args.cmx
odoc_info.cmo: ../typing/printtyp.cmi ./odoc_value.cmo ./odoc_types.cmi \
./odoc_type.cmo ./odoc_text.cmi ./odoc_str.cmi ./odoc_search.cmi \
./odoc_scan.cmo ./odoc_print.cmi ./odoc_parameter.cmo ./odoc_name.cmi \
./odoc_module.cmo ./odoc_misc.cmi ./odoc_messages.cmo ./odoc_global.cmi \
./odoc_exception.cmo ./odoc_dep.cmo ./odoc_comments.cmi ./odoc_class.cmo \
./odoc_args.cmi ./odoc_analyse.cmi odoc_info.cmi
odoc_info.cmx: ../typing/printtyp.cmx ./odoc_value.cmx ./odoc_types.cmx \
./odoc_type.cmx ./odoc_text.cmx ./odoc_str.cmx ./odoc_search.cmx \
./odoc_scan.cmx ./odoc_print.cmx ./odoc_parameter.cmx ./odoc_name.cmx \
./odoc_module.cmx ./odoc_misc.cmx ./odoc_messages.cmx ./odoc_global.cmx \
./odoc_exception.cmx ./odoc_dep.cmx ./odoc_comments.cmx ./odoc_class.cmx \
./odoc_args.cmx ./odoc_analyse.cmx odoc_info.cmi
odoc_latex.cmo: ./odoc_to_text.cmo ./odoc_messages.cmo ./odoc_latex_style.cmo \
./odoc_info.cmi
odoc_latex.cmx: ./odoc_to_text.cmx ./odoc_messages.cmx ./odoc_latex_style.cmx \
./odoc_info.cmx
odoc_lexer.cmo: ./odoc_parser.cmi ./odoc_messages.cmo \
./odoc_comments_global.cmi ./odoc_args.cmi
odoc_lexer.cmx: ./odoc_parser.cmx ./odoc_messages.cmx \
./odoc_comments_global.cmx ./odoc_args.cmx
odoc_man.cmo: ./odoc_str.cmi ./odoc_print.cmi ./odoc_misc.cmi \
./odoc_messages.cmo ./odoc_info.cmi ./odoc_args.cmi
odoc_man.cmx: ./odoc_str.cmx ./odoc_print.cmx ./odoc_misc.cmx \
./odoc_messages.cmx ./odoc_info.cmx ./odoc_args.cmx
odoc_merge.cmo: ./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo \
./odoc_parameter.cmo ./odoc_name.cmi ./odoc_module.cmo \
./odoc_messages.cmo ./odoc_exception.cmo ./odoc_class.cmo ./odoc_args.cmi \
odoc_merge.cmi
odoc_merge.cmx: ./odoc_value.cmx ./odoc_types.cmx ./odoc_type.cmx \
./odoc_parameter.cmx ./odoc_name.cmx ./odoc_module.cmx \
./odoc_messages.cmx ./odoc_exception.cmx ./odoc_class.cmx ./odoc_args.cmx \
odoc_merge.cmi
odoc_messages.cmo: ./odoc_global.cmi ../utils/config.cmi
odoc_messages.cmx: ./odoc_global.cmx ../utils/config.cmx
odoc_misc.cmo: ../typing/types.cmi ../typing/predef.cmi ../typing/path.cmi \
odoc_types.cmi odoc_messages.cmo ../parsing/longident.cmi \
./odoc_types.cmi ./odoc_messages.cmo ../parsing/longident.cmi \
../typing/ctype.cmi ../typing/btype.cmi odoc_misc.cmi
odoc_misc.cmx: ../typing/types.cmx ../typing/predef.cmx ../typing/path.cmx \
odoc_types.cmx odoc_messages.cmx ../parsing/longident.cmx \
./odoc_types.cmx ./odoc_messages.cmx ../parsing/longident.cmx \
../typing/ctype.cmx ../typing/btype.cmx odoc_misc.cmi
odoc_module.cmo: ../typing/types.cmi odoc_value.cmo odoc_types.cmi \
odoc_type.cmo odoc_name.cmi odoc_exception.cmo odoc_class.cmo
odoc_module.cmx: ../typing/types.cmx odoc_value.cmx odoc_types.cmx \
odoc_type.cmx odoc_name.cmx odoc_exception.cmx odoc_class.cmx
odoc_name.cmo: ../typing/path.cmi ../parsing/longident.cmi \
../typing/ident.cmi odoc_name.cmi
odoc_name.cmx: ../typing/path.cmx ../parsing/longident.cmx \
../typing/ident.cmx odoc_name.cmi
odoc_opt.cmo: ../typing/typedtree.cmi odoc_texi.cmo odoc_messages.cmo \
odoc_man.cmo odoc_latex.cmo odoc_info.cmi odoc_html.cmo odoc_global.cmi \
odoc_dot.cmo odoc_args.cmi odoc_analyse.cmi ../utils/misc.cmi \
../utils/config.cmi ../utils/clflags.cmo
odoc_opt.cmx: ../typing/typedtree.cmx odoc_texi.cmx odoc_messages.cmx \
odoc_man.cmx odoc_latex.cmx odoc_info.cmx odoc_html.cmx odoc_global.cmx \
odoc_dot.cmx odoc_args.cmx odoc_analyse.cmx ../utils/misc.cmx \
../utils/config.cmx ../utils/clflags.cmx
odoc_parameter.cmo: ../typing/types.cmi odoc_types.cmi
odoc_parameter.cmx: ../typing/types.cmx odoc_types.cmx
odoc_parser.cmo: odoc_types.cmi odoc_comments_global.cmi odoc_parser.cmi
odoc_parser.cmx: odoc_types.cmx odoc_comments_global.cmx odoc_parser.cmi
odoc_module.cmo: ../typing/types.cmi ./odoc_value.cmo ./odoc_types.cmi \
./odoc_type.cmo ./odoc_name.cmi ./odoc_exception.cmo ./odoc_class.cmo
odoc_module.cmx: ../typing/types.cmx ./odoc_value.cmx ./odoc_types.cmx \
./odoc_type.cmx ./odoc_name.cmx ./odoc_exception.cmx ./odoc_class.cmx
odoc_name.cmo: ../typing/path.cmi ./odoc_misc.cmi ../typing/ident.cmi \
odoc_name.cmi
odoc_name.cmx: ../typing/path.cmx ./odoc_misc.cmx ../typing/ident.cmx \
odoc_name.cmi
odoc_opt.cmo: ../typing/typedtree.cmi ./odoc_texi.cmo ./odoc_messages.cmo \
./odoc_man.cmo ./odoc_latex.cmo ./odoc_info.cmi ./odoc_html.cmo \
./odoc_global.cmi ./odoc_dot.cmo ./odoc_args.cmi ./odoc_analyse.cmi \
../utils/misc.cmi ../utils/config.cmi ../utils/clflags.cmi
odoc_opt.cmx: ../typing/typedtree.cmx ./odoc_texi.cmx ./odoc_messages.cmx \
./odoc_man.cmx ./odoc_latex.cmx ./odoc_info.cmx ./odoc_html.cmx \
./odoc_global.cmx ./odoc_dot.cmx ./odoc_args.cmx ./odoc_analyse.cmx \
../utils/misc.cmx ../utils/config.cmx ../utils/clflags.cmx
odoc_parameter.cmo: ../typing/types.cmi ./odoc_types.cmi
odoc_parameter.cmx: ../typing/types.cmx ./odoc_types.cmx
odoc_parser.cmo: ./odoc_types.cmi ./odoc_comments_global.cmi odoc_parser.cmi
odoc_parser.cmx: ./odoc_types.cmx ./odoc_comments_global.cmx odoc_parser.cmi
odoc_print.cmo: ../typing/types.cmi ../typing/printtyp.cmi odoc_print.cmi
odoc_print.cmx: ../typing/types.cmx ../typing/printtyp.cmx odoc_print.cmi
odoc_scan.cmo: odoc_value.cmo odoc_types.cmi odoc_type.cmo odoc_module.cmo \
odoc_exception.cmo odoc_class.cmo
odoc_scan.cmx: odoc_value.cmx odoc_types.cmx odoc_type.cmx odoc_module.cmx \
odoc_exception.cmx odoc_class.cmx
odoc_search.cmo: odoc_value.cmo odoc_types.cmi odoc_type.cmo \
odoc_parameter.cmo odoc_name.cmi odoc_module.cmo odoc_exception.cmo \
odoc_class.cmo odoc_search.cmi
odoc_search.cmx: odoc_value.cmx odoc_types.cmx odoc_type.cmx \
odoc_parameter.cmx odoc_name.cmx odoc_module.cmx odoc_exception.cmx \
odoc_class.cmx odoc_search.cmi
odoc_see_lexer.cmo: odoc_parser.cmi
odoc_see_lexer.cmx: odoc_parser.cmx
odoc_scan.cmo: ./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo \
./odoc_module.cmo ./odoc_exception.cmo ./odoc_class.cmo
odoc_scan.cmx: ./odoc_value.cmx ./odoc_types.cmx ./odoc_type.cmx \
./odoc_module.cmx ./odoc_exception.cmx ./odoc_class.cmx
odoc_search.cmo: ./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo \
./odoc_parameter.cmo ./odoc_name.cmi ./odoc_module.cmo \
./odoc_exception.cmo ./odoc_class.cmo odoc_search.cmi
odoc_search.cmx: ./odoc_value.cmx ./odoc_types.cmx ./odoc_type.cmx \
./odoc_parameter.cmx ./odoc_name.cmx ./odoc_module.cmx \
./odoc_exception.cmx ./odoc_class.cmx odoc_search.cmi
odoc_see_lexer.cmo: ./odoc_parser.cmi
odoc_see_lexer.cmx: ./odoc_parser.cmx
odoc_sig.cmo: ../typing/types.cmi ../typing/typedtree.cmi ../typing/path.cmi \
../parsing/parsetree.cmi odoc_value.cmo odoc_types.cmi odoc_type.cmo \
odoc_print.cmi odoc_parameter.cmo odoc_name.cmi odoc_module.cmo \
odoc_misc.cmi odoc_messages.cmo odoc_merge.cmi odoc_global.cmi \
odoc_exception.cmo odoc_env.cmi odoc_class.cmo odoc_args.cmi \
../utils/misc.cmi ../parsing/location.cmi ../typing/btype.cmi \
../parsing/asttypes.cmi odoc_sig.cmi
../parsing/parsetree.cmi ./odoc_value.cmo ./odoc_types.cmi \
./odoc_type.cmo ./odoc_print.cmi ./odoc_parameter.cmo ./odoc_name.cmi \
./odoc_module.cmo ./odoc_misc.cmi ./odoc_messages.cmo ./odoc_merge.cmi \
./odoc_global.cmi ./odoc_exception.cmo ./odoc_env.cmi ./odoc_class.cmo \
./odoc_args.cmi ../utils/misc.cmi ../parsing/location.cmi \
../typing/btype.cmi ../parsing/asttypes.cmi odoc_sig.cmi
odoc_sig.cmx: ../typing/types.cmx ../typing/typedtree.cmx ../typing/path.cmx \
../parsing/parsetree.cmi odoc_value.cmx odoc_types.cmx odoc_type.cmx \
odoc_print.cmx odoc_parameter.cmx odoc_name.cmx odoc_module.cmx \
odoc_misc.cmx odoc_messages.cmx odoc_merge.cmx odoc_global.cmx \
odoc_exception.cmx odoc_env.cmx odoc_class.cmx odoc_args.cmx \
../utils/misc.cmx ../parsing/location.cmx ../typing/btype.cmx \
../parsing/asttypes.cmi odoc_sig.cmi
odoc_str.cmo: ../typing/types.cmi ../typing/printtyp.cmi odoc_value.cmo \
odoc_type.cmo odoc_print.cmi odoc_name.cmi odoc_misc.cmi \
odoc_messages.cmo odoc_exception.cmo odoc_class.cmo odoc_str.cmi
odoc_str.cmx: ../typing/types.cmx ../typing/printtyp.cmx odoc_value.cmx \
odoc_type.cmx odoc_print.cmx odoc_name.cmx odoc_misc.cmx \
odoc_messages.cmx odoc_exception.cmx odoc_class.cmx odoc_str.cmi
odoc_test.cmo: odoc_info.cmi
odoc_test.cmx: odoc_info.cmx
odoc_texi.cmo: odoc_to_text.cmo odoc_messages.cmo odoc_info.cmi
odoc_texi.cmx: odoc_to_text.cmx odoc_messages.cmx odoc_info.cmx
odoc_text.cmo: odoc_types.cmi odoc_text_parser.cmi odoc_text_lexer.cmo \
../parsing/parsetree.cmi ./odoc_value.cmx ./odoc_types.cmx \
./odoc_type.cmx ./odoc_print.cmx ./odoc_parameter.cmx ./odoc_name.cmx \
./odoc_module.cmx ./odoc_misc.cmx ./odoc_messages.cmx ./odoc_merge.cmx \
./odoc_global.cmx ./odoc_exception.cmx ./odoc_env.cmx ./odoc_class.cmx \
./odoc_args.cmx ../utils/misc.cmx ../parsing/location.cmx \
../typing/btype.cmx ../parsing/asttypes.cmi odoc_sig.cmi
odoc_str.cmo: ../typing/types.cmi ../typing/printtyp.cmi ./odoc_value.cmo \
./odoc_type.cmo ./odoc_print.cmi ./odoc_name.cmi ./odoc_misc.cmi \
./odoc_messages.cmo ./odoc_exception.cmo ./odoc_class.cmo odoc_str.cmi
odoc_str.cmx: ../typing/types.cmx ../typing/printtyp.cmx ./odoc_value.cmx \
./odoc_type.cmx ./odoc_print.cmx ./odoc_name.cmx ./odoc_misc.cmx \
./odoc_messages.cmx ./odoc_exception.cmx ./odoc_class.cmx odoc_str.cmi
odoc_test.cmo: ./odoc_info.cmi
odoc_test.cmx: ./odoc_info.cmx
odoc_texi.cmo: ./odoc_to_text.cmo ./odoc_messages.cmo ./odoc_info.cmi
odoc_texi.cmx: ./odoc_to_text.cmx ./odoc_messages.cmx ./odoc_info.cmx
odoc_text.cmo: ./odoc_types.cmi ./odoc_text_parser.cmi ./odoc_text_lexer.cmo \
odoc_text.cmi
odoc_text.cmx: odoc_types.cmx odoc_text_parser.cmx odoc_text_lexer.cmx \
odoc_text.cmx: ./odoc_types.cmx ./odoc_text_parser.cmx ./odoc_text_lexer.cmx \
odoc_text.cmi
odoc_text_lexer.cmo: odoc_text_parser.cmi odoc_misc.cmi
odoc_text_lexer.cmx: odoc_text_parser.cmx odoc_misc.cmx
odoc_text_parser.cmo: odoc_types.cmi odoc_misc.cmi odoc_text_parser.cmi
odoc_text_parser.cmx: odoc_types.cmx odoc_misc.cmx odoc_text_parser.cmi
odoc_to_text.cmo: odoc_messages.cmo odoc_info.cmi
odoc_to_text.cmx: odoc_messages.cmx odoc_info.cmx
odoc_type.cmo: ../typing/types.cmi odoc_types.cmi odoc_name.cmi
odoc_type.cmx: ../typing/types.cmx odoc_types.cmx odoc_name.cmx
odoc_types.cmo: odoc_messages.cmo odoc_types.cmi
odoc_types.cmx: odoc_messages.cmx odoc_types.cmi
odoc_value.cmo: ../typing/types.cmi ../typing/printtyp.cmi odoc_types.cmi \
odoc_parameter.cmo odoc_name.cmi
odoc_value.cmx: ../typing/types.cmx ../typing/printtyp.cmx odoc_types.cmx \
odoc_parameter.cmx odoc_name.cmx
odoc_analyse.cmi: odoc_module.cmo odoc_args.cmi
odoc_args.cmi: odoc_types.cmi odoc_module.cmo
odoc_text_lexer.cmo: ./odoc_text_parser.cmi ./odoc_misc.cmi
odoc_text_lexer.cmx: ./odoc_text_parser.cmx ./odoc_misc.cmx
odoc_text_parser.cmo: ./odoc_types.cmi ./odoc_misc.cmi odoc_text_parser.cmi
odoc_text_parser.cmx: ./odoc_types.cmx ./odoc_misc.cmx odoc_text_parser.cmi
odoc_to_text.cmo: ./odoc_messages.cmo ./odoc_info.cmi
odoc_to_text.cmx: ./odoc_messages.cmx ./odoc_info.cmx
odoc_type.cmo: ../typing/types.cmi ./odoc_types.cmi ./odoc_name.cmi
odoc_type.cmx: ../typing/types.cmx ./odoc_types.cmx ./odoc_name.cmx
odoc_types.cmo: ./odoc_messages.cmo odoc_types.cmi
odoc_types.cmx: ./odoc_messages.cmx odoc_types.cmi
odoc_value.cmo: ../typing/types.cmi ../typing/printtyp.cmi ./odoc_types.cmi \
./odoc_parameter.cmo ./odoc_name.cmi
odoc_value.cmx: ../typing/types.cmx ../typing/printtyp.cmx ./odoc_types.cmx \
./odoc_parameter.cmx ./odoc_name.cmx
odoc_analyse.cmi: ./odoc_module.cmo ./odoc_args.cmi
odoc_args.cmi: ./odoc_types.cmi ./odoc_module.cmo
odoc_ast.cmi: ../typing/types.cmi ../typing/typedtree.cmi ../typing/path.cmi \
../parsing/parsetree.cmi odoc_sig.cmi odoc_name.cmi odoc_module.cmo
odoc_comments.cmi: odoc_types.cmi
odoc_cross.cmi: odoc_module.cmo
odoc_dag2html.cmi: odoc_info.cmi
odoc_env.cmi: ../typing/types.cmi odoc_name.cmi
odoc_info.cmi: ../typing/types.cmi odoc_value.cmo odoc_types.cmi \
odoc_type.cmo odoc_search.cmi odoc_parameter.cmo odoc_module.cmo \
odoc_exception.cmo odoc_class.cmo
odoc_merge.cmi: odoc_types.cmi odoc_module.cmo
odoc_misc.cmi: ../typing/types.cmi odoc_types.cmi ../parsing/longident.cmi
../parsing/parsetree.cmi ./odoc_sig.cmi ./odoc_name.cmi ./odoc_module.cmo
odoc_comments.cmi: ./odoc_types.cmi ./odoc_module.cmo
odoc_cross.cmi: ./odoc_types.cmi ./odoc_module.cmo
odoc_dag2html.cmi: ./odoc_info.cmi
odoc_env.cmi: ../typing/types.cmi ./odoc_name.cmi
odoc_info.cmi: ../typing/types.cmi ./odoc_value.cmo ./odoc_types.cmi \
./odoc_type.cmo ./odoc_search.cmi ./odoc_parameter.cmo ./odoc_module.cmo \
./odoc_exception.cmo ./odoc_class.cmo
odoc_merge.cmi: ./odoc_types.cmi ./odoc_module.cmo
odoc_misc.cmi: ../typing/types.cmi ./odoc_types.cmi ../parsing/longident.cmi
odoc_name.cmi: ../typing/path.cmi ../parsing/longident.cmi \
../typing/ident.cmi
odoc_parser.cmi: odoc_types.cmi
odoc_parser.cmi: ./odoc_types.cmi
odoc_print.cmi: ../typing/types.cmi
odoc_search.cmi: odoc_value.cmo odoc_types.cmi odoc_type.cmo odoc_module.cmo \
odoc_exception.cmo odoc_class.cmo
odoc_sig.cmi: ../typing/types.cmi ../parsing/parsetree.cmi odoc_types.cmi \
odoc_type.cmo odoc_name.cmi odoc_module.cmo odoc_env.cmi odoc_class.cmo
odoc_str.cmi: ../typing/types.cmi odoc_value.cmo odoc_type.cmo \
odoc_exception.cmo odoc_class.cmo
odoc_text.cmi: odoc_types.cmi
odoc_text_parser.cmi: odoc_types.cmi
odoc_search.cmi: ./odoc_value.cmo ./odoc_types.cmi ./odoc_type.cmo \
./odoc_module.cmo ./odoc_exception.cmo ./odoc_class.cmo
odoc_sig.cmi: ../typing/types.cmi ../parsing/parsetree.cmi ./odoc_types.cmi \
./odoc_type.cmo ./odoc_name.cmi ./odoc_module.cmo ./odoc_env.cmi \
./odoc_class.cmo
odoc_str.cmi: ../typing/types.cmi ./odoc_value.cmo ./odoc_type.cmo \
./odoc_exception.cmo ./odoc_class.cmo
odoc_text.cmi: ./odoc_types.cmi
odoc_text_parser.cmi: ./odoc_types.cmi

View File

@ -1,9 +1,27 @@
TODO:
- need to fix display of type parameters for inherited classes/class types
- need to add an environment while generating to print correct links:
file foo.mli:
type u
module type M = sig type u end
module N : sig include M val f: u -> unit end
Here, in html for example, f in displayed being of type Foo.u instead of Foo.M.u
- latex: types variant polymorphes dépassent de la page quand ils sont trop longs
- utilisation nouvelles infos de Xavier: "début de rec", etc.
- xml generator
=====
Release 3.09.3:
- mod: PR#4017 new option -short-functors to use a short form to display
functors in html generator
- fix: PR#4016 (using modtype constraint to filter module elements displayed in doc)
- fix: PR#4066 (missing crossref in text from intro files)
- fix: PR#4007 (error in merging of top dependencies of modules)
- fix: PR#3981 (-dot-colors has no effect)
- mod: name resolution in cross-referencing: {!name} if name is not
found, then it is searched in the parent module/class, and in the parent
of the parent, and so on until it is found.
=====
Release 3.09.1:
- fix: remove .TP for generated man pages, use .sp instead

View File

@ -93,7 +93,6 @@ CMOFILES= odoc_config.cmo \
odoc_parser.cmo\
odoc_lexer.cmo\
odoc_see_lexer.cmo\
odoc_comments.cmo\
odoc_env.cmo\
odoc_merge.cmo\
odoc_sig.cmo\
@ -103,6 +102,7 @@ CMOFILES= odoc_config.cmo \
odoc_search.cmo\
odoc_scan.cmo\
odoc_cross.cmo\
odoc_comments.cmo\
odoc_dep.cmo\
odoc_analyse.cmo\
odoc_info.cmo
@ -211,6 +211,10 @@ $(OCAMLDOC_LIBCMXA): $(LIBCMXFILES)
manpages: stdlib_man/Pervasives.3o
dot: $(EXECMOFILES) odoc.cmo
$(OCAMLDOC_RUN) -dot -dot-reduce -o ocamldoc.dot $(INCLUDES) \
odoc*.ml
# Parsers and lexers dependencies :
###################################
odoc_text_parser.ml: odoc_text_parser.mly

View File

@ -87,7 +87,6 @@ CMOFILES= odoc_config.cmo \
odoc_parser.cmo\
odoc_lexer.cmo\
odoc_see_lexer.cmo\
odoc_comments.cmo\
odoc_env.cmo\
odoc_merge.cmo\
odoc_sig.cmo\
@ -97,6 +96,7 @@ CMOFILES= odoc_config.cmo \
odoc_search.cmo\
odoc_scan.cmo\
odoc_cross.cmo\
odoc_comments.cmo\
odoc_dep.cmo\
odoc_analyse.cmo\
odoc_info.cmo

View File

@ -21,7 +21,7 @@ open Typedtree
module M = Odoc_messages
let print_DEBUG s = print_string s ; print_newline ()
let print_DEBUG s = print_string s ; print_newline ()
(* we check if we must load a module given on the command line *)
let arg_list = Array.to_list Sys.argv
@ -42,7 +42,7 @@ let (cmo_or_cma_opt, paths) =
let _ = print_DEBUG "Fin analyse des arguments pour le dynamic load"
(** Return the real name of the file to load,
(** Return the real name of the file to load,
searching it in the paths if it is
a simple name and not in the current directory. *)
let get_real_filename name =
@ -74,16 +74,16 @@ let _ =
let real_file = get_real_filename file in
ignore(Dynlink.loadfile real_file)
with
Dynlink.Error e ->
Dynlink.Error e ->
prerr_endline (Odoc_messages.load_file_error file (Dynlink.error_message e)) ;
exit 1
| Not_found ->
prerr_endline (Odoc_messages.load_file_error file "Not_found");
exit 1
exit 1
| Sys_error s
| Failure s ->
prerr_endline (Odoc_messages.load_file_error file s);
exit 1
exit 1
let _ = print_DEBUG "Fin du chargement dynamique éventuel"
@ -101,16 +101,16 @@ let _ = Odoc_args.parse
let loaded_modules =
List.flatten
(List.map
List.flatten
(List.map
(fun f ->
Odoc_info.verbose (Odoc_messages.loading f);
try
try
let l = Odoc_analyse.load_modules f in
Odoc_info.verbose Odoc_messages.ok;
l
with Failure s ->
prerr_endline s ;
with Failure s ->
prerr_endline s ;
incr Odoc_global.errors ;
[]
)
@ -124,20 +124,20 @@ let _ =
None -> ()
| Some f ->
try Odoc_analyse.dump_modules f modules
with Failure s ->
with Failure s ->
prerr_endline s ;
incr Odoc_global.errors
let _ =
let _ =
match !Odoc_args.doc_generator with
None ->
()
| Some gen ->
| Some gen ->
Odoc_info.verbose Odoc_messages.generating_doc;
gen#generate modules;
Odoc_info.verbose Odoc_messages.ok
let _ =
let _ =
if !Odoc_global.errors > 0 then
(
prerr_endline (Odoc_messages.errors_occured !Odoc_global.errors) ;
@ -145,6 +145,6 @@ let _ =
)
else
exit 0
(* eof $Id$ *)

View File

@ -124,6 +124,8 @@ let index_only = ref false
let colorize_code = ref false
let html_short_functors = ref false
let with_header = ref true
let with_trailer = ref true
@ -256,7 +258,8 @@ let options = ref [
"-all-params", Arg.Set with_parameter_list, M.with_parameter_list ;
"-css-style", Arg.String (fun s -> css_style := Some s), M.css_style ;
"-index-only", Arg.Set index_only, M.index_only ;
"-colorize-code", Arg.Set colorize_code, M.colorize_code ^
"-colorize-code", Arg.Set colorize_code, M.colorize_code ;
"-short-functors", Arg.Set html_short_functors, M.html_short_functors ^
"\n\n *** LaTeX options ***\n";
(* latex only options *)

View File

@ -94,6 +94,10 @@ val index_only : bool ref
(** To colorize code in HTML generated documentation pages, not code pages. *)
val colorize_code : bool ref
(** To display functors in short form rather than with "functor ... -> ",
in HTML generated documentation. *)
val html_short_functors : bool ref
(** The flag which indicates if we must generate a header (for LaTeX). *)
val with_header : bool ref

View File

@ -33,10 +33,10 @@ open Odoc_types
(** This variable contains the regular expression representing a blank.*)
let blank = "[ \010\013\009\012']"
(** This variable contains the regular expression representing a blank but not a '\n'.*)
let simple_blank = "[ \013\009\012]"
(** This module is used to search for structure items by name in a Typedtree.structure.
One function creates two hash tables, which can then be used to search for elements.
Class elements do not use tables.
@ -68,12 +68,12 @@ module Typedtree_search =
| Typedtree.Tstr_module (ident, _) ->
Hashtbl.add table (M (Name.from_ident ident)) tt
| Typedtree.Tstr_recmodule mods ->
List.iter
(fun (ident,mod_expr) ->
Hashtbl.add table (M (Name.from_ident ident))
(Typedtree.Tstr_module (ident,mod_expr))
)
mods
List.iter
(fun (ident,mod_expr) ->
Hashtbl.add table (M (Name.from_ident ident))
(Typedtree.Tstr_module (ident,mod_expr))
)
mods
| Typedtree.Tstr_modtype (ident, _) ->
Hashtbl.add table (MT (Name.from_ident ident)) tt
| Typedtree.Tstr_exception (ident, _) ->
@ -388,7 +388,7 @@ module Analyser =
(*
(
match clexp.Typedtree.cl_desc with
Tclass_ident _ -> prerr_endline "Tclass_ident"
Tclass_ident _ -> prerr_endline "Tclass_ident"
| Tclass_structure _ -> prerr_endline "Tclass_structure"
| Tclass_fun _ -> prerr_endline "Tclass_fun"
| Tclass_apply _ -> prerr_endline "Tclass_apply"
@ -507,18 +507,18 @@ module Analyser =
with Not_found -> raise (Failure (Odoc_messages.inherit_classexp_not_found_in_typedtree n))
in
let (info_opt, ele_comments) =
get_comments_in_class last_pos
p_clexp.Parsetree.pcl_loc.Location.loc_start.Lexing.pos_cnum
in
get_comments_in_class last_pos
p_clexp.Parsetree.pcl_loc.Location.loc_start.Lexing.pos_cnum
in
let text_opt = match info_opt with None -> None | Some i -> i.Odoc_types.i_desc in
let name = tt_name_of_class_expr tt_clexp in
let inher =
{
ic_name = Odoc_env.full_class_or_class_type_name env name ;
ic_class = None ;
ic_text = text_opt ;
}
in
{
ic_name = Odoc_env.full_class_or_class_type_name env name ;
ic_class = None ;
ic_text = text_opt ;
}
in
iter (acc_inher @ [ inher ]) (acc_fields @ ele_comments)
p_clexp.Parsetree.pcl_loc.Location.loc_end.Lexing.pos_cnum
q
@ -826,7 +826,7 @@ module Analyser =
{ (* A VOIR : chercher dans les modules et les module types, avec quel env ? *)
im_name = tt_name_from_module_expr mod_expr ;
im_module = None ;
im_info = None ;
im_info = None ;
}
]
| _ ->
@ -842,7 +842,7 @@ module Analyser =
[]
| ((Element_included_module im) :: q, (im_repl :: im_q)) ->
(Element_included_module { im_repl with im_info = im.im_info })
:: (f (q, im_q))
:: (f (q, im_q))
| ((Element_included_module im) :: q, []) ->
(Element_included_module im) :: q
| (ele :: q, l) ->
@ -850,6 +850,94 @@ module Analyser =
in
f (module_elements, included_modules)
(** This function removes the elements of the module which does not
belong to the given module type, if the module type is expanded
and the module has a "structure" kind. *)
let rec filter_module_with_module_type_constraint m mt =
match m.m_kind, mt with
Module_struct l, Types.Tmty_signature lsig ->
m.m_kind <- Module_struct (filter_module_elements_with_module_type_constraint l lsig);
m.m_type <- mt;
| _ -> ()
(** This function removes the elements of the module type which does not
belong to the given module type, if the module type is expanded
and the module type has a "structure" kind. *)
and filter_module_type_with_module_type_constraint mtyp mt =
match mtyp.mt_kind, mt with
Some Module_type_struct l, Types.Tmty_signature lsig ->
mtyp.mt_kind <- Some (Module_type_struct (filter_module_elements_with_module_type_constraint l lsig));
mtyp.mt_type <- Some mt;
| _ -> ()
and filter_module_elements_with_module_type_constraint l lsig =
let pred ele =
let f = match ele with
Element_module m ->
(function
Types.Tsig_module (ident,t,_) ->
let n1 = Name.simple m.m_name
and n2 = Ident.name ident in
(
match n1 = n2 with
true -> filter_module_with_module_type_constraint m t; true
| false -> false
)
| _ -> false)
| Element_module_type mt ->
(function
Types.Tsig_modtype (ident,Types.Tmodtype_manifest t) ->
let n1 = Name.simple mt.mt_name
and n2 = Ident.name ident in
(
match n1 = n2 with
true -> filter_module_type_with_module_type_constraint mt t; true
| false -> false
)
| _ -> false)
| Element_value v ->
(function
Types.Tsig_value (ident,_) ->
let n1 = Name.simple v.val_name
and n2 = Ident.name ident in
n1 = n2
| _ -> false)
| Element_type t ->
(function
Types.Tsig_type (ident,_,_) ->
(* A VOIR: il est possible que le détail du type soit caché *)
let n1 = Name.simple t.ty_name
and n2 = Ident.name ident in
n1 = n2
| _ -> false)
| Element_exception e ->
(function
Types.Tsig_exception (ident,_) ->
let n1 = Name.simple e.ex_name
and n2 = Ident.name ident in
n1 = n2
| _ -> false)
| Element_class c ->
(function
Types.Tsig_class (ident,_,_) ->
let n1 = Name.simple c.cl_name
and n2 = Ident.name ident in
n1 = n2
| _ -> false)
| Element_class_type ct ->
(function
Types.Tsig_cltype (ident,_,_) ->
let n1 = Name.simple ct.clt_name
and n2 = Ident.name ident in
n1 = n2
| _ -> false)
| Element_module_comment _ -> fun _ -> true
| Element_included_module _ -> fun _ -> true
in
List.exists f lsig
in
List.filter pred l
(** Analysis of a parse tree structure with a typed tree, to return module elements.*)
let rec analyse_structure env current_module_name last_pos pos_limit parsetree typedtree =
print_DEBUG "Odoc_ast:analyse_struture";
@ -1033,13 +1121,13 @@ module Analyser =
ty_name = complete_name ;
ty_info = com_opt ;
ty_parameters =
List.map2
(fun p (co,cn,_) ->
(Odoc_env.subst_type new_env p,
co, cn)
)
tt_type_decl.Types.type_params
tt_type_decl.Types.type_variance ;
List.map2
(fun p (co,cn,_) ->
(Odoc_env.subst_type new_env p,
co, cn)
)
tt_type_decl.Types.type_params
tt_type_decl.Types.type_variance ;
ty_kind = kind ;
ty_manifest =
(match tt_type_decl.Types.type_manifest with
@ -1047,12 +1135,12 @@ module Analyser =
| Some t -> Some (Odoc_env.subst_type new_env t));
ty_loc = { loc_impl = Some (!file_name, loc_start) ; loc_inter = None } ;
ty_code =
(
if !Odoc_args.keep_code then
Some (get_string_of_file loc_start new_end)
else
None
) ;
(
if !Odoc_args.keep_code then
Some (get_string_of_file loc_start new_end)
else
None
) ;
}
in
let (maybe_more2, info_after_opt) =
@ -1086,13 +1174,13 @@ module Analyser =
ex_args = List.map (Odoc_env.subst_type new_env) tt_excep_decl ;
ex_alias = None ;
ex_loc = { loc_impl = Some (!file_name, loc.Location.loc_start.Lexing.pos_cnum) ; loc_inter = None } ;
ex_code =
ex_code =
(
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
Some (get_string_of_file loc_start loc_end)
else
None
) ;
) ;
}
in
(0, new_env, [ Element_exception new_ex ])
@ -1133,18 +1221,18 @@ module Analyser =
module_expr
tt_module_expr
in
let code =
if !Odoc_args.keep_code then
let loc = module_expr.Parsetree.pmod_loc in
let st = loc.Location.loc_start.Lexing.pos_cnum in
let en = loc.Location.loc_end.Lexing.pos_cnum in
Some (get_string_of_file st en)
else
None
in
let new_module =
{ new_module_pre with m_code = code }
in
let code =
if !Odoc_args.keep_code then
let loc = module_expr.Parsetree.pmod_loc in
let st = loc.Location.loc_start.Lexing.pos_cnum in
let en = loc.Location.loc_end.Lexing.pos_cnum in
Some (get_string_of_file st en)
else
None
in
let new_module =
{ new_module_pre with m_code = code }
in
let new_env = Odoc_env.add_module env new_module.m_name in
let new_env2 =
match new_module.m_type with
@ -1163,14 +1251,14 @@ module Analyser =
)
| Parsetree.Pstr_recmodule mods ->
(* A VOIR ICI ca merde avec /work/tmp/graph.ml: pas de lien avec les module type
dans les contraintes sur les modules *)
let new_env =
(* A VOIR ICI pb: pas de lien avec les module type
dans les contraintes sur les modules *)
let new_env =
List.fold_left
(fun acc_env (name, _, mod_exp) ->
let complete_name = Name.concat current_module_name name in
let e = Odoc_env.add_module acc_env complete_name in
let tt_mod_exp =
let e = Odoc_env.add_module acc_env complete_name in
let tt_mod_exp =
try Typedtree_search.search_module table name
with Not_found -> raise (Failure (Odoc_messages.module_not_found_in_typedtree complete_name))
in
@ -1181,12 +1269,12 @@ module Analyser =
None
mod_exp
tt_mod_exp
in
match new_module.m_type with
in
match new_module.m_type with
Types.Tmty_signature s ->
Odoc_env.add_signature e new_module.m_name
~rel: (Name.simple new_module.m_name) s
| _ ->
~rel: (Name.simple new_module.m_name) s
| _ ->
e
)
env
@ -1209,14 +1297,14 @@ module Analyser =
else
get_comments_in_module last_pos loc_start
in
let new_module = analyse_module
let new_module = analyse_module
new_env
current_module_name
name
com_opt
mod_exp
tt_mod_exp
in
in
let eles = f loc_end q in
ele_comments @ ((Element_module new_module) :: eles)
in
@ -1371,7 +1459,7 @@ module Analyser =
{
im_name = "dummy" ;
im_module = None ;
im_info = comment_opt ;
im_info = comment_opt ;
}
in
(0, env, [ Element_included_module im ]) (* A VOIR : étendre l'environnement ? avec quoi ? *)
@ -1383,16 +1471,16 @@ module Analyser =
let pos_end = p_module_expr.Parsetree.pmod_loc.Location.loc_end.Lexing.pos_cnum in
let modtype =
(* A VOIR : Odoc_env.subst_module_type env ? *)
tt_module_expr.Typedtree.mod_type
tt_module_expr.Typedtree.mod_type
in
let m_code_intf =
match p_module_expr.Parsetree.pmod_desc with
Parsetree.Pmod_constraint (_, pmodule_type) ->
let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
match p_module_expr.Parsetree.pmod_desc with
Parsetree.Pmod_constraint (_, pmodule_type) ->
let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
let loc_end = pmodule_type.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
Some (get_string_of_file loc_start loc_end)
| _ ->
None
Some (get_string_of_file loc_start loc_end)
| _ ->
None
in
let m_base =
{
@ -1404,9 +1492,9 @@ module Analyser =
m_kind = Module_struct [] ;
m_loc = { loc_impl = Some (!file_name, pos_start) ; loc_inter = None } ;
m_top_deps = [] ;
m_code = None ; (* code is set by the caller, after the module is created *)
m_code_intf = m_code_intf ;
m_text_only = false ;
m_code = None ; (* code is set by the caller, after the module is created *)
m_code_intf = m_code_intf ;
m_text_only = false ;
}
in
match (p_module_expr.Parsetree.pmod_desc, tt_module_expr.Typedtree.mod_desc) with
@ -1424,24 +1512,24 @@ module Analyser =
| (Parsetree.Pmod_functor (_, pmodule_type, p_module_expr2),
Typedtree.Tmod_functor (ident, mtyp, tt_module_expr2)) ->
let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
let loc_end = pmodule_type.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
let mp_type_code = get_string_of_file loc_start loc_end in
print_DEBUG (Printf.sprintf "mp_type_code=%s" mp_type_code);
let mp_name = Name.from_ident ident in
let mp_kind = Sig.analyse_module_type_kind env
current_module_name pmodule_type mtyp
in
let mp_type_code = get_string_of_file loc_start loc_end in
print_DEBUG (Printf.sprintf "mp_type_code=%s" mp_type_code);
let mp_name = Name.from_ident ident in
let mp_kind = Sig.analyse_module_type_kind env
current_module_name pmodule_type mtyp
in
let param =
{
mp_name = mp_name ;
mp_type = Odoc_env.subst_module_type env mtyp ;
mp_type_code = mp_type_code ;
mp_kind = mp_kind ;
mp_type_code = mp_type_code ;
mp_kind = mp_kind ;
}
in
let dummy_complete_name = (*Name.concat "__"*) param.mp_name in
(* TODO: A VOIR CE __ *)
(* TODO: A VOIR CE __ *)
let new_env = Odoc_env.add_module env dummy_complete_name in
let m_base2 = analyse_module
new_env
@ -1458,9 +1546,9 @@ module Analyser =
Typedtree.Tmod_apply (tt_module_expr1, tt_module_expr2, _))
| (Parsetree.Pmod_apply (p_module_expr1, p_module_expr2),
Typedtree.Tmod_constraint
({ Typedtree.mod_desc = Typedtree.Tmod_apply (tt_module_expr1, tt_module_expr2, _)},
({ Typedtree.mod_desc = Typedtree.Tmod_apply (tt_module_expr1, tt_module_expr2, _)},
_, _)
) ->
) ->
let m1 = analyse_module
env
current_module_name
@ -1481,12 +1569,7 @@ module Analyser =
| (Parsetree.Pmod_constraint (p_module_expr2, p_modtype),
Typedtree.Tmod_constraint (tt_module_expr2, tt_modtype, _)) ->
print_DEBUG ("Odoc_ast: case Parsetree.Pmod_constraint + Typedtree.Tmod_constraint "^module_name);
(* we create the module with p_module_expr2 and tt_module_expr2
but we change its type according to the constraint.
A VOIR : est-ce que c'est bien ?
*)
print_DEBUG ("Odoc_ast: case Parsetree.Pmod_constraint + Typedtree.Tmod_constraint "^module_name);
let m_base2 = analyse_module
env
current_module_name
@ -1495,58 +1578,54 @@ module Analyser =
p_module_expr2
tt_module_expr2
in
let mtkind = Sig.analyse_module_type_kind
env
let mtkind = Sig.analyse_module_type_kind env
(Name.concat current_module_name "??")
p_modtype tt_modtype
in
let tt_modtype = Odoc_env.subst_module_type env tt_modtype in
filter_module_with_module_type_constraint m_base2 tt_modtype;
{
m_base with
m_type = Odoc_env.subst_module_type env tt_modtype ;
m_kind = Module_constraint (m_base2.m_kind,
mtkind)
(* Module_type_alias { mta_name = "Not analyzed" ;
mta_module = None })
*)
m_type = tt_modtype ;
m_kind = Module_constraint (m_base2.m_kind, mtkind) ;
}
| (Parsetree.Pmod_structure p_structure,
Typedtree.Tmod_constraint
({ Typedtree.mod_desc = Typedtree.Tmod_structure tt_structure},
tt_modtype, _)
) ->
(* needed for recursive modules *)
({ Typedtree.mod_desc = Typedtree.Tmod_structure tt_structure},
tt_modtype, _)
) ->
(* needed for recursive modules *)
print_DEBUG ("Odoc_ast: case Parsetree.Pmod_structure + Typedtree.Tmod_constraint "^module_name);
let elements = analyse_structure env complete_name pos_start pos_end p_structure tt_structure in
print_DEBUG ("Odoc_ast: case Parsetree.Pmod_structure + Typedtree.Tmod_constraint "^module_name);
let elements = analyse_structure env complete_name pos_start pos_end p_structure tt_structure in
(* we must complete the included modules *)
let included_modules_from_tt = tt_get_included_module_list tt_structure in
let elements2 = replace_dummy_included_modules elements included_modules_from_tt in
{ m_base with
m_type = Odoc_env.subst_module_type env tt_modtype ;
m_kind = Module_struct elements2 ;
}
m_type = Odoc_env.subst_module_type env tt_modtype ;
m_kind = Module_struct elements2 ;
}
| (parsetree, typedtree) ->
(*DEBUG*)let s_parse =
(*DEBUG*) match parsetree with
(*DEBUG*) Parsetree.Pmod_ident _ -> "Pmod_ident"
(*DEBUG*) | Parsetree.Pmod_structure _ -> "Pmod_structure"
(*DEBUG*) | Parsetree.Pmod_functor _ -> "Pmod_functor"
(*DEBUG*) | Parsetree.Pmod_apply _ -> "Pmod_apply"
(*DEBUG*) | Parsetree.Pmod_constraint _ -> "Pmod_constraint"
(*DEBUG*)in
(*DEBUG*)let s_typed =
(*DEBUG*) | Parsetree.Pmod_structure _ -> "Pmod_structure"
(*DEBUG*) | Parsetree.Pmod_functor _ -> "Pmod_functor"
(*DEBUG*) | Parsetree.Pmod_apply _ -> "Pmod_apply"
(*DEBUG*) | Parsetree.Pmod_constraint _ -> "Pmod_constraint"
(*DEBUG*)in
(*DEBUG*)let s_typed =
(*DEBUG*) match typedtree with
(*DEBUG*) Typedtree.Tmod_ident _ -> "Tmod_ident"
(*DEBUG*) | Typedtree.Tmod_structure _ -> "Tmod_structure"
(*DEBUG*) | Typedtree.Tmod_functor _ -> "Tmod_functor"
(*DEBUG*) | Typedtree.Tmod_apply _ -> "Tmod_apply"
(*DEBUG*) | Typedtree.Tmod_constraint _ -> "Tmod_constraint"
(*DEBUG*)in
(*DEBUG*)let code = get_string_of_file pos_start pos_end in
print_DEBUG (Printf.sprintf "code=%s\ns_parse=%s\ns_typed=%s\n" code s_parse s_typed);
(*DEBUG*) | Typedtree.Tmod_structure _ -> "Tmod_structure"
(*DEBUG*) | Typedtree.Tmod_functor _ -> "Tmod_functor"
(*DEBUG*) | Typedtree.Tmod_apply _ -> "Tmod_apply"
(*DEBUG*) | Typedtree.Tmod_constraint _ -> "Tmod_constraint"
(*DEBUG*)in
(*DEBUG*)let code = get_string_of_file pos_start pos_end in
print_DEBUG (Printf.sprintf "code=%s\ns_parse=%s\ns_typed=%s\n" code s_parse s_typed);
raise (Failure "analyse_module: parsetree and typedtree don't match.")
@ -1586,12 +1665,8 @@ module Analyser =
m_kind = kind ;
m_loc = { loc_impl = Some (!file_name, 0) ; loc_inter = None } ;
m_top_deps = [] ;
m_code = (if !Odoc_args.keep_code then Some !file else None) ;
m_code_intf = None ;
m_text_only = false ;
m_code = (if !Odoc_args.keep_code then Some !file else None) ;
m_code_intf = None ;
m_text_only = false ;
}
end
(* eof $Id$ *)

View File

@ -333,12 +333,11 @@ let info_of_string s =
None -> dummy
| Some i -> i
let info_of_comment_file f =
let info_of_comment_file modlist f =
try
let s = Odoc_misc.input_file_as_string f in
info_of_string s
let i = info_of_string s in
Odoc_cross.assoc_comments_info "" modlist i
with
Sys_error s ->
failwith s
(* eof $Id$ *)

View File

@ -66,7 +66,9 @@ val info_of_string : string -> Odoc_types.info
(** [info_of_comment_file file] parses the given file
and return an {!Odoc_types.info} structure. The content of the
file must have the same syntax as the content of a special comment.
The given module list is used for cross reference.
@raise Failure is the file could not be opened or there is a
syntax error.
*)
val info_of_comment_file : string -> Odoc_types.info
val info_of_comment_file :
Odoc_module.t_module list -> string -> Odoc_types.info

View File

@ -87,8 +87,8 @@ let rec build_alias_list = function
(
match m.m_kind with
Module_alias ma ->
Hashtbl.add module_aliases m.m_name (ma.ma_name, Alias_to_resolve);
Hashtbl.add module_and_modtype_aliases m.m_name (ma.ma_name, Alias_to_resolve)
Hashtbl.add module_aliases m.m_name (ma.ma_name, Alias_to_resolve);
Hashtbl.add module_and_modtype_aliases m.m_name (ma.ma_name, Alias_to_resolve)
| _ -> ()
);
build_alias_list q
@ -96,8 +96,8 @@ let rec build_alias_list = function
(
match mt.mt_kind with
Some (Module_type_alias mta) ->
Hashtbl.add module_and_modtype_aliases
mt.mt_name (mta.mta_name, Alias_to_resolve)
Hashtbl.add module_and_modtype_aliases
mt.mt_name (mta.mta_name, Alias_to_resolve)
| _ -> ()
);
build_alias_list q
@ -106,8 +106,8 @@ let rec build_alias_list = function
match e.ex_alias with
None -> ()
| Some ea ->
Hashtbl.add exception_aliases
e.ex_name (ea.ea_name,Alias_to_resolve)
Hashtbl.add exception_aliases
e.ex_name (ea.ea_name,Alias_to_resolve)
);
build_alias_list q
| _ :: q ->
@ -126,26 +126,26 @@ let name_alias =
let rec f t name =
try
match Hashtbl.find t name with
(s, Alias_resolved) -> s
| (s, Alias_to_resolve) -> f t s
(s, Alias_resolved) -> s
| (s, Alias_to_resolve) -> f t s
with
Not_found ->
try
Hashtbl.iter
(fun n2 (n3, _) ->
if Name.prefix n2 name then
let ln2 = String.length n2 in
let s = n3^(String.sub name ln2 ((String.length name) - ln2)) in
raise (Found s)
)
t ;
Hashtbl.replace t name (name, Alias_resolved);
name
with
Found s ->
let s2 = f t s in
Hashtbl.replace t s2 (s2, Alias_resolved);
s2
try
Hashtbl.iter
(fun n2 (n3, _) ->
if Name.prefix n2 name then
let ln2 = String.length n2 in
let s = n3^(String.sub name ln2 ((String.length name) - ln2)) in
raise (Found s)
)
t ;
Hashtbl.replace t name (name, Alias_resolved);
name
with
Found s ->
let s2 = f t s in
Hashtbl.replace t s2 (s2, Alias_resolved);
s2
in
fun name alias_tbl ->
f alias_tbl name
@ -169,7 +169,7 @@ let add_known_element name k =
Not_found ->
known_elements := Ele_map.add name [k] !known_elements
let get_known_elements name =
let rec get_known_elements name =
try Ele_map.find name !known_elements
with Not_found -> []
@ -252,10 +252,10 @@ class scan =
add_known_element e.ex_name (Odoc_search.Res_exception e)
method scan_attribute a =
add_known_element a.att_value.val_name
(Odoc_search.Res_attribute a)
(Odoc_search.Res_attribute a)
method scan_method m =
add_known_element m.met_value.val_name
(Odoc_search.Res_method m)
(Odoc_search.Res_method m)
method scan_class_pre c =
add_known_element c.cl_name (Odoc_search.Res_class c);
true
@ -576,118 +576,165 @@ and associate_in_class_type module_list (acc_b_modif, acc_incomplete_top_module_
let ao = Odoc_misc.apply_opt
let rec assoc_comments_text_elements module_list t_ele =
let not_found_of_kind kind name =
(match kind with
RK_module -> Odoc_messages.cross_module_not_found
| RK_module_type -> Odoc_messages.cross_module_type_not_found
| RK_class -> Odoc_messages.cross_class_not_found
| RK_class_type -> Odoc_messages.cross_class_type_not_found
| RK_value -> Odoc_messages.cross_value_not_found
| RK_type -> Odoc_messages.cross_type_not_found
| RK_exception -> Odoc_messages.cross_exception_not_found
| RK_attribute -> Odoc_messages.cross_attribute_not_found
| RK_method -> Odoc_messages.cross_method_not_found
| RK_section _ -> Odoc_messages.cross_section_not_found
) name
let rec assoc_comments_text_elements parent_name module_list t_ele =
match t_ele with
| Raw _
| Code _
| CodePre _
| Latex _
| Verbatim _ -> t_ele
| Bold t -> Bold (assoc_comments_text module_list t)
| Italic t -> Italic (assoc_comments_text module_list t)
| Center t -> Center (assoc_comments_text module_list t)
| Left t -> Left (assoc_comments_text module_list t)
| Right t -> Right (assoc_comments_text module_list t)
| Emphasize t -> Emphasize (assoc_comments_text module_list t)
| List l -> List (List.map (assoc_comments_text module_list) l)
| Enum l -> Enum (List.map (assoc_comments_text module_list) l)
| Bold t -> Bold (assoc_comments_text parent_name module_list t)
| Italic t -> Italic (assoc_comments_text parent_name module_list t)
| Center t -> Center (assoc_comments_text parent_name module_list t)
| Left t -> Left (assoc_comments_text parent_name module_list t)
| Right t -> Right (assoc_comments_text parent_name module_list t)
| Emphasize t -> Emphasize (assoc_comments_text parent_name module_list t)
| List l -> List (List.map (assoc_comments_text parent_name module_list) l)
| Enum l -> Enum (List.map (assoc_comments_text parent_name module_list) l)
| Newline -> Newline
| Block t -> Block (assoc_comments_text module_list t)
| Superscript t -> Superscript (assoc_comments_text module_list t)
| Subscript t -> Subscript (assoc_comments_text module_list t)
| Title (n, l_opt, t) -> Title (n, l_opt, (assoc_comments_text module_list t))
| Link (s, t) -> Link (s, (assoc_comments_text module_list t))
| Ref (name, None) ->
| Block t -> Block (assoc_comments_text parent_name module_list t)
| Superscript t -> Superscript (assoc_comments_text parent_name module_list t)
| Subscript t -> Subscript (assoc_comments_text parent_name module_list t)
| Title (n, l_opt, t) -> Title (n, l_opt, (assoc_comments_text parent_name module_list t))
| Link (s, t) -> Link (s, (assoc_comments_text parent_name module_list t))
| Ref (initial_name, None) ->
(
match get_known_elements name with
[] ->
(
try
let re = Str.regexp ("^"^(Str.quote name)^"$") in
let t = Odoc_search.find_section module_list re in
let v2 = (name, Some (RK_section t)) in
add_verified v2 ;
Ref (name, Some (RK_section t))
with
Not_found ->
Odoc_messages.pwarning (Odoc_messages.cross_element_not_found name);
Ref (name, None)
)
| ele :: _ ->
(* we look for the first element with this name *)
let kind =
match ele with
Odoc_search.Res_module _ -> RK_module
| Odoc_search.Res_module_type _ -> RK_module_type
| Odoc_search.Res_class _ -> RK_class
| Odoc_search.Res_class_type _ -> RK_class_type
| Odoc_search.Res_value _ -> RK_value
| Odoc_search.Res_type _ -> RK_type
| Odoc_search.Res_exception _ -> RK_exception
| Odoc_search.Res_attribute _ -> RK_attribute
| Odoc_search.Res_method _ -> RK_method
| Odoc_search.Res_section (_ ,t)-> assert false
in
add_verified (name, Some kind) ;
Ref (name, Some kind)
let rec iter_parent ?parent_name name =
let res =
match get_known_elements name with
[] ->
(
try
let re = Str.regexp ("^"^(Str.quote name)^"$") in
let t = Odoc_search.find_section module_list re in
let v2 = (name, Some (RK_section t)) in
add_verified v2 ;
(name, Some (RK_section t))
with
Not_found ->
(name, None)
)
| ele :: _ ->
(* we look for the first element with this name *)
let (name, kind) =
match ele with
Odoc_search.Res_module m -> (m.m_name, RK_module)
| Odoc_search.Res_module_type mt -> (mt.mt_name, RK_module_type)
| Odoc_search.Res_class c -> (c.cl_name, RK_class)
| Odoc_search.Res_class_type ct -> (ct.clt_name, RK_class_type)
| Odoc_search.Res_value v -> (v.val_name, RK_value)
| Odoc_search.Res_type t -> (t.ty_name, RK_type)
| Odoc_search.Res_exception e -> (e.ex_name, RK_exception)
| Odoc_search.Res_attribute a -> (a.att_value.val_name, RK_attribute)
| Odoc_search.Res_method m -> (m.met_value.val_name, RK_method)
| Odoc_search.Res_section (_ ,t)-> assert false
in
add_verified (name, Some kind) ;
(name, Some kind)
in
match res with
| (name, Some k) -> Ref (name, Some k)
| (_, None) ->
match parent_name with
None ->
Odoc_messages.pwarning (Odoc_messages.cross_element_not_found initial_name);
Ref (initial_name, None)
| Some p ->
let parent_name =
match Name.father p with
"" -> None
| s -> Some s
in
iter_parent ?parent_name (Name.concat p initial_name)
in
iter_parent ~parent_name initial_name
)
| Ref (name, Some kind) ->
| Ref (initial_name, Some kind) ->
(
let v = (name, Some kind) in
if was_verified v then
Ref (name, Some kind)
else
match kind with
| RK_section _ ->
(
(** we just verify that we find an element of this kind with this name *)
try
let re = Str.regexp ("^"^(Str.quote name)^"$") in
let t = Odoc_search.find_section module_list re in
let v2 = (name, Some (RK_section t)) in
add_verified v2 ;
Ref (name, Some (RK_section t))
with
Not_found ->
Odoc_messages.pwarning (Odoc_messages.cross_section_not_found name);
Ref (name, None)
)
| _ ->
let (f,f_mes) =
match kind with
RK_module -> module_exists, Odoc_messages.cross_module_not_found
| RK_module_type -> module_type_exists, Odoc_messages.cross_module_type_not_found
| RK_class -> class_exists, Odoc_messages.cross_class_not_found
| RK_class_type -> class_type_exists, Odoc_messages.cross_class_type_not_found
| RK_value -> value_exists, Odoc_messages.cross_value_not_found
| RK_type -> type_exists, Odoc_messages.cross_type_not_found
| RK_exception -> exception_exists, Odoc_messages.cross_exception_not_found
| RK_attribute -> attribute_exists, Odoc_messages.cross_attribute_not_found
| RK_method -> method_exists, Odoc_messages.cross_method_not_found
| RK_section _ -> assert false
in
if f name then
(
add_verified v ;
Ref (name, Some kind)
)
else
(
Odoc_messages.pwarning (f_mes name);
Ref (name, None)
)
let rec iter_parent ?parent_name name =
let v = (name, Some kind) in
if was_verified v then
Ref (name, Some kind)
else
let res =
match kind with
| RK_section _ ->
(
(** we just verify that we find an element of this kind with this name *)
try
let re = Str.regexp ("^"^(Str.quote name)^"$") in
let t = Odoc_search.find_section module_list re in
let v2 = (name, Some (RK_section t)) in
add_verified v2 ;
(name, Some (RK_section t))
with
Not_found ->
(name, None)
)
| _ ->
let f =
match kind with
RK_module -> module_exists
| RK_module_type -> module_type_exists
| RK_class -> class_exists
| RK_class_type -> class_type_exists
| RK_value -> value_exists
| RK_type -> type_exists
| RK_exception -> exception_exists
| RK_attribute -> attribute_exists
| RK_method -> method_exists
| RK_section _ -> assert false
in
if f name then
(
add_verified v ;
(name, Some kind)
)
else
(name, None)
in
match res with
| (name, Some k) -> Ref (name, Some k)
| (_, None) ->
match parent_name with
None ->
Odoc_messages.pwarning (not_found_of_kind kind initial_name);
Ref (initial_name, None)
| Some p ->
let parent_name =
match Name.father p with
"" -> None
| s -> Some s
in
iter_parent ?parent_name (Name.concat p initial_name)
in
iter_parent ~parent_name initial_name
)
| Module_list l ->
Module_list l
| Index_list ->
Index_list
| Custom (s,t) -> Custom (s, (assoc_comments_text module_list t))
| Custom (s,t) -> Custom (s, (assoc_comments_text parent_name module_list t))
and assoc_comments_text module_list text =
List.map (assoc_comments_text_elements module_list) text
and assoc_comments_text parent_name module_list text =
List.map (assoc_comments_text_elements parent_name module_list) text
and assoc_comments_info module_list i =
let ft = assoc_comments_text module_list in
and assoc_comments_info parent_name module_list i =
let ft = assoc_comments_text parent_name module_list in
{
i with
i_desc = ao ft i.i_desc ;
@ -700,133 +747,155 @@ and assoc_comments_info module_list i =
}
let rec assoc_comments_module_element module_list m_ele =
let rec assoc_comments_module_element parent_name module_list m_ele =
match m_ele with
Element_module m -> Element_module (assoc_comments_module module_list m)
| Element_module_type mt -> Element_module_type (assoc_comments_module_type module_list mt)
| Element_included_module _ -> m_ele (* don't go down into the aliases *)
| Element_class c -> Element_class (assoc_comments_class module_list c)
| Element_class_type ct -> Element_class_type (assoc_comments_class_type module_list ct)
| Element_value v -> Element_value (assoc_comments_value module_list v)
| Element_exception e -> Element_exception (assoc_comments_exception module_list e)
| Element_type t -> Element_type (assoc_comments_type module_list t)
| Element_module_comment t -> Element_module_comment (assoc_comments_text module_list t)
Element_module m ->
Element_module (assoc_comments_module module_list m)
| Element_module_type mt ->
Element_module_type (assoc_comments_module_type module_list mt)
| Element_included_module _ ->
m_ele (* don't go down into the aliases *)
| Element_class c ->
Element_class (assoc_comments_class module_list c)
| Element_class_type ct ->
Element_class_type (assoc_comments_class_type module_list ct)
| Element_value v ->
Element_value (assoc_comments_value module_list v)
| Element_exception e ->
Element_exception (assoc_comments_exception module_list e)
| Element_type t ->
Element_type (assoc_comments_type module_list t)
| Element_module_comment t ->
Element_module_comment (assoc_comments_text parent_name module_list t)
and assoc_comments_class_element module_list c_ele =
and assoc_comments_class_element parent_name module_list c_ele =
match c_ele with
Class_attribute a -> Class_attribute (assoc_comments_attribute module_list a)
| Class_method m -> Class_method (assoc_comments_method module_list m)
| Class_comment t -> Class_comment (assoc_comments_text module_list t)
Class_attribute a ->
Class_attribute (assoc_comments_attribute module_list a)
| Class_method m ->
Class_method (assoc_comments_method module_list m)
| Class_comment t ->
Class_comment (assoc_comments_text parent_name module_list t)
and assoc_comments_module_kind module_list mk =
and assoc_comments_module_kind parent_name module_list mk =
match mk with
| Module_struct eles ->
Module_struct (List.map (assoc_comments_module_element module_list) eles)
Module_struct
(List.map (assoc_comments_module_element parent_name module_list) eles)
| Module_alias _
| Module_functor _ ->
mk
| Module_apply (mk1, mk2) ->
Module_apply (assoc_comments_module_kind module_list mk1,
assoc_comments_module_kind module_list mk2)
Module_apply (assoc_comments_module_kind parent_name module_list mk1,
assoc_comments_module_kind parent_name module_list mk2)
| Module_with (mtk, s) ->
Module_with (assoc_comments_module_type_kind module_list mtk, s)
Module_with (assoc_comments_module_type_kind parent_name module_list mtk, s)
| Module_constraint (mk1, mtk) ->
Module_constraint (assoc_comments_module_kind module_list mk1,
assoc_comments_module_type_kind module_list mtk)
Module_constraint
(assoc_comments_module_kind parent_name module_list mk1,
assoc_comments_module_type_kind parent_name module_list mtk)
and assoc_comments_module_type_kind module_list mtk =
and assoc_comments_module_type_kind parent_name module_list mtk =
match mtk with
| Module_type_struct eles ->
Module_type_struct (List.map (assoc_comments_module_element module_list) eles)
Module_type_struct
(List.map (assoc_comments_module_element parent_name module_list) eles)
| Module_type_functor (params, mtk1) ->
Module_type_functor (params, assoc_comments_module_type_kind module_list mtk1)
Module_type_functor
(params, assoc_comments_module_type_kind parent_name module_list mtk1)
| Module_type_alias _ ->
mtk
| Module_type_with (mtk1, s) ->
Module_type_with (assoc_comments_module_type_kind module_list mtk1, s)
Module_type_with
(assoc_comments_module_type_kind parent_name module_list mtk1, s)
and assoc_comments_class_kind module_list ck =
and assoc_comments_class_kind parent_name module_list ck =
match ck with
Class_structure (inher, eles) ->
let inher2 =
List.map
(fun ic -> { ic with
ic_text = ao (assoc_comments_text module_list) ic.ic_text })
(fun ic ->
{ ic with
ic_text = ao (assoc_comments_text parent_name module_list) ic.ic_text })
inher
in
Class_structure (inher2, List.map (assoc_comments_class_element module_list) eles)
Class_structure
(inher2, List.map (assoc_comments_class_element parent_name module_list) eles)
| Class_apply _
| Class_constr _ -> ck
| Class_constraint (ck1, ctk) ->
Class_constraint (assoc_comments_class_kind module_list ck1,
assoc_comments_class_type_kind module_list ctk)
Class_constraint (assoc_comments_class_kind parent_name module_list ck1,
assoc_comments_class_type_kind parent_name module_list ctk)
and assoc_comments_class_type_kind module_list ctk =
and assoc_comments_class_type_kind parent_name module_list ctk =
match ctk with
Class_signature (inher, eles) ->
let inher2 =
List.map
(fun ic -> { ic with
ic_text = ao (assoc_comments_text module_list) ic.ic_text })
ic_text = ao (assoc_comments_text parent_name module_list) ic.ic_text })
inher
in
Class_signature (inher2, List.map (assoc_comments_class_element module_list) eles)
Class_signature (inher2, List.map (assoc_comments_class_element parent_name module_list) eles)
| Class_type _ -> ctk
and assoc_comments_module module_list m =
m.m_info <- ao (assoc_comments_info module_list) m.m_info ;
m.m_kind <- assoc_comments_module_kind module_list m.m_kind ;
m.m_info <- ao (assoc_comments_info m.m_name module_list) m.m_info ;
m.m_kind <- assoc_comments_module_kind m.m_name module_list m.m_kind ;
m
and assoc_comments_module_type module_list mt =
mt.mt_info <- ao (assoc_comments_info module_list) mt.mt_info ;
mt.mt_kind <- ao (assoc_comments_module_type_kind module_list) mt.mt_kind ;
mt.mt_info <- ao (assoc_comments_info mt.mt_name module_list) mt.mt_info ;
mt.mt_kind <- ao (assoc_comments_module_type_kind mt.mt_name module_list) mt.mt_kind ;
mt
and assoc_comments_class module_list c =
c.cl_info <- ao (assoc_comments_info module_list) c.cl_info ;
c.cl_kind <- assoc_comments_class_kind module_list c.cl_kind ;
assoc_comments_parameter_list module_list c.cl_parameters;
c.cl_info <- ao (assoc_comments_info c.cl_name module_list) c.cl_info ;
c.cl_kind <- assoc_comments_class_kind c.cl_name module_list c.cl_kind ;
assoc_comments_parameter_list c.cl_name module_list c.cl_parameters;
c
and assoc_comments_class_type module_list ct =
ct.clt_info <- ao (assoc_comments_info module_list) ct.clt_info ;
ct.clt_kind <- assoc_comments_class_type_kind module_list ct.clt_kind ;
ct.clt_info <- ao (assoc_comments_info ct.clt_name module_list) ct.clt_info ;
ct.clt_kind <- assoc_comments_class_type_kind ct.clt_name module_list ct.clt_kind ;
ct
and assoc_comments_parameter module_list p =
and assoc_comments_parameter parent_name module_list p =
match p with
Simple_name sn ->
sn.sn_text <- ao (assoc_comments_text module_list) sn.sn_text
sn.sn_text <- ao (assoc_comments_text parent_name module_list) sn.sn_text
| Tuple (l, t) ->
List.iter (assoc_comments_parameter module_list) l
List.iter (assoc_comments_parameter parent_name module_list) l
and assoc_comments_parameter_list module_list pl =
List.iter (assoc_comments_parameter module_list) pl
and assoc_comments_parameter_list parent_name module_list pl =
List.iter (assoc_comments_parameter parent_name module_list) pl
and assoc_comments_value module_list v =
v.val_info <- ao (assoc_comments_info module_list) v.val_info ;
assoc_comments_parameter_list module_list v.val_parameters;
let parent = Name.father v.val_name in
v.val_info <- ao (assoc_comments_info parent module_list) v.val_info ;
assoc_comments_parameter_list parent module_list v.val_parameters;
v
and assoc_comments_exception module_list e =
e.ex_info <- ao (assoc_comments_info module_list) e.ex_info ;
let parent = Name.father e.ex_name in
e.ex_info <- ao (assoc_comments_info parent module_list) e.ex_info ;
e
and assoc_comments_type module_list t =
t.ty_info <- ao (assoc_comments_info module_list) t.ty_info ;
let parent = Name.father t.ty_name in
t.ty_info <- ao (assoc_comments_info parent module_list) t.ty_info ;
(match t.ty_kind with
Type_abstract -> ()
| Type_variant (vl, _) ->
List.iter
(fun vc -> vc.vc_text <- ao (assoc_comments_text module_list) vc.vc_text)
(fun vc -> vc.vc_text <- ao (assoc_comments_text parent module_list) vc.vc_text)
vl
| Type_record (fl, _) ->
List.iter
(fun rf -> rf.rf_text <- ao (assoc_comments_text module_list) rf.rf_text)
(fun rf -> rf.rf_text <- ao (assoc_comments_text parent module_list) rf.rf_text)
fl
);
t
@ -836,8 +905,9 @@ and assoc_comments_attribute module_list a =
a
and assoc_comments_method module_list m =
let parent_name = Name.father m.met_value.val_name in
let _ = assoc_comments_value module_list m.met_value in
assoc_comments_parameter_list module_list m.met_value.val_parameters;
assoc_comments_parameter_list parent_name module_list m.met_value.val_parameters;
m
@ -897,6 +967,3 @@ let associate module_list =
(* Find a type for each name of element which is referenced in comments. *)
ignore (associate_type_of_elements_in_comments module_list)
(* eof $Id$ *)

View File

@ -15,3 +15,6 @@
val associate : Odoc_module.t_module list -> unit
val assoc_comments_info :
string -> Odoc_module.t_module list ->
Odoc_types.info -> Odoc_types.info

View File

@ -11,7 +11,7 @@
(* $Id$ *)
(** Definition of a class which outputs a dot file showing
(** Definition of a class which outputs a dot file showing
top modules dependencies.*)
open Odoc_info
@ -32,7 +32,7 @@ class dot =
val mutable colors = !Args.dot_colors
(** Graph header. *)
method header =
method header =
"digraph G {\n"^
" size=\"10,7.5\";\n"^
" ratio=\"fill\";\n"^
@ -43,14 +43,14 @@ class dot =
method get_one_color =
match colors with
[] -> None
| h :: q ->
| h :: q ->
colors <- q ;
Some h
method node_color s =
try Some (List.assoc s loc_colors)
with
Not_found ->
Not_found ->
match self#get_one_color with
None -> None
| Some c ->
@ -71,10 +71,10 @@ class dot =
F.fprintf fmt "\"%s\" -> \"%s\";\n" src dest
method generate_for_module fmt m =
let l = List.filter
(fun n ->
!Args.dot_include_all or
(List.exists (fun m -> m.Module.m_name = n) modules))
let l = List.filter
(fun n ->
!Args.dot_include_all or
(List.exists (fun m -> m.Module.m_name = n) modules))
m.Module.m_top_deps
in
self#print_module_atts fmt m;
@ -91,9 +91,9 @@ class dot =
let oc = open_out !Args.out_file in
let fmt = F.formatter_of_out_channel oc in
F.fprintf fmt "%s" self#header;
let graph = Odoc_info.Dep.deps_of_types
let graph = Odoc_info.Dep.deps_of_types
~kernel: !Args.dot_reduce
types
types
in
List.iter (self#generate_for_type fmt) graph;
F.fprintf fmt "}\n" ;
@ -103,14 +103,14 @@ class dot =
Sys_error s ->
raise (Failure s)
method generate_modules modules_list =
method generate_modules modules_list =
try
modules <- modules_list ;
let oc = open_out !Args.out_file in
let fmt = F.formatter_of_out_channel oc in
F.fprintf fmt "%s" self#header;
if !Args.dot_reduce then
if !Args.dot_reduce then
Odoc_info.Dep.kernel_deps_of_modules modules_list;
List.iter (self#generate_for_module fmt) modules_list;
@ -123,6 +123,7 @@ class dot =
(** Generate the dot code in the file {!Odoc_info.Args.out_file}. *)
method generate (modules_list : Odoc_info.Module.t_module list) =
colors <- !Args.dot_colors;
if !Args.dot_types then
self#generate_types (Odoc_info.Search.types modules_list)
else

View File

@ -899,7 +899,7 @@ class html =
in
bs b "<head>\n";
bs b style;
bs b character_encoding ;
bs b character_encoding ;
bs b "<link rel=\"Start\" href=\"";
bs b self#index;
bs b "\">\n" ;
@ -1168,10 +1168,21 @@ class html =
bs b (self#create_fully_qualified_module_idents_links father a.ma_name);
bs b "</code>"
| Module_functor (p, k) ->
bs b "<div class=\"sig_block\">";
if !Odoc_info.Args.html_short_functors then
bs b " "
else
bs b "<div class=\"sig_block\">";
self#html_of_module_parameter b father p;
(
match k with
Module_functor _ -> ()
| _ when !Odoc_info.Args.html_short_functors ->
bs b ": "
| _ -> ()
);
self#html_of_module_kind b father ?modu k;
bs b "</div>"
if not !Odoc_info.Args.html_short_functors then
bs b "</div>"
| Module_apply (k1, k2) ->
(* TODO: l'application n'est pas correcte dans un .mli.
Que faire ? -> afficher le module_type du typedtree *)
@ -1190,14 +1201,20 @@ class html =
self#html_of_module_kind b father ?modu k
method html_of_module_parameter b father p =
let (s_functor,s_arrow) =
if !Odoc_info.Args.html_short_functors then
"", ""
else
"functor ", "-> "
in
self#html_of_text b
[
Code "functor (";
Code (s_functor^"(");
Code p.mp_name ;
Code " : ";
] ;
self#html_of_module_type_kind b father p.mp_kind;
self#html_of_text b [ Code ") -> "]
self#html_of_text b [ Code (") "^s_arrow)]
method html_of_module_element b father ele =
match ele with
@ -1628,7 +1645,12 @@ class html =
else
bs b (Name.simple m.m_name)
);
bs b ": ";
(
match m.m_kind with
Module_functor _ when !Odoc_info.Args.html_short_functors ->
()
| _ -> bs b ": "
);
self#html_of_module_kind b father ~modu: m m.m_kind;
bs b "</pre>";
if info then
@ -2040,7 +2062,7 @@ class html =
let b = new_buf () in
let pre_name = opt (fun c -> c.cl_name) pre in
let post_name = opt (fun c -> c.cl_name) post in
bs b doctype ;
bs b doctype ;
bs b "<html>\n";
self#print_header b
~nav: (Some (pre_name, post_name, cl.cl_name))
@ -2087,7 +2109,7 @@ class html =
let b = new_buf () in
let pre_name = opt (fun ct -> ct.clt_name) pre in
let post_name = opt (fun ct -> ct.clt_name) post in
bs b doctype ;
bs b doctype ;
bs b "<html>\n";
self#print_header b
~nav: (Some (pre_name, post_name, clt.clt_name))
@ -2133,7 +2155,7 @@ class html =
let b = new_buf () in
let pre_name = opt (fun mt -> mt.mt_name) pre in
let post_name = opt (fun mt -> mt.mt_name) post in
bs b doctype ;
bs b doctype ;
bs b "<html>\n";
self#print_header b
~nav: (Some (pre_name, post_name, mt.mt_name))
@ -2201,7 +2223,7 @@ class html =
let b = new_buf () in
let pre_name = opt (fun m -> m.m_name) pre in
let post_name = opt (fun m -> m.m_name) post in
bs b doctype ;
bs b doctype ;
bs b "<html>\n";
self#print_header b
~nav: (Some (pre_name, post_name, modu.m_name))
@ -2210,16 +2232,16 @@ class html =
bs b "<body>\n" ;
self#print_navbar b pre_name post_name modu.m_name ;
bs b "<center><h1>";
if modu.m_text_only then
bs b modu.m_name
else
(
if modu.m_text_only then
bs b modu.m_name
else
(
bs b
(
if Module.module_is_functor modu then
Odoc_messages.functo
Odoc_messages.functo
else
Odoc_messages.modul
Odoc_messages.modul
);
bp b " <a href=\"%s\">%s</a>" type_file modu.m_name;
(
@ -2227,7 +2249,7 @@ class html =
None -> ()
| Some _ -> bp b " (<a href=\"%s\">.ml</a>)" code_file
)
);
);
bs b "</h1></center>\n<br>\n";
if not modu.m_text_only then self#html_of_module b ~with_link: false modu;
@ -2282,7 +2304,7 @@ class html =
let chanout = open_out (Filename.concat !Args.target_dir self#index) in
let b = new_buf () in
let title = match !Args.title with None -> "" | Some t -> self#escape t in
bs b doctype ;
bs b doctype ;
bs b "<html>\n";
self#print_header b self#title;
bs b "<body>\n";
@ -2290,7 +2312,8 @@ class html =
bs b title;
bs b "</h1></center>\n" ;
let info = Odoc_info.apply_opt
Odoc_info.info_of_comment_file !Odoc_info.Args.intro_file
(Odoc_info.info_of_comment_file module_list)
!Odoc_info.Args.intro_file
in
(
match info with
@ -2299,7 +2322,7 @@ class html =
bs b "<br/>";
self#html_of_Module_list b
(List.map (fun m -> m.m_name) module_list);
bs b "</body>\n</html>"
bs b "</body>\n</html>"
| Some i -> self#html_of_info ~indent: false b info
);
Buffer.output_buffer chanout b;

View File

@ -210,7 +210,7 @@ module Type :
| Type_variant of variant_constructor list * bool
(** constructors * bool *)
| Type_record of record_field list * bool
(** fields * bool *)
(** fields * bool *)
(** Representation of a type. *)
type t_type = Odoc_type.t_type =
@ -410,7 +410,7 @@ module Module :
{
im_name : Name.t ; (** Complete name of the included module. *)
mutable im_module : mmt option ; (** The included module or module type, if we found it. *)
mutable im_info : Odoc_types.info option ; (** comment associated to the includ directive *)
mutable im_info : Odoc_types.info option ; (** comment associated to the includ directive *)
}
and module_alias = Odoc_module.module_alias =
@ -420,10 +420,10 @@ module Module :
}
and module_parameter = Odoc_module.module_parameter = {
mp_name : string ; (** the name *)
mp_type : Types.module_type ; (** the type *)
mp_type_code : string ; (** the original code *)
mp_kind : module_type_kind ; (** the way the parameter was built *)
mp_name : string ; (** the name *)
mp_type : Types.module_type ; (** the type *)
mp_type_code : string ; (** the original code *)
mp_kind : module_type_kind ; (** the way the parameter was built *)
}
(** Different kinds of a module. *)
@ -444,16 +444,16 @@ module Module :
and t_module = Odoc_module.t_module =
{
m_name : Name.t ; (** Complete name of the module. *)
m_type : Types.module_type ; (** The type of the module. *)
mutable m_type : Types.module_type ; (** The type of the module. *)
mutable m_info : info option ; (** Information found in the optional associated comment. *)
m_is_interface : bool ; (** [true] for modules read from interface files *)
m_file : string ; (** The file the module is defined in. *)
mutable m_kind : module_kind ; (** The way the module is defined. *)
mutable m_loc : location ;
mutable m_top_deps : Name.t list ; (** The toplevels module names this module depends on. *)
mutable m_code : string option ; (** The whole code of the module *)
mutable m_code_intf : string option ; (** The whole code of the interface of the module *)
m_text_only : bool ; (** [true] if the module comes from a text file *)
mutable m_code : string option ; (** The whole code of the module *)
mutable m_code_intf : string option ; (** The whole code of the interface of the module *)
m_text_only : bool ; (** [true] if the module comes from a text file *)
}
and module_type_alias = Odoc_module.module_type_alias =
@ -477,7 +477,7 @@ module Module :
{
mt_name : Name.t ; (** Complete name of the module type. *)
mutable mt_info : info option ; (** Information found in the optional associated comment. *)
mt_type : Types.module_type option ; (** [None] means that the module type is abstract. *)
mutable mt_type : Types.module_type option ; (** [None] means that the module type is abstract. *)
mt_is_interface : bool ; (** [true] for modules read from interface files. *)
mt_file : string ; (** The file the module type is defined in. *)
mutable mt_kind : module_type_kind option ;
@ -750,10 +750,11 @@ val info_string_of_info : info -> string
(** [info_of_comment_file file] parses the given file
and return an {!Odoc_info.info} structure. The content of the
file must have the same syntax as the content of a special comment.
The given module list is used for cross reference.
@raise Failure is the file could not be opened or there is a
syntax error.
*)
val info_of_comment_file : string -> info
val info_of_comment_file : Module.t_module list -> string -> info
(** [remove_ending_newline s] returns [s] without the optional ending newline. *)
val remove_ending_newline : string -> string
@ -919,13 +920,13 @@ module Args :
sig
(** The kind of source file in arguments. *)
type source_file =
Impl_file of string
| Intf_file of string
| Text_file of string
Impl_file of string
| Intf_file of string
| Text_file of string
(** The class type of documentation generators. *)
class type doc_generator =
object method generate : Module.t_module list -> unit end
object method generate : Module.t_module list -> unit end
(** The file used by the generators outputting only one file. *)
val out_file : string ref
@ -943,7 +944,7 @@ module Args :
val intro_file : string option ref
(** Flag to indicate whether we must display the complete list of parameters
for functions and methods. *)
for functions and methods. *)
val with_parameter_list : bool ref
(** The list of module names to hide. *)
@ -961,6 +962,10 @@ module Args :
(** To colorize code in HTML generated documentation pages, not code pages. *)
val colorize_code : bool ref
(** To display functors in short form rather than with "functor ... -> ",
in HTML generated documentation. *)
val html_short_functors : bool ref
(** The flag which indicates if we must generate a header (for LaTeX). *)
val with_header : bool ref

View File

@ -1014,15 +1014,15 @@ class latex =
method generate_for_top_module fmt m =
let (first_t, rest_t) = self#first_and_rest_of_info m.m_info in
let text =
if m.m_text_only then
[ Title (1, None, [Raw m.m_name] @
if m.m_text_only then
[ Title (1, None, [Raw m.m_name] @
(match first_t with
[] -> []
| t -> (Raw " : ") :: t)
) ;
]
else
[ Title (1, None,
) ;
]
else
[ Title (1, None,
[ Raw (Odoc_messages.modul^" ") ; Code m.m_name ] @
(match first_t with
[] -> []
@ -1044,7 +1044,7 @@ class latex =
(Module.module_elements ~trans: false m)
(** Print the header of the TeX document. *)
method latex_header fmt =
method latex_header fmt module_list =
ps fmt "\\documentclass[11pt]{article} \n";
ps fmt "\\usepackage[latin1]{inputenc} \n";
ps fmt "\\usepackage[T1]{fontenc} \n";
@ -1067,7 +1067,8 @@ class latex =
if !Args.with_toc then ps fmt "\\tableofcontents\n";
(
let info = Odoc_info.apply_opt
Odoc_info.info_of_comment_file !Odoc_info.Args.intro_file
(Odoc_info.info_of_comment_file module_list)
!Odoc_info.Args.intro_file
in
(match info with None -> () | Some _ -> ps fmt "\\vspace{0.2cm}");
self#latex_of_info fmt info;
@ -1123,7 +1124,7 @@ class latex =
try
let chanout = open_out main_file in
let fmt = Format.formatter_of_out_channel chanout in
if !Args.with_header then self#latex_header fmt;
if !Args.with_header then self#latex_header fmt module_list;
List.iter
(fun m ->
if !Args.separate_files then

View File

@ -28,7 +28,7 @@ open Odoc_module
The merge treatment depends on a given merge_option list.
@return the new info structure.*)
let merge_info merge_options (m1 : info) (m2 : info) =
let new_desc_opt =
let new_desc_opt =
match m1.i_desc, m2.i_desc with
None, None -> None
| None, Some d
@ -39,7 +39,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
Some d1
in
let new_authors =
let new_authors =
match m1.i_authors, m2.i_authors with
[], [] -> []
| l, []
@ -50,7 +50,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
l1
in
let new_version =
let new_version =
match m1.i_version , m2.i_version with
None, None -> None
| Some v, None
@ -61,7 +61,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
Some v1
in
let new_sees =
let new_sees =
match m1.i_sees, m2.i_sees with
[], [] -> []
| l, []
@ -72,7 +72,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
l1
in
let new_since =
let new_since =
match m1.i_since, m2.i_since with
None, None -> None
| Some v, None
@ -83,7 +83,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
Some v1
in
let new_dep =
let new_dep =
match m1.i_deprecated, m2.i_deprecated with
None, None -> None
| None, Some t
@ -94,7 +94,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
Some t1
in
let new_params =
let new_params =
match m1.i_params, m2.i_params with
[], [] -> []
| l, []
@ -118,7 +118,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
l1
in
let new_raised_exceptions =
let new_raised_exceptions =
match m1.i_raised_exceptions, m2.i_raised_exceptions with
[], [] -> []
| l, []
@ -142,7 +142,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
else
l1
in
let new_rv =
let new_rv =
match m1.i_return_value, m2.i_return_value with
None, None -> None
| None, Some t
@ -156,7 +156,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
let new_custom =
match m1.i_custom, m2.i_custom with
[], [] -> []
| [], l
| [], l
| l, [] -> l
| l1, l2 ->
if List.mem Merge_custom merge_options then
@ -175,7 +175,7 @@ let merge_info merge_options (m1 : info) (m2 : info) =
Odoc_types.i_raised_exceptions = new_raised_exceptions ;
Odoc_types.i_return_value = new_rv ;
Odoc_types.i_custom = new_custom ;
}
}
(** Merge of two optional info structures. *)
let merge_info_opt merge_options mli_opt ml_opt =
@ -203,7 +203,7 @@ let merge_types merge_options mli ml =
(fun c2 -> c2.vc_name = cons.vc_name)
l2
in
let new_desc =
let new_desc =
match cons.vc_text, cons2.vc_text with
None, None -> None
| Some d, None
@ -231,7 +231,7 @@ let merge_types merge_options mli ml =
(fun r -> r.rf_name = record.rf_name)
l2
in
let new_desc =
let new_desc =
match record.rf_text, record2.rf_text with
None, None -> None
| Some d, None
@ -258,7 +258,7 @@ let merge_types merge_options mli ml =
else
raise (Failure (Odoc_messages.different_types mli.ty_name))
(** Merge of two param_info, one from a .mli, one from a .ml.
(** Merge of two param_info, one from a .mli, one from a .ml.
The text fields are not handled but will be recreated from the
i_params field of the info structure.
Here, if a parameter in the .mli has no name, we take the one
@ -277,7 +277,7 @@ let rec merge_param_info pi_mli pi_ml =
(* if we're here, then the tuple in the .mli has no parameter names ;
then we take the name of the parameter of the .ml and the type of the .mli. *)
Simple_name { sn_ml with sn_type = t_mli }
| (Tuple (l_mli, t_mli), Tuple (l_ml, _)) ->
(* if the two tuples have different lengths
(which should not occurs), we return the pi_mli,
@ -313,15 +313,15 @@ let merge_classes merge_options mli ml =
(fun a ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Class_attribute a2 ->
Class_attribute a2 ->
if a2.att_value.val_name = a.att_value.val_name then
(
a.att_value.val_info <- merge_info_opt merge_options
a.att_value.val_info <- merge_info_opt merge_options
a.att_value.val_info a2.att_value.val_info;
a.att_value.val_loc <- { a.att_value.val_loc with loc_impl = a2.att_value.val_loc.loc_impl } ;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
a.att_value.val_code <- a2.att_value.val_code;
true
)
@ -344,23 +344,23 @@ let merge_classes merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Class_method m2 ->
Class_method m2 ->
if m2.met_value.val_name = m.met_value.val_name then
(
m.met_value.val_info <- merge_info_opt
merge_options m.met_value.val_info m2.met_value.val_info;
m.met_value.val_loc <- { m.met_value.val_loc with loc_impl = m2.met_value.val_loc.loc_impl } ;
(* merge the parameter names *)
m.met_value.val_parameters <- (merge_parameters
m.met_value.val_parameters <- (merge_parameters
m.met_value.val_parameters
m2.met_value.val_parameters) ;
(* we must reassociate comments in @param to the corresponding
parameters because the associated comment of a parameter may have been changed by the merge.*)
Odoc_value.update_value_parameters_text m.met_value;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
m.met_value.val_code <- m2.met_value.val_code;
true
@ -385,20 +385,20 @@ let merge_classes merge_options mli ml =
let merge_class_types merge_options mli ml =
mli.clt_info <- merge_info_opt merge_options mli.clt_info ml.clt_info;
mli.clt_loc <- { mli.clt_loc with loc_impl = ml.clt_loc.loc_impl } ;
(* merge values *)
(* merge values *)
List.iter
(fun a ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Class_attribute a2 ->
Class_attribute a2 ->
if a2.att_value.val_name = a.att_value.val_name then
(
a.att_value.val_info <- merge_info_opt merge_options
a.att_value.val_info <- merge_info_opt merge_options
a.att_value.val_info a2.att_value.val_info;
a.att_value.val_loc <- { a.att_value.val_loc with loc_impl = a2.att_value.val_loc.loc_impl } ;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
a.att_value.val_code <- a2.att_value.val_code;
true
@ -422,22 +422,22 @@ let merge_class_types merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Class_method m2 ->
Class_method m2 ->
if m2.met_value.val_name = m.met_value.val_name then
(
m.met_value.val_info <- merge_info_opt
merge_options m.met_value.val_info m2.met_value.val_info;
m.met_value.val_loc <- { m.met_value.val_loc with loc_impl = m2.met_value.val_loc.loc_impl } ;
m.met_value.val_parameters <- (merge_parameters
m.met_value.val_parameters <- (merge_parameters
m.met_value.val_parameters
m2.met_value.val_parameters) ;
(* we must reassociate comments in @param to the the corresponding
parameters because the associated comment of a parameter may have been changed y the merge.*)
Odoc_value.update_value_parameters_text m.met_value;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
m.met_value.val_code <- m2.met_value.val_code;
true
@ -468,9 +468,9 @@ let rec merge_module_types merge_options mli ml =
(fun ex ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_exception ex2 ->
Element_exception ex2 ->
if ex2.ex_name = ex.ex_name then
(
ex.ex_info <- merge_info_opt merge_options ex.ex_info ex2.ex_info;
@ -497,9 +497,9 @@ let rec merge_module_types merge_options mli ml =
(fun ty ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_type ty2 ->
Element_type ty2 ->
if ty2.ty_name = ty.ty_name then
(
merge_types merge_options ty ty2;
@ -524,9 +524,9 @@ let rec merge_module_types merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_module m2 ->
Element_module m2 ->
if m2.m_name = m.m_name then
(
ignore (merge_modules merge_options m m2);
@ -556,9 +556,9 @@ let rec merge_module_types merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_module_type m2 ->
Element_module_type m2 ->
if m2.mt_name = m.mt_name then
(
merge_module_types merge_options m m2;
@ -586,9 +586,9 @@ let rec merge_module_types merge_options mli ml =
(fun v ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_value v2 ->
Element_value v2 ->
if v2.val_name = v.val_name then
(
v.val_info <- merge_info_opt merge_options v.val_info v2.val_info ;
@ -601,7 +601,7 @@ let rec merge_module_types merge_options mli ml =
parameters because the associated comment of a parameter may have been changed y the merge.*)
Odoc_value.update_value_parameters_text v;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
v.val_code <- v2.val_code;
true
@ -626,9 +626,9 @@ let rec merge_module_types merge_options mli ml =
(fun c ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_class c2 ->
Element_class c2 ->
if c2.cl_name = c.cl_name then
(
merge_classes merge_options c c2;
@ -654,9 +654,9 @@ let rec merge_module_types merge_options mli ml =
(fun c ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_class_type c2 ->
Element_class_type c2 ->
if c2.clt_name = c.clt_name then
(
merge_class_types merge_options c c2;
@ -682,24 +682,29 @@ let rec merge_module_types merge_options mli ml =
and merge_modules merge_options mli ml =
mli.m_info <- merge_info_opt merge_options mli.m_info ml.m_info;
mli.m_loc <- { mli.m_loc with loc_impl = ml.m_loc.loc_impl } ;
(* More dependencies in the .ml file. *)
mli.m_top_deps <- ml.m_top_deps ;
let code =
let rec remove_doubles acc = function
[] -> acc
| h :: q ->
if List.mem h acc then remove_doubles acc q
else remove_doubles (h :: acc) q
in
mli.m_top_deps <- remove_doubles mli.m_top_deps ml.m_top_deps ;
let code =
if !Odoc_args.keep_code then
match mli.m_code, ml.m_code with
Some s, _ -> Some s
| _, Some s -> Some s
| _ -> None
Some s, _ -> Some s
| _, Some s -> Some s
| _ -> None
else
None
in
let code_intf =
let code_intf =
if !Odoc_args.keep_code then
match mli.m_code_intf, ml.m_code_intf with
Some s, _ -> Some s
| _, Some s -> Some s
| _ -> None
Some s, _ -> Some s
| _, Some s -> Some s
| _ -> None
else
None
in
@ -711,9 +716,9 @@ and merge_modules merge_options mli ml =
(fun ex ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_exception ex2 ->
Element_exception ex2 ->
if ex2.ex_name = ex.ex_name then
(
ex.ex_info <- merge_info_opt merge_options ex.ex_info ex2.ex_info;
@ -740,9 +745,9 @@ and merge_modules merge_options mli ml =
(fun ty ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_type ty2 ->
Element_type ty2 ->
if ty2.ty_name = ty.ty_name then
(
merge_types merge_options ty ty2;
@ -767,9 +772,9 @@ and merge_modules merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_module m2 ->
Element_module m2 ->
if m2.m_name = m.m_name then
(
ignore (merge_modules merge_options m m2);
@ -799,9 +804,9 @@ and merge_modules merge_options mli ml =
(fun m ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_module_type m2 ->
Element_module_type m2 ->
if m2.mt_name = m.mt_name then
(
merge_module_types merge_options m m2;
@ -841,8 +846,8 @@ and merge_modules merge_options mli ml =
(* we must reassociate comments in @param to the the corresponding
parameters because the associated comment of a parameter may have been changed y the merge.*)
Odoc_value.update_value_parameters_text v;
if !Odoc_args.keep_code then
if !Odoc_args.keep_code then
v.val_code <- v2.val_code;
true
)
@ -864,9 +869,9 @@ and merge_modules merge_options mli ml =
(fun c ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_class c2 ->
Element_class c2 ->
if c2.cl_name = c.cl_name then
(
merge_classes merge_options c c2;
@ -892,9 +897,9 @@ and merge_modules merge_options mli ml =
(fun c ->
try
let _ = List.find
(fun ele ->
(fun ele ->
match ele with
Element_class_type c2 ->
Element_class_type c2 ->
if c2.clt_name = c.clt_name then
(
merge_class_types merge_options c c2;
@ -914,7 +919,7 @@ and merge_modules merge_options mli ml =
()
)
(Odoc_module.module_class_types mli);
mli
let merge merge_options modules_list =
@ -932,13 +937,13 @@ let merge merge_options modules_list =
m :: (iter l_others)
| m2 :: [] ->
(
(* we can merge m with m2 if there is an implementation
(* we can merge m with m2 if there is an implementation
and an interface.*)
let f b = if !Odoc_args.inverse_merge_ml_mli then not b else b in
match f m.m_is_interface, f m2.m_is_interface with
true, false -> (merge_modules merge_options m m2) :: (iter l_others)
| false, true -> (merge_modules merge_options m2 m) :: (iter l_others)
| false, false ->
| false, false ->
if !Odoc_args.inverse_merge_ml_mli then
(* two Module.ts for the .mli ! *)
raise (Failure (Odoc_messages.two_interfaces m.m_name))
@ -959,5 +964,3 @@ let merge merge_options modules_list =
in
iter modules_list
(* eof $Id$ *)

View File

@ -52,6 +52,7 @@ let load = "<file>\tLoad information from <file> ; may be used several times"
let css_style = "<file>\n\t\tUse content of <file> as CSS style definition "^html_only
let index_only = "\tGenerate index files only "^html_only
let colorize_code = "\n\t\tColorize code even in documentation pages "^html_only
let html_short_functors = "\n\t\tUse short form to display functor types "^html_only
let generate_html = "\tGenerate HTML documentation"
let generate_latex = "\tGenerate LaTeX documentation"
let generate_texinfo = "\tGenerate TeXinfo documentation"
@ -144,7 +145,7 @@ let latex_class_prefix =
"\t\t(default is \""^default_latex_class_prefix^"\")"
let default_latex_class_type_prefix = "classtype:"
let latex_class_type_prefix =
let latex_class_type_prefix =
"<string>\n\t\tUse <string> as prefix for the LaTeX labels of class types.\n"^
"\t\t(default is \""^default_latex_class_type_prefix^"\")"
@ -286,7 +287,7 @@ let cross_element_not_found n = "Element "^n^" not found"
let cross_method_not_found n = "Method "^n^" not found"
let cross_attribute_not_found n = "Attribute "^n^" not found"
let cross_section_not_found n = "Section "^n^" not found"
let cross_value_not_found n = "Attribute "^n^" not found"
let cross_value_not_found n = "Value "^n^" not found"
let cross_type_not_found n = "Type "^n^" not found"
let object_end = "object ... end"

View File

@ -64,7 +64,7 @@ and module_kind =
(** Representation of a module. *)
and t_module = {
m_name : Name.t ;
m_type : Types.module_type ;
mutable m_type : Types.module_type ;
mutable m_info : Odoc_types.info option ;
m_is_interface : bool ; (** true for modules read from interface files *)
m_file : string ; (** the file the module is defined in. *)
@ -92,7 +92,7 @@ and module_type_kind =
and t_module_type = {
mt_name : Name.t ;
mutable mt_info : Odoc_types.info option ;
mt_type : Types.module_type option ; (** [None] = abstract module type *)
mutable mt_type : Types.module_type option ; (** [None] = abstract module type *)
mt_is_interface : bool ; (** true for modules read from interface files *)
mt_file : string ; (** the file the module type is defined in. *)
mutable mt_kind : module_type_kind option ; (** [None] = abstract module type if mt_type = None ;
@ -207,41 +207,41 @@ let included_modules l =
let rec module_elements ?(trans=true) m =
let rec iter_kind = function
Module_struct l ->
print_DEBUG "Odoc_module.module_element: Module_struct";
l
print_DEBUG "Odoc_module.module_element: Module_struct";
l
| Module_alias ma ->
print_DEBUG "Odoc_module.module_element: Module_alias";
if trans then
print_DEBUG "Odoc_module.module_element: Module_alias";
if trans then
match ma.ma_module with
None -> []
| Some (Mod m) -> module_elements m
| Some (Modtype mt) -> module_type_elements mt
else
else
[]
| Module_functor (_, k)
| Module_apply (k, _) ->
print_DEBUG "Odoc_module.module_element: Module_functor ou Module_apply";
iter_kind k
print_DEBUG "Odoc_module.module_element: Module_functor ou Module_apply";
iter_kind k
| Module_with (tk,_) ->
print_DEBUG "Odoc_module.module_element: Module_with";
module_type_elements ~trans: trans
print_DEBUG "Odoc_module.module_element: Module_with";
module_type_elements ~trans: trans
{ mt_name = "" ; mt_info = None ; mt_type = None ;
mt_is_interface = false ; mt_file = "" ; mt_kind = Some tk ;
mt_loc = Odoc_types.dummy_loc ;
}
| Module_constraint (k, tk) ->
print_DEBUG "Odoc_module.module_element: Module_constraint";
print_DEBUG "Odoc_module.module_element: Module_constraint";
(* A VOIR : utiliser k ou tk ? *)
module_elements ~trans: trans
module_elements ~trans: trans
{ m_name = "" ;
m_info = None ;
m_type = Types.Tmty_signature [] ;
m_info = None ;
m_type = Types.Tmty_signature [] ;
m_is_interface = false ; m_file = "" ; m_kind = k ;
m_loc = Odoc_types.dummy_loc ;
m_top_deps = [] ;
m_code = None ;
m_code_intf = None ;
m_text_only = false ;
m_code = None ;
m_code_intf = None ;
m_text_only = false ;
}
(*
module_type_elements ~trans: trans
@ -265,11 +265,11 @@ and module_type_elements ?(trans=true) mt =
else
[]
| Some (Module_type_alias mta) ->
if trans then
if trans then
match mta.mta_module with
None -> []
| Some mt -> module_type_elements mt
else
else
[]
in
iter_kind mt.mt_kind
@ -342,7 +342,7 @@ let rec module_type_parameters ?(trans=true) mt =
with
Not_found ->
(p, None)
in
in
param :: (iter (Some k2))
| Some (Module_type_alias mta) ->
if trans then
@ -368,38 +368,38 @@ let rec module_type_parameters ?(trans=true) mt =
and module_parameters ?(trans=true) m =
let rec iter = function
Module_functor (p, k) ->
let param =
let param =
(* we create the couple (parameter, description opt), using
the description of the parameter if we can find it in the comment.*)
match m.m_info with
match m.m_info with
None ->(p, None)
| Some i ->
try
let d = List.assoc p.mp_name i.Odoc_types.i_params in
(p, Some d)
| Some i ->
try
let d = List.assoc p.mp_name i.Odoc_types.i_params in
(p, Some d)
with
Not_found ->
Not_found ->
(p, None)
in
param :: (iter k)
in
param :: (iter k)
| Module_alias ma ->
if trans then
if trans then
match ma.ma_module with
None -> []
| Some (Mod m) -> module_parameters ~trans m
| Some (Modtype mt) -> module_type_parameters ~trans mt
else
else
[]
| Module_constraint (k, tk) ->
module_type_parameters ~trans: trans
module_type_parameters ~trans: trans
{ mt_name = "" ; mt_info = None ; mt_type = None ;
mt_is_interface = false ; mt_file = "" ; mt_kind = Some tk ;
mt_loc = Odoc_types.dummy_loc }
| Module_struct _
| Module_apply _
| Module_with _ ->
[]
[]
in
iter m.m_kind
@ -435,14 +435,14 @@ let module_is_functor m =
let rec iter = function
Module_functor _ -> true
| Module_alias ma ->
(
match ma.ma_module with
(
match ma.ma_module with
None -> false
| Some (Mod mo) -> iter mo.m_kind
| Some (Modtype mt) -> module_type_is_functor mt
)
| Some (Mod mo) -> iter mo.m_kind
| Some (Modtype mt) -> module_type_is_functor mt
)
| Module_constraint (k, _) ->
iter k
iter k
| _ -> false
in
iter m.m_kind

View File

@ -35,16 +35,16 @@ let _ = Odoc_args.parse
(default_dot_generator :> Odoc_args.doc_generator)
let loaded_modules =
List.flatten
(List.map
List.flatten
(List.map
(fun f ->
Odoc_info.verbose (Odoc_messages.loading f);
try
try
let l = Odoc_analyse.load_modules f in
Odoc_info.verbose Odoc_messages.ok;
l
with Failure s ->
prerr_endline s ;
with Failure s ->
prerr_endline s ;
incr Odoc_global.errors ;
[]
)
@ -58,11 +58,11 @@ let _ =
None -> ()
| Some f ->
try Odoc_analyse.dump_modules f modules
with Failure s ->
with Failure s ->
prerr_endline s ;
incr Odoc_global.errors
let _ =
let _ =
match !Odoc_args.doc_generator with
None ->
()
@ -71,7 +71,7 @@ let _ =
gen#generate modules;
Odoc_info.verbose Odoc_messages.ok
let _ =
let _ =
if !Odoc_global.errors > 0 then
(
prerr_endline (Odoc_messages.errors_occured !Odoc_global.errors) ;
@ -79,4 +79,3 @@ let _ =
)
else
exit 0

View File

@ -993,12 +993,12 @@ class texi =
let title = [
self#node depth m.m_name ;
Title (depth, None,
if m.m_text_only then
[ Raw m.m_name ]
else
[ Raw (Odoc_messages.modul ^ " ") ;
if m.m_text_only then
[ Raw m.m_name ]
else
[ Raw (Odoc_messages.modul ^ " ") ;
Code m.m_name ]
) ;
) ;
self#index `Module m.m_name ; Newline ] in
puts chanout (self#texi_of_text title) ;
@ -1105,7 +1105,8 @@ class texi =
| Some f ->
nl chan ;
puts_nl chan
(self#texi_of_info (Some (Odoc_info.info_of_comment_file f)))
(self#texi_of_info
(Some (Odoc_info.info_of_comment_file m_list f)))
end ;
(* write a top menu *)

View File

@ -1,19 +1,44 @@
bigarray_stubs.o: bigarray_stubs.c ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/mlvalues.h bigarray.h ../../byterun/custom.h \
../../byterun/fail.h ../../byterun/intext.h ../../byterun/io.h \
../../byterun/fix_code.h ../../byterun/memory.h ../../byterun/gc.h \
../../byterun/major_gc.h ../../byterun/freelist.h \
../../byterun/minor_gc.h
mmap_unix.o: mmap_unix.c bigarray.h ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/misc.h ../../byterun/custom.h \
../../byterun/fail.h ../../byterun/sys.h
mmap_win32.o: mmap_win32.c bigarray.h ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/misc.h ../../byterun/alloc.h \
../../byterun/custom.h ../../byterun/fail.h ../../byterun/sys.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/../config/m.h ../../byterun/../config/s.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/misc.h bigarray.h ../../byterun/custom.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/fail.h ../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/intext.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/io.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/fix_code.h \
../../byterun/config.h ../../byterun/misc.h ../../byterun/mlvalues.h \
../../byterun/memory.h ../../byterun/compatibility.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
mmap_unix.o: mmap_unix.c bigarray.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/misc.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/custom.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/fail.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/io.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/sys.h ../../byterun/misc.h
mmap_win32.o: mmap_win32.c bigarray.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/misc.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/alloc.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/custom.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/fail.h ../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/sys.h ../../byterun/misc.h \
../unix/unixsupport.h
bigarray.cmo: bigarray.cmi
bigarray.cmx: bigarray.cmi

View File

@ -2,85 +2,137 @@ color.o: color.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h
draw.o: draw.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h ../../byterun/alloc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h
dump_img.o: dump_img.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h image.h ../../byterun/alloc.h \
../../byterun/memory.h ../../byterun/gc.h ../../byterun/major_gc.h \
../../byterun/freelist.h ../../byterun/minor_gc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h image.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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
events.o: events.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h ../../byterun/alloc.h ../../byterun/signals.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/signals.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h
fill.o: fill.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h ../../byterun/memory.h ../../byterun/gc.h \
../../byterun/major_gc.h ../../byterun/freelist.h \
../../byterun/minor_gc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/memory.h \
../../byterun/compatibility.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
image.o: image.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h image.h ../../byterun/alloc.h \
../../byterun/custom.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h image.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/custom.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h
make_img.o: make_img.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h image.h ../../byterun/memory.h ../../byterun/gc.h \
../../byterun/major_gc.h ../../byterun/freelist.h \
../../byterun/minor_gc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h image.h ../../byterun/memory.h \
../../byterun/compatibility.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
open.o: open.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h ../../byterun/alloc.h ../../byterun/callback.h \
../../byterun/fail.h ../../byterun/memory.h ../../byterun/gc.h \
../../byterun/major_gc.h ../../byterun/freelist.h \
../../byterun/minor_gc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/callback.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/fail.h ../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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
point_col.o: point_col.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h
sound.o: sound.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h
subwindow.o: subwindow.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h
text.o: text.c libgraph.h \
\
\
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/misc.h ../../byterun/alloc.h
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h
graphics.cmo: graphics.cmi
graphics.cmx: graphics.cmi
graphicsX11.cmo: graphics.cmi graphicsX11.cmi
graphicsX11.cmx: graphics.cmx graphicsX11.cmi
graphicsX11.cmo: ./graphics.cmi graphicsX11.cmi
graphicsX11.cmx: ./graphics.cmx graphicsX11.cmi

View File

@ -1,5 +1,6 @@
bng.o: bng.c bng.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/compatibility.h bng_ppc.c bng_digit.c
bng.o: bng.c bng.h ../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h bng_ppc.c \
bng_digit.c
bng_alpha.o: bng_alpha.c
bng_amd64.o: bng_amd64.c
bng_digit.o: bng_digit.c
@ -9,25 +10,39 @@ bng_ppc.o: bng_ppc.c
bng_sparc.o: bng_sparc.c
nat_stubs.o: nat_stubs.c ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/mlvalues.h ../../byterun/custom.h ../../byterun/intext.h \
../../byterun/io.h ../../byterun/fix_code.h ../../byterun/fail.h \
../../byterun/memory.h ../../byterun/gc.h ../../byterun/major_gc.h \
../../byterun/freelist.h ../../byterun/minor_gc.h bng.h nat.h
big_int.cmi: nat.cmi
num.cmi: ratio.cmi nat.cmi big_int.cmi
ratio.cmi: nat.cmi big_int.cmi
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/../config/m.h ../../byterun/../config/s.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/misc.h ../../byterun/custom.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/intext.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/io.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/fix_code.h \
../../byterun/config.h ../../byterun/misc.h ../../byterun/mlvalues.h \
../../byterun/fail.h ../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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 bng.h nat.h
big_int.cmi: ./nat.cmi
num.cmi: ./ratio.cmi ./nat.cmi ./big_int.cmi
ratio.cmi: ./nat.cmi ./big_int.cmi
arith_flags.cmo: arith_flags.cmi
arith_flags.cmx: arith_flags.cmi
arith_status.cmo: arith_flags.cmi arith_status.cmi
arith_status.cmx: arith_flags.cmx arith_status.cmi
big_int.cmo: nat.cmi int_misc.cmi big_int.cmi
big_int.cmx: nat.cmx int_misc.cmx big_int.cmi
arith_status.cmo: ./arith_flags.cmi arith_status.cmi
arith_status.cmx: ./arith_flags.cmx arith_status.cmi
big_int.cmo: ./nat.cmi ./int_misc.cmi big_int.cmi
big_int.cmx: ./nat.cmx ./int_misc.cmx big_int.cmi
int_misc.cmo: int_misc.cmi
int_misc.cmx: int_misc.cmi
nat.cmo: int_misc.cmi nat.cmi
nat.cmx: int_misc.cmx nat.cmi
num.cmo: ratio.cmi nat.cmi int_misc.cmi big_int.cmi arith_flags.cmi num.cmi
num.cmx: ratio.cmx nat.cmx int_misc.cmx big_int.cmx arith_flags.cmx num.cmi
ratio.cmo: nat.cmi int_misc.cmi big_int.cmi arith_flags.cmi ratio.cmi
ratio.cmx: nat.cmx int_misc.cmx big_int.cmx arith_flags.cmx ratio.cmi
nat.cmo: ./int_misc.cmi nat.cmi
nat.cmx: ./int_misc.cmx nat.cmi
num.cmo: ./ratio.cmi ./nat.cmi ./int_misc.cmi ./big_int.cmi ./arith_flags.cmi \
num.cmi
num.cmx: ./ratio.cmx ./nat.cmx ./int_misc.cmx ./big_int.cmx ./arith_flags.cmx \
num.cmi
ratio.cmo: ./nat.cmi ./int_misc.cmi ./big_int.cmi ./arith_flags.cmi ratio.cmi
ratio.cmx: ./nat.cmx ./int_misc.cmx ./big_int.cmx ./arith_flags.cmx ratio.cmi

View File

@ -1,7 +1,16 @@
strstubs.o: strstubs.c ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/misc.h ../../byterun/alloc.h \
../../byterun/memory.h ../../byterun/gc.h ../../byterun/major_gc.h \
../../byterun/freelist.h ../../byterun/minor_gc.h ../../byterun/fail.h
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/../config/m.h ../../byterun/../config/s.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/alloc.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h
str.cmo: str.cmi
str.cmx: str.cmi

View File

@ -1,27 +1,35 @@
posix.o: posix.c ../../byterun/alloc.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/mlvalues.h ../../byterun/backtrace.h \
../../byterun/callback.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/printexc.h ../../byterun/roots.h \
../../byterun/signals.h ../../byterun/stacks.h ../../byterun/sys.h
win32.o: win32.c ../../byterun/alloc.h ../../byterun/compatibility.h \
../../byterun/misc.h ../../byterun/config.h ../../config/m.h \
../../config/s.h ../../byterun/mlvalues.h ../../byterun/backtrace.h \
../../byterun/callback.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/printexc.h ../../byterun/roots.h \
../../byterun/signals.h ../../byterun/stacks.h ../../byterun/sys.h
condition.cmi: mutex.cmi
condition.cmo: mutex.cmi condition.cmi
condition.cmx: mutex.cmx condition.cmi
event.cmo: mutex.cmi condition.cmi event.cmi
event.cmx: mutex.cmx condition.cmx event.cmi
../../byterun/misc.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/../config/m.h \
../../byterun/../config/s.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/compatibility.h \
../../byterun/config.h ../../byterun/misc.h ../../byterun/backtrace.h \
../../byterun/mlvalues.h ../../byterun/callback.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/custom.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/fail.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/io.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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/printexc.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/roots.h \
../../byterun/misc.h ../../byterun/memory.h ../../byterun/signals.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/stacks.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h ../../byterun/sys.h \
../../byterun/misc.h
condition.cmi: ./mutex.cmi
condition.cmo: ./mutex.cmi condition.cmi
condition.cmx: ./mutex.cmx condition.cmi
event.cmo: ./mutex.cmi ./condition.cmi event.cmi
event.cmx: ./mutex.cmx ./condition.cmx event.cmi
mutex.cmo: mutex.cmi
mutex.cmx: mutex.cmi
thread.cmo: thread.cmi
thread.cmx: thread.cmi
threadUnix.cmo: thread.cmi threadUnix.cmi
threadUnix.cmx: thread.cmx threadUnix.cmi
threadUnix.cmo: ./thread.cmi threadUnix.cmi
threadUnix.cmx: ./thread.cmx threadUnix.cmi

View File

@ -96,7 +96,7 @@ installopt:
$(CAMLOPT) -c $(COMPFLAGS) $<
depend: $(GENFILES)
gcc -MM -I../../byterun *.c > .depend
-gcc -MM -I../../byterun *.c > .depend
../../boot/ocamlrun ../../tools/ocamldep *.mli *.ml >> .depend
include .depend

View File

@ -1,28 +1,42 @@
scheduler.o: scheduler.c ../../byterun/alloc.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/config.h ../../config/m.h ../../config/s.h \
../../byterun/mlvalues.h ../../byterun/backtrace.h \
../../byterun/callback.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/printexc.h ../../byterun/roots.h ../../byterun/signals.h \
../../byterun/stacks.h ../../byterun/sys.h
condition.cmi: mutex.cmi
thread.cmi: unix.cmi
threadUnix.cmi: unix.cmi
condition.cmo: thread.cmi mutex.cmi condition.cmi
condition.cmx: thread.cmx mutex.cmx condition.cmi
event.cmo: mutex.cmi condition.cmi event.cmi
event.cmx: mutex.cmx condition.cmx event.cmi
marshal.cmo: pervasives.cmi marshal.cmi
marshal.cmx: pervasives.cmx marshal.cmi
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
thread.cmx: unix.cmx thread.cmi
threadUnix.cmo: unix.cmi thread.cmi threadUnix.cmi
threadUnix.cmx: unix.cmx thread.cmx threadUnix.cmi
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/../config/m.h ../../byterun/../config/s.h \
../../byterun/compatibility.h ../../byterun/mlvalues.h \
../../byterun/compatibility.h ../../byterun/config.h \
../../byterun/misc.h ../../byterun/backtrace.h ../../byterun/mlvalues.h \
../../byterun/callback.h ../../byterun/compatibility.h \
../../byterun/mlvalues.h ../../byterun/fail.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/io.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h \
../../byterun/compatibility.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/printexc.h \
../../byterun/misc.h ../../byterun/mlvalues.h ../../byterun/roots.h \
../../byterun/misc.h ../../byterun/memory.h ../../byterun/signals.h \
../../byterun/compatibility.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/stacks.h ../../byterun/misc.h \
../../byterun/mlvalues.h ../../byterun/memory.h ../../byterun/sys.h \
../../byterun/misc.h
condition.cmi: ./mutex.cmi
thread.cmi: ./unix.cmi
threadUnix.cmi: ./unix.cmi
condition.cmo: ./thread.cmi ./mutex.cmi condition.cmi
condition.cmx: ./thread.cmx ./mutex.cmx condition.cmi
event.cmo: ./mutex.cmi ./condition.cmi event.cmi
event.cmx: ./mutex.cmx ./condition.cmx event.cmi
marshal.cmo: ./pervasives.cmi marshal.cmi
marshal.cmx: ./pervasives.cmx marshal.cmi
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
thread.cmx: ./unix.cmx thread.cmi
threadUnix.cmo: ./unix.cmi ./thread.cmi threadUnix.cmi
threadUnix.cmx: ./unix.cmx ./thread.cmx threadUnix.cmi
unix.cmo: unix.cmi
unix.cmx: unix.cmi

File diff suppressed because it is too large Load Diff

View File

@ -62,7 +62,12 @@ static value alloc_host_entry(struct hostent *entry)
Begin_roots4 (name, aliases, addr_list, adr);
name = copy_string((char *)(entry->h_name));
aliases = copy_string_array((const char**)entry->h_aliases);
/* PR#4043: protect against buggy implementations of gethostbyname()
that return a NULL pointer in h_aliases */
if (entry->h_aliases)
aliases = copy_string_array((const char**)entry->h_aliases);
else
aliases = Atom(0);
entry_h_length = entry->h_length;
#ifdef h_addr
addr_list = alloc_array(alloc_one_addr, (const char**)entry->h_addr_list);

View File

@ -1,104 +1,116 @@
camlinternalMod.cmi: obj.cmi
camlinternalOO.cmi: obj.cmi
format.cmi: buffer.cmi
genlex.cmi: stream.cmi
moreLabels.cmi: set.cmi map.cmi hashtbl.cmi
oo.cmi: camlinternalOO.cmi
parsing.cmi: obj.cmi lexing.cmi
printf.cmi: buffer.cmi
random.cmi: nativeint.cmi int64.cmi int32.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
camlinternalMod.cmi: ./obj.cmi
camlinternalOO.cmi: ./obj.cmi
format.cmi: ./buffer.cmi
genlex.cmi: ./stream.cmi
moreLabels.cmi: ./set.cmi ./map.cmi ./hashtbl.cmi
oo.cmi: ./camlinternalOO.cmi
parsing.cmi: ./obj.cmi ./lexing.cmi
printf.cmi: ./obj.cmi ./buffer.cmi
random.cmi: ./nativeint.cmi ./int64.cmi ./int32.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
buffer.cmo: sys.cmi string.cmi buffer.cmi
buffer.cmx: sys.cmx string.cmx buffer.cmi
callback.cmo: obj.cmi callback.cmi
callback.cmx: obj.cmx callback.cmi
camlinternalMod.cmo: obj.cmi camlinternalOO.cmi array.cmi camlinternalMod.cmi
camlinternalMod.cmx: obj.cmx camlinternalOO.cmx array.cmx camlinternalMod.cmi
camlinternalOO.cmo: sys.cmi string.cmi obj.cmi map.cmi list.cmi char.cmi \
array.cmi camlinternalOO.cmi
camlinternalOO.cmx: sys.cmx string.cmx obj.cmx map.cmx list.cmx char.cmx \
array.cmx camlinternalOO.cmi
arrayLabels.cmo: ./array.cmi arrayLabels.cmi
arrayLabels.cmx: ./array.cmx arrayLabels.cmi
buffer.cmo: ./sys.cmi ./string.cmi buffer.cmi
buffer.cmx: ./sys.cmx ./string.cmx buffer.cmi
callback.cmo: ./obj.cmi callback.cmi
callback.cmx: ./obj.cmx callback.cmi
camlinternalMod.cmo: ./obj.cmi ./camlinternalOO.cmi ./array.cmi \
camlinternalMod.cmi
camlinternalMod.cmx: ./obj.cmx ./camlinternalOO.cmx ./array.cmx \
camlinternalMod.cmi
camlinternalOO.cmo: ./sys.cmi ./string.cmi ./obj.cmi ./map.cmi ./list.cmi \
./char.cmi ./array.cmi camlinternalOO.cmi
camlinternalOO.cmx: ./sys.cmx ./string.cmx ./obj.cmx ./map.cmx ./list.cmx \
./char.cmx ./array.cmx camlinternalOO.cmi
char.cmo: char.cmi
char.cmx: char.cmi
complex.cmo: complex.cmi
complex.cmx: complex.cmi
digest.cmo: string.cmi printf.cmi digest.cmi
digest.cmx: string.cmx printf.cmx digest.cmi
filename.cmo: sys.cmi string.cmi random.cmi printf.cmi buffer.cmi \
digest.cmo: ./string.cmi ./printf.cmi digest.cmi
digest.cmx: ./string.cmx ./printf.cmx digest.cmi
filename.cmo: ./sys.cmi ./string.cmi ./random.cmi ./printf.cmi ./buffer.cmi \
filename.cmi
filename.cmx: sys.cmx string.cmx random.cmx printf.cmx buffer.cmx \
filename.cmx: ./sys.cmx ./string.cmx ./random.cmx ./printf.cmx ./buffer.cmx \
filename.cmi
format.cmo: string.cmi printf.cmi obj.cmi list.cmi buffer.cmi format.cmi
format.cmx: string.cmx printf.cmx obj.cmx list.cmx buffer.cmx format.cmi
gc.cmo: sys.cmi printf.cmi gc.cmi
gc.cmx: sys.cmx printf.cmx gc.cmi
genlex.cmo: string.cmi stream.cmi list.cmi hashtbl.cmi char.cmi genlex.cmi
genlex.cmx: string.cmx stream.cmx list.cmx hashtbl.cmx char.cmx genlex.cmi
hashtbl.cmo: sys.cmi array.cmi hashtbl.cmi
hashtbl.cmx: sys.cmx array.cmx hashtbl.cmi
int32.cmo: pervasives.cmi int32.cmi
int32.cmx: pervasives.cmx int32.cmi
int64.cmo: pervasives.cmi int64.cmi
int64.cmx: pervasives.cmx int64.cmi
lazy.cmo: obj.cmi lazy.cmi
lazy.cmx: obj.cmx lazy.cmi
lexing.cmo: sys.cmi string.cmi array.cmi lexing.cmi
lexing.cmx: sys.cmx string.cmx array.cmx lexing.cmi
format.cmo: ./string.cmi ./printf.cmi ./obj.cmi ./list.cmi ./buffer.cmi \
format.cmi
format.cmx: ./string.cmx ./printf.cmx ./obj.cmx ./list.cmx ./buffer.cmx \
format.cmi
gc.cmo: ./sys.cmi ./printf.cmi gc.cmi
gc.cmx: ./sys.cmx ./printf.cmx gc.cmi
genlex.cmo: ./string.cmi ./stream.cmi ./list.cmi ./hashtbl.cmi ./char.cmi \
genlex.cmi
genlex.cmx: ./string.cmx ./stream.cmx ./list.cmx ./hashtbl.cmx ./char.cmx \
genlex.cmi
hashtbl.cmo: ./sys.cmi ./array.cmi hashtbl.cmi
hashtbl.cmx: ./sys.cmx ./array.cmx hashtbl.cmi
int32.cmo: ./pervasives.cmi int32.cmi
int32.cmx: ./pervasives.cmx int32.cmi
int64.cmo: ./pervasives.cmi int64.cmi
int64.cmx: ./pervasives.cmx int64.cmi
lazy.cmo: ./obj.cmi lazy.cmi
lazy.cmx: ./obj.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
listLabels.cmo: ./list.cmi listLabels.cmi
listLabels.cmx: ./list.cmx listLabels.cmi
map.cmo: map.cmi
map.cmx: map.cmi
marshal.cmo: string.cmi marshal.cmi
marshal.cmx: string.cmx marshal.cmi
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
oo.cmo: camlinternalOO.cmi oo.cmi
oo.cmx: camlinternalOO.cmx oo.cmi
parsing.cmo: obj.cmi lexing.cmi array.cmi parsing.cmi
parsing.cmx: obj.cmx lexing.cmx array.cmx parsing.cmi
marshal.cmo: ./string.cmi marshal.cmi
marshal.cmx: ./string.cmx marshal.cmi
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
oo.cmo: ./camlinternalOO.cmi oo.cmi
oo.cmx: ./camlinternalOO.cmx oo.cmi
parsing.cmo: ./obj.cmi ./lexing.cmi ./array.cmi parsing.cmi
parsing.cmx: ./obj.cmx ./lexing.cmx ./array.cmx parsing.cmi
pervasives.cmo: pervasives.cmi
pervasives.cmx: pervasives.cmi
printexc.cmo: printf.cmi obj.cmi printexc.cmi
printexc.cmx: printf.cmx obj.cmx printexc.cmi
printf.cmo: string.cmi obj.cmi list.cmi char.cmi buffer.cmi printf.cmi
printf.cmx: string.cmx obj.cmx list.cmx char.cmx buffer.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 \
digest.cmi char.cmi array.cmi random.cmi
random.cmx: string.cmx pervasives.cmx nativeint.cmx int64.cmx int32.cmx \
digest.cmx char.cmx array.cmx random.cmi
scanf.cmo: string.cmi printf.cmi obj.cmi list.cmi hashtbl.cmi buffer.cmi \
scanf.cmi
scanf.cmx: string.cmx printf.cmx obj.cmx list.cmx hashtbl.cmx buffer.cmx \
scanf.cmi
printexc.cmo: ./printf.cmi ./obj.cmi printexc.cmi
printexc.cmx: ./printf.cmx ./obj.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
queue.cmo: ./obj.cmi queue.cmi
queue.cmx: ./obj.cmx queue.cmi
random.cmo: ./string.cmi ./pervasives.cmi ./nativeint.cmi ./int64.cmi \
./int32.cmi ./digest.cmi ./char.cmi ./array.cmi random.cmi
random.cmx: ./string.cmx ./pervasives.cmx ./nativeint.cmx ./int64.cmx \
./int32.cmx ./digest.cmx ./char.cmx ./array.cmx random.cmi
scanf.cmo: ./string.cmi ./printf.cmi ./obj.cmi ./list.cmi ./hashtbl.cmi \
./buffer.cmi scanf.cmi
scanf.cmx: ./string.cmx ./printf.cmx ./obj.cmx ./list.cmx ./hashtbl.cmx \
./buffer.cmx scanf.cmi
set.cmo: set.cmi
set.cmx: set.cmi
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
stream.cmo: string.cmi obj.cmi list.cmi stream.cmi
stream.cmx: string.cmx obj.cmx list.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
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
stream.cmo: ./string.cmi ./obj.cmi ./list.cmi stream.cmi
stream.cmx: ./string.cmx ./obj.cmx ./list.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
sys.cmo: sys.cmi
sys.cmx: sys.cmi
weak.cmo: sys.cmi obj.cmi hashtbl.cmi array.cmi weak.cmi
weak.cmx: sys.cmx obj.cmx hashtbl.cmx array.cmx weak.cmi
weak.cmo: ./sys.cmi ./obj.cmi ./hashtbl.cmi ./array.cmi weak.cmi
weak.cmx: ./sys.cmx ./obj.cmx ./hashtbl.cmx ./array.cmx weak.cmi

View File

@ -45,7 +45,7 @@ let rec update_mod shape o n =
match shape with
| Function ->
if Obj.tag n = Obj.closure_tag && Obj.size n <= Obj.size o
then overwrite o n
then begin overwrite o n; Obj.truncate o (Obj.size n) (* PR #4008 *) end
else overwrite o (Obj.repr (fun x -> (Obj.obj n : _ -> _) x))
| Lazy ->
assert (Obj.tag n = Obj.lazy_tag);

View File

@ -78,4 +78,4 @@ let catch_break on =
(* OCaml version string, must be in the format described in sys.mli. *)
let ocaml_version = "3.10+dev8 (2006-06-26)";;
let ocaml_version = "3.10+dev9 (2006-09-18)";;

View File

@ -11,39 +11,41 @@ dumpapprox.cmo: ../utils/config.cmi ../asmcomp/compilenv.cmi \
../asmcomp/clambda.cmi
dumpapprox.cmx: ../utils/config.cmx ../asmcomp/compilenv.cmx \
../asmcomp/clambda.cmx
dumpobj.cmo: ../utils/tbl.cmi opnames.cmo ../bytecomp/opcodes.cmo \
../bytecomp/lambda.cmi ../bytecomp/instruct.cmi ../typing/ident.cmi \
../bytecomp/emitcode.cmi ../utils/config.cmi ../bytecomp/bytesections.cmi \
dumpobj.cmo: ../utils/tbl.cmi ./opnames.cmo ../bytecomp/opcodes.cmo \
../parsing/location.cmi ../bytecomp/lambda.cmi ../bytecomp/instruct.cmi \
../typing/ident.cmi ../bytecomp/emitcode.cmi ../utils/config.cmi \
../bytecomp/cmo_format.cmi ../bytecomp/bytesections.cmi \
../parsing/asttypes.cmi
dumpobj.cmx: ../utils/tbl.cmx opnames.cmx ../bytecomp/opcodes.cmx \
../bytecomp/lambda.cmx ../bytecomp/instruct.cmx ../typing/ident.cmx \
../bytecomp/emitcode.cmx ../utils/config.cmx ../bytecomp/bytesections.cmx \
dumpobj.cmx: ../utils/tbl.cmx ./opnames.cmx ../bytecomp/opcodes.cmx \
../parsing/location.cmx ../bytecomp/lambda.cmx ../bytecomp/instruct.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
objinfo.cmo: ../bytecomp/emitcode.cmi ../utils/config.cmi
objinfo.cmx: ../bytecomp/emitcode.cmx ../utils/config.cmx
objinfo.cmo: ../utils/config.cmi ../bytecomp/cmo_format.cmi
objinfo.cmx: ../utils/config.cmx ../bytecomp/cmo_format.cmi
ocamlcp.cmo: ../driver/main_args.cmi
ocamlcp.cmx: ../driver/main_args.cmx
ocamldep.cmo: ../parsing/syntaxerr.cmi ../parsing/parsetree.cmi \
../parsing/parse.cmi ../utils/misc.cmi ../parsing/longident.cmi \
../parsing/location.cmi ../parsing/lexer.cmi depend.cmi \
../utils/config.cmi ../utils/clflags.cmo
../parsing/location.cmi ../parsing/lexer.cmi ./depend.cmi \
../utils/config.cmi ../utils/clflags.cmi
ocamldep.cmx: ../parsing/syntaxerr.cmx ../parsing/parsetree.cmi \
../parsing/parse.cmx ../utils/misc.cmx ../parsing/longident.cmx \
../parsing/location.cmx ../parsing/lexer.cmx depend.cmx \
../parsing/location.cmx ../parsing/lexer.cmx ./depend.cmx \
../utils/config.cmx ../utils/clflags.cmx
ocamlmktop.cmo: ../utils/ccomp.cmi
ocamlmktop.cmx: ../utils/ccomp.cmx
ocamlprof.cmo: ../parsing/syntaxerr.cmi ../parsing/parsetree.cmi \
../parsing/parse.cmi ../utils/misc.cmi ../parsing/location.cmi \
../parsing/lexer.cmi ../utils/config.cmi ../utils/clflags.cmo
../parsing/lexer.cmi ../utils/config.cmi ../utils/clflags.cmi
ocamlprof.cmx: ../parsing/syntaxerr.cmx ../parsing/parsetree.cmi \
../parsing/parse.cmx ../utils/misc.cmx ../parsing/location.cmx \
../parsing/lexer.cmx ../utils/config.cmx ../utils/clflags.cmx
primreq.cmo: ../bytecomp/emitcode.cmi ../utils/config.cmi
primreq.cmx: ../bytecomp/emitcode.cmx ../utils/config.cmx
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: ./lexer301.cmo
scrapelabels.cmx: ./lexer301.cmx

View File

@ -195,7 +195,9 @@ clean::
rm -f dumpobj
opnames.ml: ../byterun/instruct.h
unset LC_ALL LC_CTYPE LC_COLLATE LANG; \
unset LC_ALL || : ; \
unset LC_CTYPE || : ; \
unset LC_COLLATE LANG || : ; \
sed -e '/\/\*/d' \
-e '/^#/d' \
-e 's/enum \(.*\) {/let names_of_\1 = [|/' \

View File

@ -66,7 +66,7 @@ let find_dependency modname (byt_deps, opt_deps) =
try
let filename = find_file (modname ^ ".mli") in
let basename = Filename.chop_suffix filename ".mli" in
let optname =
let optname =
if Sys.file_exists (basename ^ ".ml")
then basename ^ ".cmx"
else basename ^ ".cmi" in

View File

@ -100,7 +100,7 @@ let special_id = ref ""
let add_val_counter (kind,pos) =
if kind = Open then begin
copy pos;
fprintf !outchan "(* %s%d *) " !special_id !counters.(!prof_counter);
fprintf !outchan "(* %s%d *) " !special_id !counters.(!prof_counter);
incr prof_counter;
end
;;
@ -129,7 +129,7 @@ let init_rewrite modes mod_name =
fprintf !outchan "module %sProfiling = Profiling;; " modprefix;
fprintf !outchan "let %s%s_cnt = Array.create 000000000" idprefix mod_name;
pos_len := pos_out !outchan;
fprintf !outchan
fprintf !outchan
" 0;; Profiling.counters := \
(\"%s\", (\"%s\", %s%s_cnt)) :: !Profiling.counters;; "
mod_name modes idprefix mod_name;
@ -235,7 +235,7 @@ and rw_exp iflag sexp =
rewrite_exp iflag scond;
rewrite_ifbody iflag sexp.pexp_loc.loc_ghost sifso;
rewrite_ifbody iflag sexp.pexp_loc.loc_ghost sifnot
| Pexp_sequence(sexp1, sexp2) ->
rewrite_exp iflag sexp1;
rewrite_exp iflag sexp2
@ -296,7 +296,7 @@ and rewrite_annotate_exp_list l =
List.iter
(function
| {pexp_desc = Pexp_when(scond, sbody)}
-> insert_profile rw_exp scond;
-> insert_profile rw_exp scond;
insert_profile rw_exp sbody;
| {pexp_desc = Pexp_constraint(sbody, _, _)} (* let f x : t = e *)
-> insert_profile rw_exp sbody
@ -307,7 +307,7 @@ and rewrite_function iflag = function
| [spat, ({pexp_desc = Pexp_function _} as sexp)] -> rewrite_exp iflag sexp
| l -> rewrite_funmatching l
and rewrite_funmatching l =
and rewrite_funmatching l =
rewrite_annotate_exp_list (List.map snd l)
and rewrite_trymatching l =
@ -449,6 +449,11 @@ open Format
let usage = "Usage: ocamlprof <options> <files>\noptions are:"
let print_version () =
printf "ocamlprof, version %s@." Sys.ocaml_version;
exit 0;
;;
let main () =
try
Arg.parse [
@ -461,7 +466,9 @@ let main () =
"-instrument", Arg.Set instr_mode, " (undocumented)";
"-intf", Arg.String process_intf_file,
"<file> Process <file> as a .mli file";
"-m", Arg.String (fun s -> modes := s), "<flags> (undocumented)"
"-m", Arg.String (fun s -> modes := s), "<flags> (undocumented)";
"-version", Arg.Unit print_version,
" Print version and exit";
] process_anon_file usage;
exit 0
with x ->

View File

@ -791,14 +791,14 @@ let rec copy ty =
let keep = more.level <> generic_level in
let more' =
match more.desc with
Tsubst ty -> ty
| Tconstr _ ->
if keep then save_desc more more.desc;
copy more
Tsubst ty -> ty
| Tconstr _ ->
if keep then save_desc more more.desc;
copy more
| Tvar | Tunivar ->
save_desc more more.desc;
if keep then more else newty more.desc
| _ -> assert false
| _ -> assert false
in
(* Register new type first for recursion *)
more.desc <- Tsubst(newgenty(Ttuple[more';t]));
@ -928,7 +928,7 @@ let delayed_copy = ref []
let rec copy_sep fixed free bound visited ty =
let ty = repr ty in
let univars = free ty in
if TypeSet.is_empty univars then
if TypeSet.is_empty univars then
if ty.level <> generic_level then ty else
let t = newvar () in
delayed_copy :=
@ -1040,7 +1040,7 @@ let apply env params body args =
(* Abbreviation expansion *)
(****************************)
(*
(*
If the environnement has changed, memorized expansions might not
be correct anymore, and so we flush the cache. This is safe but
quite pessimistic: it would be enough to flush the cache when a
@ -1054,7 +1054,7 @@ let check_abbrev_env env =
end
(* Expand an abbreviation. The expansion is memorized. *)
(*
(*
Assume the level is greater than the path binding time of the
expanded abbreviation.
*)
@ -1105,6 +1105,13 @@ let expand_abbrev env ty =
| _ ->
assert false
let safe_abbrev env ty =
let snap = Btype.snapshot () in
try ignore (expand_abbrev env ty); true
with Cannot_expand | Unify _ ->
Btype.backtrack snap;
false
(* Fully expand the head of a type.
Raise Cannot_expand if the type cannot be expanded.
May raise Unify, if a recursion was hidden in the type. *)
@ -1128,7 +1135,10 @@ let expand_head_once env ty =
try expand_abbrev env (repr ty) with Cannot_expand -> assert false
(* Fully expand the head of a type. *)
let rec expand_head env ty =
let expand_head_unif env ty =
try try_expand_head env ty with Cannot_expand -> repr ty
let expand_head env ty =
let snap = Btype.snapshot () in
try try_expand_head env ty
with Cannot_expand | Unify _ -> (* expand_head shall never fail *)
@ -1328,7 +1338,7 @@ let occur_univar env ty =
with exn ->
unmark_type ty; raise exn
(* Grouping univars by families according to their binders *)
(* Grouping univars by families according to their binders *)
let add_univars =
List.fold_left (fun s (t,_) -> TypeSet.add (repr t) s)
@ -1506,8 +1516,8 @@ let rec unify env t1 t2 =
and unify2 env t1 t2 =
(* Second step: expansion of abbreviations *)
let rec expand_both t1'' t2'' =
let t1' = expand_head env t1 in
let t2' = expand_head env t2 in
let t1' = expand_head_unif env t1 in
let t2' = expand_head_unif env t2 in
(* Expansion may have changed the representative of the types... *)
if t1' == t1'' && t2' == t2'' then (t1',t2') else
expand_both t1' t2'
@ -1526,7 +1536,7 @@ and unify3 env t1 t1' t2 t2' =
(* Third step: truly unification *)
(* Assumes either [t1 == t1'] or [t2 != t2'] *)
let d1 = t1'.desc and d2 = t2'.desc in
let create_recursion = (t2 != t2') && (deep_occur t1' t2) in
occur env t1' t2;
update_level env t1'.level t2;
@ -1600,7 +1610,7 @@ and unify3 env t1 t1' t2 t2' =
match t2.desc with
Tconstr (p, tl, abbrev) ->
forget_abbrev abbrev p;
let t2'' = expand_head env t2 in
let t2'' = expand_head_unif env t2 in
if not (closed_parameterized_type tl t2'') then
link_type (repr t2) (repr t2')
| _ ->
@ -1608,7 +1618,7 @@ and unify3 env t1 t1' t2 t2' =
end
(*
(*
(*
Can only be done afterwards, once the row variable has
(possibly) been instantiated.
*)
@ -1684,13 +1694,15 @@ and unify_row env row1 row2 =
let rm1 = row_more row1 and rm2 = row_more row2 in
if rm1 == rm2 then () else
let r1, r2, pairs = merge_row_fields row1.row_fields row2.row_fields in
ignore (List.fold_left
(fun hl l ->
let h = hash_variant l in
try raise(Tags(l,List.assoc h hl))
with Not_found -> (h,l)::hl)
(List.map (fun (l,_) -> (hash_variant l, l)) row1.row_fields)
(List.map fst r2));
if r1 <> [] && r2 <> [] then begin
let ht = Hashtbl.create (List.length r1) in
List.iter (fun (l,_) -> Hashtbl.add ht (hash_variant l) l) r1;
List.iter
(fun (l,_) ->
try raise (Tags(l, Hashtbl.find ht (hash_variant l)))
with Not_found -> ())
r2
end;
let more =
if row1.row_fixed then rm1 else
if row2.row_fixed then rm2 else
@ -1804,7 +1816,7 @@ and unify_row_field env fixed1 fixed2 l f1 f2 =
| Rpresent None, Reither(true, [], _, e2) when not fixed2 ->
set_row_field e2 f1
| _ -> raise (Unify [])
let unify env ty1 ty2 =
try
@ -1847,7 +1859,7 @@ let unify env ty1 ty2 =
(2) the original label is not optional
*)
let rec filter_arrow env t l =
let t = expand_head env t in
let t = expand_head_unif env t in
match t.desc with
Tvar ->
let t1 = newvar () and t2 = newvar () in
@ -1890,7 +1902,7 @@ let rec filter_method_field env name priv ty =
(* Unify [ty] and [< name : 'a; .. >]. Return ['a]. *)
let rec filter_method env name priv ty =
let ty = expand_head env ty in
let ty = expand_head_unif env ty in
match ty.desc with
Tvar ->
let ty1 = newvar () in
@ -1924,7 +1936,7 @@ let filter_self_method env lab priv meths ty =
Update the level of [ty]. First check that the levels of generic
variables from the subject are not lowered.
*)
let moregen_occur env level ty =
let moregen_occur env level ty =
let rec occur ty =
let ty = repr ty in
if ty.level > level then begin
@ -1964,8 +1976,8 @@ let rec moregen inst_nongen type_pairs env t1 t2 =
| (Tconstr (p1, [], _), Tconstr (p2, [], _)) when Path.same p1 p2 ->
()
| _ ->
let t1' = expand_head env t1 in
let t2' = expand_head env t2 in
let t1' = expand_head_unif env t1 in
let t2' = expand_head_unif env t2 in
(* Expansion may have changed the representative of the types... *)
let t1' = repr t1' and t2' = repr t2' in
if t1' == t2' then () else
@ -2043,7 +2055,7 @@ and moregen_row inst_nongen type_pairs env row1 row2 =
filter_row_fields true r1, filter_row_fields false r2
else r1, r2
in
if r1 <> [] || row1.row_closed && (not row2.row_closed || r2 <> [])
if r1 <> [] || row1.row_closed && (not row2.row_closed || r2 <> [])
then raise (Unify []);
let rm1 = repr row1.row_more and rm2 = repr row2.row_more in
let univ =
@ -2211,8 +2223,8 @@ let rec eqtype rename type_pairs subst env t1 t2 =
| (Tconstr (p1, [], _), Tconstr (p2, [], _)) when Path.same p1 p2 ->
()
| _ ->
let t1' = expand_head env t1 in
let t2' = expand_head env t2 in
let t1' = expand_head_unif env t1 in
let t2' = expand_head_unif env t2 in
(* Expansion may have changed the representative of the types... *)
let t1' = repr t1' and t2' = repr t2' in
if t1' == t2' then () else
@ -2325,7 +2337,7 @@ and eqtype_row rename type_pairs subst env row1 row2 =
| Rabsent, Rabsent -> ()
| _ -> raise (Unify []))
pairs
(* Two modes: with or without renaming of variables *)
let equal env rename tyl1 tyl2 =
try
@ -2334,7 +2346,7 @@ let equal env rename tyl1 tyl2 =
with
Unify _ -> false
(* Must empty univar_pairs first *)
(* Must empty univar_pairs first *)
let eqtype rename type_pairs subst env t1 t2 =
univar_pairs := [];
eqtype rename type_pairs subst env t1 t2
@ -2719,7 +2731,8 @@ let rec build_subtype env visited loops posi level t =
if c > Unchanged then (newty (Ttuple (List.map fst tlist')), c)
else (t, Unchanged)
| Tconstr(p, tl, abbrev)
when level > 0 && generic_abbrev env p && not (has_constr_row' env t) ->
when level > 0 && generic_abbrev env p && safe_abbrev env t
&& not (has_constr_row' env t) ->
let t' = repr (expand_abbrev env t) in
let level' = pred_expand level in
begin try match t'.desc with
@ -2759,7 +2772,8 @@ let rec build_subtype env visited loops posi level t =
let visited = t :: visited in
begin try
let decl = Env.find_type p env in
if level = 0 && generic_abbrev env p && not (has_constr_row' env t)
if level = 0 && generic_abbrev env p && safe_abbrev env t
&& not (has_constr_row' env t)
then warn := true;
let tl' =
List.map2
@ -2873,7 +2887,7 @@ let rec subtype_rec env trace t1 t2 cstrs =
let t1 = repr t1 in
let t2 = repr t2 in
if t1 == t2 then cstrs else
begin try
TypePairs.find subtypes (t1, t2);
cstrs
@ -2890,9 +2904,11 @@ let rec subtype_rec env trace t1 t2 cstrs =
subtype_list env trace tl1 tl2 cstrs
| (Tconstr(p1, [], _), Tconstr(p2, [], _)) when Path.same p1 p2 ->
cstrs
| (Tconstr(p1, tl1, abbrev1), _) when generic_abbrev env p1 ->
| (Tconstr(p1, tl1, abbrev1), _)
when generic_abbrev env p1 && safe_abbrev env t1 ->
subtype_rec env trace (expand_abbrev env t1) t2 cstrs
| (_, Tconstr(p2, tl2, abbrev2)) when generic_abbrev env p2 ->
| (_, Tconstr(p2, tl2, abbrev2))
when generic_abbrev env p2 && safe_abbrev env t2 ->
subtype_rec env trace t1 (expand_abbrev env t2) cstrs
| (Tconstr(p1, tl1, _), Tconstr(p2, tl2, _)) when Path.same p1 p2 ->
begin try
@ -2902,7 +2918,7 @@ let rec subtype_rec env trace t1 t2 cstrs =
if co then
if cn then
(trace, newty2 t1.level (Ttuple[t1]),
newty2 t2.level (Ttuple[t2]), !univar_pairs) :: cstrs
newty2 t2.level (Ttuple[t2]), !univar_pairs) :: cstrs
else subtype_rec env ((t1, t2)::trace) t1 t2 cstrs
else
if cn then subtype_rec env ((t2, t1)::trace) t2 t1 cstrs
@ -3082,8 +3098,9 @@ let cyclic_abbrev env id ty =
p = Path.Pident id || List.memq ty seen ||
begin try
check_cycle (ty :: seen) (expand_abbrev env ty)
with Cannot_expand ->
false
with
Cannot_expand -> false
| Unify _ -> true
end
| _ ->
false
@ -3151,7 +3168,7 @@ let rec normalize_type_rec env ty =
let normalize_type env ty =
normalize_type_rec env ty;
unmark_type ty
(*************************)
(* Remove dependencies *)

View File

@ -35,6 +35,7 @@ type error =
| Class_declarations of
Ident.t * class_declaration * class_declaration *
Ctype.class_match_failure list
| Unbound_modtype_path of Path.t
exception Error of error list
@ -89,7 +90,7 @@ let expand_module_path env path =
try
Env.find_modtype_expansion path env
with Not_found ->
raise Dont_match
raise(Error[Unbound_modtype_path path])
(* Extract name, kind and ident from a signature item *)
@ -377,6 +378,8 @@ let include_err ppf = function
(Printtyp.class_declaration id) d1
(Printtyp.class_declaration id) d2
Includeclass.report_error reason
| Unbound_modtype_path path ->
fprintf ppf "Unbound module type %a" Printtyp.path path
let report_error ppf = function
| [] -> ()

View File

@ -40,6 +40,7 @@ type error =
| Class_declarations of
Ident.t * class_declaration * class_declaration *
Ctype.class_match_failure list
| Unbound_modtype_path of Path.t
exception Error of error list

View File

@ -89,21 +89,21 @@ let merge_constraint initial_env loc sg lid constr =
| (Tsig_type(id, decl, rs) :: rem, [s],
Pwith_type ({ptype_kind = Ptype_private} as sdecl))
when Ident.name id = s ->
let decl_row =
{ type_params =
List.map (fun _ -> Btype.newgenvar()) sdecl.ptype_params;
type_arity = List.length sdecl.ptype_params;
type_kind = Type_abstract;
type_manifest = None;
type_variance =
List.map (fun (c,n) -> (not n, not c, not c))
let decl_row =
{ type_params =
List.map (fun _ -> Btype.newgenvar()) sdecl.ptype_params;
type_arity = List.length sdecl.ptype_params;
type_kind = Type_abstract;
type_manifest = None;
type_variance =
List.map (fun (c,n) -> (not n, not c, not c))
sdecl.ptype_variance }
and id_row = Ident.create (s^"#row") in
let initial_env = Env.add_type id_row decl_row initial_env in
and id_row = Ident.create (s^"#row") in
let initial_env = Env.add_type id_row decl_row initial_env in
let newdecl = Typedecl.transl_with_constraint
initial_env (Some(Pident id_row)) sdecl in
check_type_decl env id row_id newdecl decl rs rem;
let decl_row = {decl_row with type_params = newdecl.type_params} in
let decl_row = {decl_row with type_params = newdecl.type_params} in
let rs' = if rs = Trec_first then Trec_not else rs in
Tsig_type(id_row, decl_row, rs') :: Tsig_type(id, newdecl, rs) :: rem
| (Tsig_type(id, decl, rs) :: rem, [s], Pwith_type sdecl)
@ -157,7 +157,7 @@ let approx_modtype transl_mty init_env smty =
match smty.pmty_desc with
Pmty_ident lid ->
begin try
let (path, info) = Env.lookup_modtype lid env in
let (path, info) = Env.lookup_modtype lid env in
Tmty_ident path
with Not_found ->
raise(Error(smty.pmty_loc, Unbound_modtype lid))
@ -210,7 +210,7 @@ let approx_modtype transl_mty init_env smty =
let sg = Subst.signature Subst.identity
(extract_sig env smty.pmty_loc mty) in
let newenv = Env.add_signature sg env in
sg @ approx_sig newenv srem
sg @ approx_sig newenv srem
| Psig_class sdecls | Psig_class_type sdecls ->
let decls = Typeclass.approx_class_declarations env sdecls in
let rem = approx_sig env srem in
@ -271,7 +271,7 @@ let rec transl_modtype env smty =
match smty.pmty_desc with
Pmty_ident lid ->
begin try
let (path, info) = Env.lookup_modtype lid env in
let (path, info) = Env.lookup_modtype lid env in
Tmty_ident path
with Not_found ->
raise(Error(smty.pmty_loc, Unbound_modtype lid))
@ -292,7 +292,7 @@ let rec transl_modtype env smty =
merge_constraint env smty.pmty_loc sg lid sdecl)
init_sg constraints in
Mtype.freshen (Tmty_signature final_sg)
and transl_signature env sg =
let type_names = ref StringSet.empty
and module_names = ref StringSet.empty
@ -543,7 +543,7 @@ let rec type_module anchor env smod =
mod_loc = smod.pmod_loc }
| _ ->
raise(Error(sfunct.pmod_loc, Cannot_apply funct.mod_type))
end
end
| Pmod_constraint(sarg, smty) ->
let arg = type_module anchor env sarg in
let mty = transl_modtype env smty in
@ -592,7 +592,7 @@ and type_structure anchor env sstr =
(fun (name, decl) -> check "type" loc type_names name)
sdecls;
let (decls, newenv) = Typedecl.transl_type_decl env sdecls in
let newenv' =
let newenv' =
enrich_type_decls anchor decls env newenv in
let (str_rem, sig_rem, final_env) = type_struct newenv' srem in
(Tstr_type decls :: str_rem,
@ -849,7 +849,7 @@ let package_units objfiles cmifile modulename =
raise(Error(Location.in_file mlifile, Interface_not_compiled mlifile))
end;
let dclsig = Env.read_signature modulename cmifile in
Includemod.compunit "(obtained by packing)" sg mlifile dclsig
Includemod.compunit "(obtained by packing)" sg mlifile dclsig
end else begin
(* Determine imports *)
let unit_names = List.map fst units in

View File

@ -333,18 +333,17 @@ let rec transl_type env policy styp =
raise(Error(styp.ptyp_loc, Present_has_no_type l)))
present
end;
ignore begin
List.fold_left
(fun hl (l,_) ->
let h = Btype.hash_variant l in
try
let l' = List.assoc h hl in
if l <> l' then raise(Error(styp.ptyp_loc, Variant_tags(l, l')));
hl
with Not_found -> (h,l) :: hl)
[]
fields
end;
(* Check for tag conflicts *)
let ht = Hashtbl.create (List.length fields + 1) in
List.iter
(fun (l,_) ->
let h = Btype.hash_variant l in
try
let l' = Hashtbl.find ht h in
if l <> l' then raise(Error(styp.ptyp_loc, Variant_tags(l, l')))
with Not_found ->
Hashtbl.add ht h l)
fields;
let row =
{ row_fields = List.rev fields; row_more = newvar ();
row_bound = !bound; row_closed = closed;