summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changes43
-rw-r--r--Makefile.nt19
-rw-r--r--VERSION2
-rw-r--r--debugger/program_loading.ml27
-rw-r--r--driver/main_args.ml12
-rw-r--r--otherlibs/unix/unix.mli4
-rw-r--r--parsing/lexer.mll2
-rw-r--r--testsuite/external/.ignore4
-rw-r--r--testsuite/external/Makefile37
-rw-r--r--testsuite/tests/typing-fstclassmod/Makefile2
-rw-r--r--testsuite/tests/typing-fstclassmod/fstclassmod.ml13
-rw-r--r--testsuite/tests/typing-fstclassmod/fstclassmod.reference1
-rw-r--r--typing/includemod.ml2
13 files changed, 113 insertions, 55 deletions
diff --git a/Changes b/Changes
index a3cdb827c..1af2190cb 100644
--- a/Changes
+++ b/Changes
@@ -20,7 +20,7 @@ Other libraries:
Type system:
* Keep typing of pattern cases independent in principal mode
(i.e. information from previous cases is no longer used when typing
- patterns; cf. PR6235' in typing-warnings/records.ml)
+ patterns; cf. 'PR#6235' in testsuite/test/typing-warnings/records.ml)
- Allow opening a first-class module or applying a generative functor
in the body of a generative functor. Allow it also in the body of
an applicative functor if no types are created
@@ -78,10 +78,25 @@ Bug fixes:
- PR#6062: Fix a regression bug caused by commit 13047
- PR#6109: Typos in ocamlbuild error messages
- PR#6116: more efficient implementation of Digest.to_hex (patch by ygrek)
+- PR#6165: Alterations to handling of \013 in source files breaking other tools
+- PR#6173: Typing error message is worse that before
- PR#6174: OCaml compiler loops on an example using GADTs (-rectypes case)
+- PR#6175: Fix open!
+- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
- PR#6184: ocamlbuild: `ocamlfind ocamldep` does not support -predicate
(report and patch by Jacques-Pascal Deplaix)
+- PR#6194: Incorrect unused warning with first-class modules in patterns
+- PR#6216: inlining of GADT matches generates invalid assembly
+- PR#6233: out-of-bounds exceptions lose their locations on ARM, PowerPC
+- PR#6235: Issue with type information flowing through a variant pattern
+- PR#6239: sometimes wrong stack alignment when raising exceptions
+ in -g mode with backtraces active
+- PR#6240: Fail to expand module type abbreviation during substyping
+- PR#6241: Assumed inequality between paths involving functor arguments
+- PR#6243: Make "ocamlopt -g" more resistant to ill-formed locations
- PR#6262: equality of first-class modules take module aliases into account
+- PR#6267: more information printed by "bt" command of ocamldebug
+- PR#6275: Soundness bug related to type constraints
- PR#6293: Assert_failure with invalid package type
- PR#6307: Behavior of 'module type of' w.r.t. module aliases
- PR#6346: Build failure with latest version of xcode on OSX
@@ -111,29 +126,6 @@ Features wishes:
- shorten syntax for functor signatures: "functor (M1:S1) (M2:S2) .. -> .."
(patches by Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
-OCaml 4.01.1:
--------------
-
-Bug fixes:
-- PR#4855: 'camlp4 -I +dir' accepted, dir is related to 'camlp4 -where'
-- PR#5820: Fix camlp4 lexer roll back problem
-- PR#6062: Fix a regression bug caused by commit 13047
-- PR#6165: Alterations to handling of \013 in source files breaking other tools
-- PR#6173: Typing error message is worse that before
-- PR#6174: OCaml compiler loops on an example using GADTs (non -rectypes)
-- PR#6175: Fix open!
-- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
-- PR#6216: inlining of GADT matches generates invalid assembly
-- PR#6233: out-of-bounds exceptions lose their locations on ARM, PowerPC
-- PR#6235: Issue with type information flowing through a variant pattern
-- PR#6239: sometimes wrong stack alignment when raising exceptions
- in -g mode with backtraces active
-- PR#6240: Fail to expand module type abbreviation during substyping
-- PR#6241: Assumed inequality between paths involving functor arguments
-- PR#6243: Make "ocamlopt -g" more resistant to ill-formed locations
-- PR#6267: more information printed by "bt" command of ocamldebug
-- PR#6275: Soundness bug related to type constraints
-
OCaml 4.01.0:
-------------
@@ -510,6 +502,8 @@ Bug fixes:
(Jacques Garrigue, report by Leo P. White)
- PR#6164: segmentation fault on Num.power_num of 0/1
(Fabrice Le Fessant, report by Johannes Kanig)
+- PR#6210: Camlp4 location error
+ (Hongbo Zhang, report by Jun Furuse)
Feature wishes:
- PR#5181: Merge common floating point constants in ocamlopt
@@ -703,6 +697,7 @@ Installation procedure:
(-runtime-variant) to select the debug runtime.
Bug Fixes:
+
- PR#1643: functions of the Lazy module whose named started with 'lazy_' have
been deprecated, and new ones without the prefix added
- PR#3571: in Bigarrays, call msync() before unmapping to commit changes
diff --git a/Makefile.nt b/Makefile.nt
index ae16272e2..557176900 100644
--- a/Makefile.nt
+++ b/Makefile.nt
@@ -117,12 +117,13 @@ all: runtime ocamlc ocamllex ocamlyacc ocamltools library ocaml \
# Compile everything the first time
world: coldstart all
-# Complete bootstrapping cycle
-bootstrap:
+# Core bootstrapping cycle
+coreboot:
# Save the original bootstrap compiler
$(MAKEREC) backup
# Promote the new compiler but keep the old runtime
-# This compiler runs on boot/ocamlrun and produces bytecode for byterun/ocamlrun
+# This compiler runs on boot/ocamlrun and produces bytecode for
+# byterun/ocamlrun
$(MAKEREC) promote-cross
# Rebuild ocamlc and ocamllex (run on byterun/ocamlrun)
$(MAKEREC) partialclean
@@ -131,12 +132,18 @@ bootstrap:
$(MAKEREC) library-cross
# Promote the new compiler and the new runtime
$(MAKEREC) promote
-# Rebuild everything, including ocaml and the tools
+# Rebuild the core system
$(MAKEREC) partialclean
- $(MAKEREC) all
+ $(MAKEREC) core
# Check if fixpoint reached
$(MAKEREC) compare
+# Do a complete bootstrapping cycle
+bootstrap:
+ $(MAKEREC) coreboot
+ $(MAKEREC) all
+ $(MAKEREC) compare
+
LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader
# Start up the system from the distribution compiler
@@ -149,7 +156,7 @@ coldstart:
cd stdlib ; cp $(LIBFILES) ../boot
# Build the core system: the minimum needed to make depend and bootstrap
-core : runtime ocamlc ocamllex ocamlyacc ocamltools library
+core: runtime ocamlc ocamllex ocamlyacc ocamltools library
# Save the current bootstrap compiler
MAXSAVED=boot/Saved/Saved.prev/Saved.prev/Saved.prev/Saved.prev/Saved.prev
diff --git a/VERSION b/VERSION
index a805af52b..7bcd56547 100644
--- a/VERSION
+++ b/VERSION
@@ -1,4 +1,4 @@
-4.02.0+dev3-2013-12-19
+4.02.0+dev4-2014-04-03
# The version string is the first line of this file.
# It must be in the format described in stdlib/sys.mli
diff --git a/debugger/program_loading.ml b/debugger/program_loading.ml
index b2d472a7d..1ebbd1e82 100644
--- a/debugger/program_loading.ml
+++ b/debugger/program_loading.ml
@@ -41,10 +41,35 @@ let get_unix_environment () =
String.concat "" (List.map f !Debugger_config.environment)
;;
+(* Notes:
+ 1. This quoting is not the same as [Filename.quote] because the "set"
+ command is a shell built-in and its quoting rules are different
+ from regular commands.
+ 2. Microsoft's documentation omits the double-quote from the list
+ of characters that need quoting, but that is a mistake (unquoted
+ quotes are included in the value, but they alter the quoting of
+ characters between them).
+ Reference: http://msdn.microsoft.com/en-us/library/bb490954.aspx
+ *)
+let quote_for_windows_shell s =
+ let b = Buffer.create (20 + String.length s) in
+ for i = 0 to String.length s - 1 do
+ begin match s.[i] with
+ | '<' | '>' | '|' | '&' | '^' | '\"' ->
+ Buffer.add_char b '^';
+ | _ -> ()
+ end;
+ Buffer.add_char b s.[i];
+ done;
+ Buffer.contents b
+;;
+
(* Returns a command line prefix to set environment for the debuggee *)
let get_win32_environment () =
(* Note: no space before the & or Windows will add it to the value *)
- let f (vname, vvalue) = Printf.sprintf "set %s=%s&" vname vvalue in
+ let f (vname, vvalue) =
+ Printf.sprintf "set %s=%s&" vname (quote_for_windows_shell vvalue)
+ in
String.concat "" (List.map f !Debugger_config.environment)
(* A generic function for launching the program *)
diff --git a/driver/main_args.ml b/driver/main_args.ml
index aba306b54..ec97d6c98 100644
--- a/driver/main_args.ml
+++ b/driver/main_args.ml
@@ -724,6 +724,7 @@ struct
mk_warn_error F._warn_error;
mk_warn_help F._warn_help;
mk_where F._where;
+ mk__ F.anonymous;
mk_nopervasives F._nopervasives;
mk_use_prims F._use_prims;
@@ -733,8 +734,6 @@ struct
mk_drawlambda F._drawlambda;
mk_dlambda F._dlambda;
mk_dinstr F._dinstr;
-
- mk__ F.anonymous;
]
end;;
@@ -765,6 +764,7 @@ struct
mk_w F._w;
mk_warn_error F._warn_error;
mk_warn_help F._warn_help;
+ mk__ F.anonymous;
mk_dsource F._dsource;
mk_dparsetree F._dparsetree;
@@ -772,8 +772,6 @@ struct
mk_drawlambda F._drawlambda;
mk_dlambda F._dlambda;
mk_dinstr F._dinstr;
-
- mk__ F.anonymous;
]
end;;
@@ -832,6 +830,7 @@ struct
mk_warn_error F._warn_error;
mk_warn_help F._warn_help;
mk_where F._where;
+ mk__ F.anonymous;
mk_nopervasives F._nopervasives;
mk_dsource F._dsource;
@@ -853,8 +852,6 @@ struct
mk_dscheduling F._dscheduling;
mk_dlinear F._dlinear;
mk_dstartup F._dstartup;
-
- mk__ F.anonymous;
]
end;;
@@ -887,6 +884,7 @@ module Make_opttop_options (F : Opttop_options) = struct
mk_w F._w;
mk_warn_error F._warn_error;
mk_warn_help F._warn_help;
+ mk__ F.anonymous;
mk_dsource F._dsource;
mk_dparsetree F._dparsetree;
@@ -906,7 +904,5 @@ module Make_opttop_options (F : Opttop_options) = struct
mk_dscheduling F._dscheduling;
mk_dlinear F._dlinear;
mk_dstartup F._dstartup;
-
- mk__ F.anonymous;
]
end;;
diff --git a/otherlibs/unix/unix.mli b/otherlibs/unix/unix.mli
index d8a15753e..efc3fe6fc 100644
--- a/otherlibs/unix/unix.mli
+++ b/otherlibs/unix/unix.mli
@@ -799,8 +799,8 @@ val setitimer :
its previous status. The [s] argument is interpreted as follows:
[s.it_value], if nonzero, is the time to the next timer expiration;
[s.it_interval], if nonzero, specifies a value to
- be used in reloading it_value when the timer expires.
- Setting [s.it_value] to zero disable the timer.
+ be used in reloading [it_value] when the timer expires.
+ Setting [s.it_value] to zero disables the timer.
Setting [s.it_interval] to zero causes the timer to be disabled
after its next expiration. *)
diff --git a/parsing/lexer.mll b/parsing/lexer.mll
index 910027c04..831fc91ed 100644
--- a/parsing/lexer.mll
+++ b/parsing/lexer.mll
@@ -255,7 +255,7 @@ let () =
}
-let newline = ('\013'* '\010' )
+let newline = ('\013'* '\010')
let blank = [' ' '\009' '\012']
let lowercase = ['a'-'z' '_']
let uppercase = ['A'-'Z']
diff --git a/testsuite/external/.ignore b/testsuite/external/.ignore
index 8d1415349..9fb6a7216 100644
--- a/testsuite/external/.ignore
+++ b/testsuite/external/.ignore
@@ -47,6 +47,8 @@ corekernel
core_kernel-109.37.00
cryptokit
cryptokit-1.6
+csv
+csv-1.3.1
customprintf
custom_printf-109.27.00
dbm
@@ -140,7 +142,7 @@ variantslib-109.15.00
vsyml
vsyml-2010-04-06
xmllight
-xml-light-2.2
+xml-light.2.3
xmlm
xmlm-1.1.0
zarith
diff --git a/testsuite/external/Makefile b/testsuite/external/Makefile
index c91e98084..10c49a8e3 100644
--- a/testsuite/external/Makefile
+++ b/testsuite/external/Makefile
@@ -856,20 +856,20 @@ distclean::
all: ocgi
# http://tech.motion-twin.com/xmllight
-XMLLIGHT=xml-light-2.2
-${XMLLIGHT}.zip:
- ${WGET} http://tech.motion-twin.com/zip/$@
-xmllight: ${XMLLIGHT}.zip
+XMLLIGHT=xml-light.2.3
+${XMLLIGHT}.tar.gz:
+ ${WGET} https://github.com/bguil/ocamllibs/releases/download/xml-light.2.3/$@
+xmllight: ${XMLLIGHT}.tar.gz
printf "%s " "$@" >/dev/tty
test -d ${PREFIX}
rm -rf xml-light ${XMLLIGHT}
- unzip ${XMLLIGHT}.zip && mv xml-light ${XMLLIGHT}
+ tar zxf ${XMLLIGHT}.tar.gz
./Patcher.sh ${XMLLIGHT}
( cd ${XMLLIGHT} && \
export PATH=${PREFIX}/bin:$$PATH && \
${MAKE} xml_parser.ml && \
${MAKE} all opt && \
- ${MAKE} install )
+ ${MAKE} install_ocamlfind )
echo ${VERSION} >$@
clean::
rm -rf ${XMLLIGHT} xml-light xmllight
@@ -1529,7 +1529,7 @@ distclean::
rm -f ${KAPUTT}.tar.gz
all: kaputt
-#http://www.coherentpdf.com/ocaml-libraries.html
+# http://www.coherentpdf.com/ocaml-libraries.html
CAMLPDF=camlpdf-0.5
${CAMLPDF}.tar.bz2:
${WGET} http://www.coherentpdf.com/$@
@@ -1550,6 +1550,29 @@ distclean::
rm -f ${CAMLPDF}.tar.gz
all: camlpdf
+# https://forge.ocamlcore.org/projects/csv
+CSV=csv-1.3.1
+${CSV}.tar.gz:
+ ${WGET} https://forge.ocamlcore.org/frs/download.php/1235/$@
+csv: ${CSV}.tar.gz findlib
+ printf "%s " "$@" >/dev/tty
+ test -d ${PREFIX}
+ rm -rf ${CSV}
+ tar zxf ${CSV}.tar.gz
+ ./Patcher.sh ${CSV}
+ ( cd ${CSV} && \
+ export PATH=${PREFIX}/bin:$$PATH && \
+ ocaml setup.ml -configure --enable-tests --prefix ${PREFIX} && \
+ ocaml setup.ml -build && \
+ ocamlfind remove csv && \
+ ocaml setup.ml -install )
+ echo ${VERSION} >$@
+clean::
+ rm -rf ${CSV} csv
+distclean::
+ rm -f ${CSV}.tar.gz
+all: csv
+
# disabled: need to be updated for new AST stuff
# # http://pauillac.inria.fr/~ddr/camlp5/
# CAMLP5=camlp5-6.10
diff --git a/testsuite/tests/typing-fstclassmod/Makefile b/testsuite/tests/typing-fstclassmod/Makefile
index e854696f4..e77918367 100644
--- a/testsuite/tests/typing-fstclassmod/Makefile
+++ b/testsuite/tests/typing-fstclassmod/Makefile
@@ -13,7 +13,7 @@
BASEDIR=../..
#MODULES=
MAIN_MODULE=fstclassmod
-ADD_COMPFLAGS=-w a
+ADD_COMPFLAGS=-w A -warn-error A
include $(BASEDIR)/makefiles/Makefile.one
include $(BASEDIR)/makefiles/Makefile.common
diff --git a/testsuite/tests/typing-fstclassmod/fstclassmod.ml b/testsuite/tests/typing-fstclassmod/fstclassmod.ml
index 82af377be..bc8d66e51 100644
--- a/testsuite/tests/typing-fstclassmod/fstclassmod.ml
+++ b/testsuite/tests/typing-fstclassmod/fstclassmod.ml
@@ -146,11 +146,20 @@ let () =
module type S1 = sig end
module type S2 = S1
-let f (x : (module S1)) : (module S2) = x
+let _f (x : (module S1)) : (module S2) = x
module X = struct
module type S
end
module Y = struct include X end
-let f (x : (module X.S)) : (module Y.S) = x
+let _f (x : (module X.S)) : (module Y.S) = x
+
+(* PR#6194, main example *)
+module type S3 = sig val x : bool end;;
+let f = function
+ | Some (module M : S3) when M.x ->1
+ | Some _ -> 2
+ | None -> 3
+;;
+print_endline (string_of_int (f (Some (module struct let x = false end))));;
diff --git a/testsuite/tests/typing-fstclassmod/fstclassmod.reference b/testsuite/tests/typing-fstclassmod/fstclassmod.reference
index 59c7aa116..ec517d789 100644
--- a/testsuite/tests/typing-fstclassmod/fstclassmod.reference
+++ b/testsuite/tests/typing-fstclassmod/fstclassmod.reference
@@ -4,3 +4,4 @@ abc/def/xyz xyz/def/abc
XXXXXXXX
10
(123,("A",456))
+2
diff --git a/typing/includemod.ml b/typing/includemod.ml
index 7316a26af..b1f20deee 100644
--- a/typing/includemod.ml
+++ b/typing/includemod.ml
@@ -189,7 +189,7 @@ let rec modtypes env cxt subst mty1 mty2 =
and try_modtypes env cxt subst mty1 mty2 =
match (mty1, mty2) with
- (Mty_alias p1, Mty_alias p2) ->
+ | (Mty_alias p1, Mty_alias p2) ->
if Path.same p1 p2 then Tcoerce_none else
let p1 = Env.normalize_path None env p1
and p2 = Env.normalize_path None env (Subst.module_path subst p2) in