Release branch for 4.06:
------------------------
(Changes that can break existing programs are marked with a "*")
### Language features:
- GPR#792: fix limitations of destructive substitutions, by
allowing "S with type t := type-expr",
"S with type M.t := type-expr", "S with module M.N := path"
(Valentin Gatien-Baron, review by Jacques Garrigue and Leo White)
- GPR#1118: Support inherited field in object type expression
(Runhang Li, reivew by Jeremy Yallop, Leo White, Jacques Garrigue,
and Florian Angeletti)
- MPR#6271, MPR#7529, GPR#1249: Support "let open M in ..."
in class expressions and class type expressions.
(Alain Frisch, reviews by Thomas Refis and Jacques Garrigue)
- GPR#1064: extended indexing operators, add a new class of
user-defined indexing operators, obtained by adding at least
one operator character after the dot symbol to the standard indexing
operators: e,g ".%()", ".?[]", ".@{}<-"
(Florian Angeletti, review by Damien Doligez and Gabriel Radanne)
- GPR#1142: Mark assertions nonexpansive, so that 'assert false'
can be used as a placeholder for a polymorphic function.
(Stephen Dolan)
* GPR#1232: Support Unicode character escape sequences in string
literals via the \u{X+} syntax. These escapes are substituted by the
UTF-8 encoding of the Unicode character.
(Daniel Bünzli, review by Damien Doligez, Alain Frisch, Xavier
Leroy and Leo White)
- GPR#1247: M.(::) construction for expressions
and patterns (plus fix printing of (::) in the toplevel)
(Florian Angeletti, review by Alain Frisch, Gabriel Scherer)
* GPR#1252: The default mode is now safe-string, can be overridden
at configure time or at compile time.
(Damien Doligez)
- GPR#1253: Private extensible variants
(Leo White, review by Alain Frisch)
- GPR#1348: accept anonymous type parameters in with constraints,
"S with type _ t = int".
(Valentin Gatien-Baron, report by Jeremy Yallop)
### Type system
* GPR#556, PR#7215, PR#7231, PR#6738: Add a new check that 'let rec' bindings
are well formed.
(Jeremy Yallop, reviews by Stephen Dolan, Gabriel Scherer, Leo
White, and Damien Doligez)
### Standard library:
- MPR#1771, MPR#7309, GPR#1026: Add update to maps. Allows to update a
binding in a map or create a new binding if the key had no binding
(Sébastien Briais, review by Daniel Buenzli, Alain Frisch and
Gabriel Scherer)
- MPR#7515, GPR#1147: Arg.align now optionally uses the tab character '\t' to
separate the "unaligned" and "aligned" parts of the documentation string. If
tab is not present, then space is used as a fallback. Allows to have spaces in
the unaligned part, which is useful for Tuple options.
(Nicolas Ojeda Bar, review by Alain Frisch and Gabriel Scherer)
* GPR#615: Format, add symbolic formatters that output symbolic
pretty-printing items. New fields have been added to the
formatter_out_functions record, thus this change will break any code building
such record from scratch.
(Richard Bonichon and Pierre Weis, review by Alain Frisch)
* GPR#943: Fixed the divergence of the Pervasives module between the stdlib
and threads implementations. In rare circumstances this can change the
behavior of existing applications: the implementation of Pervasives.close_out
used when compiling with thread support was inconsistent with the manual.
It will now not suppress exceptions escaping Pervasives.flush anymore.
Developers who want the old behavior should use Pervasives.close_out_noerr
instead. The stdlib implementation, used by applications not compiled
with thread support, will now only suppress Sys_error exceptions in
Pervasives.flush_all. This should allow exceedingly unlikely assertion
exceptions to escape, which could help reveal bugs in the standard library.
(Markus Mottl, review by Hezekiah M. Carty, Jeremie Dimino, Damien Doligez,
Alain Frisch, Xavier Leroy, Gabriel Scherer and Mark Shinwell)
- GPR#997, GPR#1077: Deprecate Bigarray.*.map_file and add Unix.map_file as a
first step towards moving Bigarray to the stdlib
(Jérémie Dimino and Xavier Leroy)
- GPR#1034: Add List.init
(Richard Degenne, review by David Allsopp, Thomas Braibant, Florian
Angeletti, Gabriel Scherer, Nathan Moreau, Alain Frisch)
- GRP#1091 Add the Uchar.{bom,rep} constants.
(Daniel Bünzli, Alain Frisch)
- GPR#1091: Add Buffer.add_utf_{8,16le,16be}_uchar to encode Uchar.t
values to the corresponding UTF-X transformation formats in Buffer.t
values.
(Daniel Bünzli, review by Damien Doligez, Max Mouratov)
- GRP#1119: Change Set (private) type to inline records.
(Albin Coquereau)
- GPR#1175: bigarray, add a change_layout function to each Array[N]
submodules.
(Florian Angeletti)
- GPR#1217: Restrict Unix.environment in privileged contexts; add
Unix.unsafe_environment.
(Jeremy Yallop, review by Mark Shinwell, Nicolas Ojeda Bar,
Damien Doligez and Hannes Mehnert)
- GPR#1314: use the optional width information when formatting a boolean
(Xavier Clerc, review by Gabriel Scherer)
* In the MSVC and Mingw ports, "Sys.rename src dst" no longer fails if
file "dst" exists, but replaces it with file "src", like in the other ports.
(Xavier Leroy)
- Resurrect tabulation boxes in module Format. Rewrite/extend documentation
of tabulation boxes.
### Other libraries:
- GPR#1178: remove the Num library for arbitrary-precision arithmetic.
It now lives as a separate project https://github.com/ocaml/num
with an OPAM package called "num".
(Xavier Leroy)
- GPR#1321: Reimplement Unix.isatty on Windows. It no longer returns true for
the null device.
(David Allsopp)
### Compiler user-interface and warnings:
- GPR##1332: fix ocamlc handling of "-output-complete-obj"
- MPR#7444, GPR#1138: trigger deprecation warning when a "deprecated"
attribute is hidden by signature coercion
(Alain Frisch, report by bmillwood, review by Leo White)
- GPR#896: "-compat-32" is now taken into account when building .cmo/.cma
(Hugo Heuzard)
- GPR#948: the compiler now reports warnings-as-errors by prefixing
them with "Error (warning ..):", instead of "Warning ..:" and
a trailing "Error: Some fatal warnings were triggered" message.
(Valentin Gatien-Baron, review by Alain Frisch)
* GPR#1189: allow MSVC ports to use -l option in ocamlmklib
(David Allsopp)
- GPR#1324: ensure that flambda warning are printed only once
(Xavier Clerc)
- MPR#7361, GPR#1248: support "ocaml.warning" in all attribute contexts, and
arrange so that "ocaml.ppwarning" is correctly scoped by surrounding
"ocaml.warning" attributes
(Alain Frisch, review by Florian Angeletti and Thomas Refis)
- MPR#7472: ensure .cmi files are created atomically,
to avoid corruption of .cmi files produced simultaneously by a run
of ocamlc and a run of ocamlopt.
(Xavier Leroy, from a suggestion by Gerd Stolpmann)
- MPR#7514, GPR#1152: add -dprofile option, similar to -dtimings but
also displays memory allocation and consumption
(Valentin Gatien-Baron, report by Gabriel Scherer)
- MPR#7624: handle warning attributes placed on let bindings
(Xavier Clerc, report by dinosaure, review by Alain Frisch)
- GPR#1032: display the output of -dtimings as a hierarchy
(Valentin Gatien-Baron, review by Gabriel Scherer)
- GPR#1333: turn off warning 40 by default
(Leo White)
- GPR#1336: -thread and -vmthread option information is propagated to
PPX rewriters.
(Jun Furuse, review by Alain Frisch)
### Code generation and optimizations:
- MPR#5324, GPR#375: An alternative Linear Scan register allocator for
ocamlopt, activated with the -linscan command-line flag. This
allocator represents a trade-off between worse generated code
performance for higher compilation speed (especially interesting in
some cases graph coloring is necessarily quadratic).
(Marcell Fischbach and Benedikt Meurer, adapted by Nicolas Ojeda
Bar, review by Nicolas Ojeda Bar and Alain Frisch)
- GPR#850: Optimize away some physical equality
(Pierre Chambart, review by Mark Shinwell and Leo White)
- GPR#856: Register availability analysis
(Mark Shinwell, Thomas Refis, review by Pierre Chambart)
- MPR#6927, GPR#988: On macOS, when compiling bytecode stubs, plugins,
and shared libraries through -output-obj, generate dylibs instead of
bundles.
(whitequark)
- MPR#7447, GPR#995: incorrect code generation for nested recursive bindings
(Leo White and Jeremy Yallop, report by Stephen Dolan)
- MPR#7501, GPR#1089: Consider arrays of length zero as constants
when using Flambda.
(Pierre Chambart, review by Mark Shinwell and Leo White)
- MPR#7531, GPR#1162: Erroneous code transformation at partial applications
(Mark Shinwell)
- MPR#7601, GPR#1320: It seems like a hidden non-generalized type variable
remains in some inferred signatures, which leads to strange errors
(Jacques Garrigue, report by Mandrikin)
- MP#7617, #7618, GPR#1318: Ambiguous (mistakenly) type escaping the
scope of its equation
(Jacques Garrigue, report by Thomas Refis)
- MPR#7620, GPR#1317: Typecore.force_delayed_checks does not run with -i option
(Jacques Garrigue, report by Jun Furuse)
* GPR#659: Remove support for SPARC native code generation
(Mark Shinwell)
- GPR#1143: tweaked several allocation functions in the runtime by
checking for likely conditions before unlikely ones and eliminating
some redundant checks.
(Markus Mottl, review by Alain Frisch, Xavier Leroy, Gabriel Scherer,
Mark Shinwell and Leo White)
- GPR#1183: compile curried functors to multi-argument functions
earlier in the compiler pipeline; correctly propagate [@@inline]
attributes on such functors; mark functor coercion veneers as
stubs.
(Mark Shinwell, review by Pierre Chambart and Leo White)
- GPR#1195: Merge functions based on partiality rather than
Parmatch.irrefutable.
(Leo White, review by Thomas Refis, Alain Frisch and Gabriel Scherer)
- GPR#1215: Improve compilation of short-circuit operators
(Leo White, review by Frédéric Bour and Mark Shinwell)
- GPR#1250: illegal ARM64 assembly code generated for large combined allocations
(report and initial fix by Steve Walk, review and final fix by Xavier Leroy)
- GPR#1271: Don't generate Ialloc instructions for closures that exceed
Max_young_wosize; instead allocate them on the major heap. (Related
to GPR#1250.)
(Mark Shinwell)
- GPR#1294: Add a configure-time option to remove the dynamic float array
optimization and add a floatarray type to let the user choose when to
flatten float arrays. Note that float-only records are unchanged: they
are still optimized by unboxing their fields.
(Damien Doligez, review by Alain Frisch and Mark Shinwell)
- GPR#1304: Mark registers clobbered by PLT stubs as destroyed across
allocations.
(Mark Shinwell, Xavier Clerc, report and initial debugging by
Valentin Gatien-Baron)
- MPR#7614, GPR#1313: Ensure that inlining does not depend on the order
of symbols (flambda)
(Leo White, Xavier Clerc, report by Alex, review by Gabriel Scherer
and Pierre Chambart)
- GPR#1323: make sure that frame tables are generated in the data
section and not in the read-only data section, as was the case
before in the PPC and System-Z ports. This avoids relocations in
the text segment of shared libraries and position-independent
executables generated by ocamlopt.
(Xavier Leroy, review by Mark Shinwell)
- GPR#1330: when generating dynamically-linkable code on AArch64, always
reference symbols (even locally-defined ones) through the GOT.
(Mark Shinwell, review by Xavier Leroy)
- MPR#7616, GPR#1339: don't warn on mutation of zero size blocks.
(Leo White)
- MPR#7631, GPR#1355: "-linscan" option crashes ocamlopt
(Xavier Clerc, report by Paul Steckler)
### Tools:
- MPR#1956, GPR#973: tools/check-symbol-names checks for globally
linked names not namespaced with caml_
(Stephen Dolan)
- MPR#6928, GPR#1103: ocamldoc, do not introduce an empty
in index.html
when no -title has been provided
(Pierre Boutillier)
- MPR#7575, GPR#1219: Switch default from -no-keep-locs to -keep-locs. This
provides better error messages by default.
(Daniel Bünzli)
* MPR#7351: ocamldoc, use semantic tags rather than
tags in the html
backend
(Florian Angeletti, request and review by Daniel Bünzli )
* MPR#7352,PR#7353: ocamldoc, better paragraphs in html output
(Florian Angeletti, request by Daniel Bünzli)
* MPR#7478, GPR#1037: ocamldoc, do not use as a module preamble documentation
comments that occur after the first module element. This change may break
existing documenation. In particular, module preambles must now come before
any `open` statement.
(Florian Angeletti, review by David Allsopp and report by Daniel Bünzli)
- MPR#7521, GPR#1159: ocamldoc, end generated latex file with a new line
(Florian Angeletti)
- MPR#7610, GPR#1346: caml.el (the Emacs editing mode) was cleaned up
and made compatible with Emacs 25.
(Stefan Monnier, Christophe Troestler)
- GPR#681: Introduce ocamltest, a new test driver for the
OCaml compiler testsuite
(Sébastien Hinderer, review by Damien Doligez)
- GPR#1045: ocamldep, add a "-shared" option to generate dependencies
for native plugin files (i.e. .cmxs files)
(Florian Angeletti, suggestion by Sébastien Hinderer)
- GPR#1078: add a subcommand "-depend" to "ocamlc" and "ocamlopt",
to behave as ocamldep. Should be used mostly to replace "ocamldep" in the
"boot" directory to reduce its size in the future.
(Fabrice Le Fessant)
- GPR#1012: ocamlyacc, fix parsing of raw strings and nested comments, as well
as the handling of ' characters in identifiers.
(Demi Obenour)
- GPR#1036: ocamlcmt (tools/read_cmt) is installed, converts .cmt to .annot
(Fabrice Le Fessant)
- GPR#1180: Add support for recording numbers of direct and indirect
calls over the lifetime of a program when using Spacetime profiling
(Mark Shinwell)
### Toplevel:
- MPR#7570: remove unusable -plugin option from the toplevel
(Florian Angeletti)
- GPR#1041: -nostdlib no longer ignored by toplevel.
(David Allsopp, review by Xavier Leroy)
### Runtime system:
* MPR#3771, GPR#153, GPR#1200, GPR#1357, GPR#1362, GPR#1363: Unicode support for
the Windows runtime.
(ygrek, Clement Franchini, Nicolas Ojeda Bar, review by Alain Frisch, David
Allsopp, Damien Doligez)
- GPR#1070, GPR#1295: enable gcc typechecking for caml_alloc_sprintf,
caml_gc_message. Make caml_gc_message a variadic function. Fix many
caml_gc_message format strings.
(Olivier Andrieu, review and 32bit fix by David Allsopp)
- GPR#71: The runtime can now be shut down gracefully by means of the new
caml_shutdown and caml_startup_pooled functions. The new 'c' flag in
OCAMLRUNPARAM enables shutting the runtime properly on process exit.
(Max Mouratov, review and discussion by Damien Doligez, Gabriel Scherer,
Mark Shinwell, Thomas Braibant, Stephen Dolan, Pierre Chambart,
François Bobot, Jacques Garrigue, David Allsopp, and Alain Frisch)
- GPR#938, GPR#1170, GPR#1289: Stack overflow detection on 64-bit Windows
(Olivier Andrieu, tweaked by David Allsopp)
- GPR#1073: Remove statically allocated compare stack.
(Stephen Dolan)
- GPR#1086: in Sys.getcwd, just fail instead of calling getwd()
if HAS_GETCWD is not set.
(Report and first fix by Sebastian Markbåge, final fix by Xavier Leroy,
review by MarK Shinwell)
- GPR#1269: Remove 50ms delay at exit for programs using threads
(Valentin Gatien-Baron, review by Stephen Dolan)
* MPR#7594, GPR#1274, GPR#1368: String_val now returns 'const char*', not
'char*' when -safe-string is enabled at configure time. New macro Bytes_val
for accessing bytes values.
(Jeremy Yallop, reviews by Mark Shinwell and Xavier Leroy)
* GPR#1309: open files with O_CLOEXEC (or equivalent) in caml_sys_open thus
unifying the semantics between Unix and Windows and also eliminating race
condition on Unix.
(David Allsopp, report by Andreas Hauptmann)
- GPR#1326: Enable use of CFI directives in AArch64 and ARM runtime
systems' assembly code (asmrun/arm64.S). Add CFI directives to enable
unwinding through [caml_c_call] and [caml_call_gc] with correct termination
of unwinding at [main].
(Mark Shinwell, review by Xavier Leroy and Gabriel Scherer, with thanks
to Daniel Bünzli and Fu Yong Quah for testing)
- GPR#1338: Add "-g" for bytecode runtime system compilation
(Mark Shinwell)
### Manual and documentation:
- MPR#6548: remove obsolete limitation in the description of private
type abbreviations
(Florian Angeletti, suggestion by Leo White)
- MPR#6676, GPR#1110: move record notation to tutorial
(Florian Angeletti, review by Gabriel Scherer)
- MPR#6676, GPR#1112: move local opens to tutorial
(Florian Angeletti)
- MPR#6676, GPR#1153: move overriding class definitions to reference
manual and tutorial
(Florian Angeletti)
- MPR#6709: document the associativity and precedence level of
pervasive operators
(Florian Angeletti, review by David Allsopp)
- MPR#7254, GPR#1096: Rudimentary documentation of ocamlnat
(Mark Shinwell)
- MPR#7281, GPR#1259: fix .TH macros in generated manpages
(Olaf Hering)
- MPR#7507: Align the description of the printf conversion
specification "%g" with the ISO C90 description.
(Florian Angeletti)
- MPR#7551, GPR#1194 : make the final ";;" potentially optional in
caml_example
(Florian Angeletti, review and suggestion by Gabriel Scherer)
- MPR#7588, GPR#1291: make format documentation predictable
(Florian Angeletti, review by Gabriel Radanne)
- MPR#7604: Minor Ephemeron documentation fixes
(Miod Vallat, review by Florian Angeletti)
- GPR#1187: Minimal documentation for compiler plugins
(Florian Angeletti)
- GPR#1202: Fix Typos in comments as well as basic grammar errors.
(JP Rodi, review and suggestions by David Allsopp, Max Mouratov,
Florian Angeletti, Xavier Leroy, Mark Shinwell and Damien Doligez)
- GPR#1220: Fix "-keep-docs" option in ocamlopt manpage
(Etienne Millon)
### Compiler distribution build system
- MPR#6373, GPR#1093: Suppress trigraph warnings from macOS assembler
(Mark Shinwell)
- GPR#558: enable shared library and natdynlink support on more Linux
platforms
(Felix Janda, Mark Shinwell)
* GPR#1104: remove support for the NeXTStep platform
(Sébastien Hinderer)
- GPR#1130: enable detection of IBM XL C compiler (one need to run configure
with "-cc "). Enable shared library support for
bytecode executables on AIX/xlc (tested on AIX 7.1, XL C 12).
To enable 64-bit, run both "configure" and "make world" with OBJECT_MODE=64.
(Konstantin Romanov, Enrique Naudon)
- GPR#1203: speed up the manual build by using ocamldoc.opt
(Gabriel Scherer, review by Florian Angeletti)
- GPR#1214: harden config/Makefile against '#' characters in PREFIX
(Gabriel Scherer, review by David Allsopp and Damien Doligez)
- GPR#1216: move Compplugin and friends from BYTECOMP to COMP
(Leo White, review by Mark Shinwell)
- GPR#1242: disable C plugins loading by default
(Alexey Egorov)
- GPR#1275: correct configure test for Spacetime availability
(Mark Shinwell)
- GPR#1278: discover presence of during configure for afl runtime
(Hannes Mehnert)
- MPR#7639, GPR#1371: fix configure script for correct detection of
int64 alignment on Mac OS X 10.13 (High Sierra) and above; fix bug in
configure script relating to such detection.
(Mark Shinwell, report by John Whitington, review by Xavier Leroy)
- GPR#1386: provide configure-time options to fine-tune the safe-string
options and default settings changed by GPR#1525.
The previous configure option -safe-string is now
renamed -force-safe-string.
At configure-time, -force-safe-string forces all module to use
immutable strings (this disables the per-file, compile-time
-unsafe-string option). The new default-(un)safe-string options
let you set the default choice for the per-file compile-time
option. (The new GPR#1252 behavior corresponds to having
-default-safe-string, while 4.05 and older had
-default-unsafe-string).
(Gabriel Scherer, review by Jacques-Pascal Deplaix and Damien Doligez)
### Internal/compiler-libs changes:
- MPR#6826, GPR#828, GPR#834: improve compilation time for open
(Alain Frisch, review by Frédéric Bour and Jacques Garrigue)
- MPR#7127, GPR#454, GPR#1058: in toplevel, print bytes and strip
strings longer than the size specified by the "print_length" directive
(Fabrice Le Fessant, initial PR by Junsong Li)
- GPR#406: remove polymorphic comparison for Types.constructor_tag in compiler
(Dwight Guth, review by Gabriel Radanne, Damien Doligez, Gabriel Scherer,
Pierre Chambart, Mark Shinwell)
- GPR#1127: move config/{m,s}.h to byterun/caml and install them.
User code should not have to include them directly since they are
included by other header files
(Sébastien Hinderer)
- GPR#1281: avoid formatter flushes inside exported printers in Location
(Florian Angeletti, review by Gabriel Scherer)
### Bug fixes
- MPR#248, GPR#1225: unique names for weak type variables
(Florian Angeletti, review by Frédéric Bour, Jacques Garrigue,
Gabriel Radanne and Gabriel Scherer)
- MPR#5927: Type equality broken for conjunctive polymorphic variant tags
(Jacques Garrigue, report by Leo White)
- MPR#6587: only elide Pervasives from printed type paths in unambiguous context
(Florian Angeletti and Jacques Garrigue)
- MPR#6934: nonrec misbehaves with GADTs
(Jacques Garrigue, report by Markus Mottl)
- MPR#7070, GPR#1139: Unexported values can cause non-generalisable variables
error
(Leo White)
- MPR#7261: Warn on type constraints in GADT declarations
(Jacques Garrigue, report by Fabrice Le Botlan)
- MPR#7321: Private type in signature clashes with type definition via
functor instantiation
(Jacques Garrigue, report by Markus Mottl)
- MPR#7372, GPR#834: fix type-checker bug with GADT and inline records
(Alain Frisch, review by Frédéric Bour and Jacques Garrigue)
- MPR#7344: Inconsistent behavior with type annotations on let
(Jacques Garrigue, report by Leo White)
- MPR#7468: possible GC problem in caml_alloc_sprintf
(Xavier Leroy, discovery by Olivier Andrieu)
- MPR#7496: Fixed conjunctive polymorphic variant tags do not unify
with themselves
(Jacques Garrigue, report by Leo White)
- MPR#7506: pprintast ignores attributes in tails of a list
(Alain Frisch, report by Kenichi Asai and Gabriel Scherer)
- MPR#7513: List.compare_length_with mishandles negative numbers / overflow
(Fabrice Le Fessant, report by Jeremy Yallop)
- MPR#7519: Incorrect rejection of program due to faux scope escape
(Jacques Garrigue, report by Markus Mottl)
- MPR#7540, GPR#1179: Fixed setting of breakpoints within packed modules
for ocamldebug
(Hugo Herbelin, review by Gabriel Scherer, Damien Doligez)
- MPR#7531a: Default argument is not evaluated even after passing a
non-labeled argument
(Jacques Garrigue, report by Stephen Dolan)
- MPR#7543: short-paths printtyp can fail on packed type error messages
(Florian Angeletti)
- MPR#7553, GPR#1191: Prevent repeated warnings with recursive modules.
(Leo White, review by Josh Berdine and Alain Frisch)
- MPR#7563, GPR#1210: code generation bug when a module alias and
an extension constructor have the same name in the same module
(Gabriel Scherer, report by Manuel Fähndrich,
review by Jacques Garrigue and Leo White)
- MPR#7564, GPR#1211: Allow forward slashes in the target of symbolic links
created by Unix.symlink under Windows.
(Nicolas Ojeda Bar, review by David Allsopp)
- MPR#7591, GPR#1257: on x86-64, frame table is not 8-aligned
(Xavier Leroy, report by Mantis user "voglerr", review by Gabriel Scherer)
- MPR#7609: use-after-free memory corruption if a program debugged
under ocamldebug calls Pervasives.flush_all
(Xavier Leroy, report by Paul Steckler, review by Gabriel Scherer)
- MPR#7638: in the Windows Mingw64 port, multithreaded programs compiled
to bytecode could crash when raising an exception from C code.
This looks like a Mingw64 issue, which we work around with GCC builtins.
(Xavier Leroy)
- GPR#1155: Fix a race condition with WAIT_NOHANG on Windows
(Jérémie Dimino and David Allsopp)
- GPR#1199: Pretty-printing formatting cleanup in pprintast
(Ethan Aubin, suggestion by Gabriel Scherer, review by David Allsopp,
Florian Angeletti, and Gabriel Scherer)
- GPR#1223: Fix corruption of the environment when using -short-paths
with the toplevel.
(Leo White, review by Alain Frisch)
- GPR#1329: Prevent recursive polymorphic variant names
(Jacques Garrigue, fix suggested by Leo White)
- Fix pprintast for #... infix operators
(Alain Frisch, report by Omar Chebib)
- GPR#1308: Only treat pure patterns as inactive
(Leo White, review by Alain Frisch and Gabriel Scherer)
- MPR#7619, GPR#1387: position of the optional last semi-column not included
in the position of the expression (same behavior as for lists)
(Christophe Raffalli, review by Gabriel Scherer)