Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/branches/primop-branch-3/NOTES/HISTORY
ViewVC logotype

Diff of /sml/branches/primop-branch-3/NOTES/HISTORY

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

sml/trunk/HISTORY revision 643, Fri May 12 08:29:15 2000 UTC sml/branches/primop-branch-3/NOTES/HISTORY revision 2221, Tue Nov 28 21:56:55 2006 UTC
# Line 7  Line 7 
7    
8  The form of an entry should be:  The form of an entry should be:
9    
10  Name:  
11  Date:  Name: Your Name (web page or e-mail)
12  Tag: <post-commit CVS tag>  Date: yyyy/mm/dd hh:mm:ss
13    Tag: cvs-tag-for-this-change
14    Description:
15    
16    ----------------------------------------------------------------------
17    Name: Matthias Blume (http://www.tti-c.org/blume/)
18    Date: 2006/11/10 11:00:00 CST
19    Description:
20    
21    Fixed bug in CM where "with:" specifications that affect compilation
22    (as opposed to parsing) were ignored.
23    
24    ----------------------------------------------------------------------
25    Name: Matthias Blume (http://www.tti-c.org/blume/)
26    Date: 2006/11/09 14:30:00 CST
27    Tag: release-110.60
28    Description:
29    
30    New working release (110.60).  NEW BOOTFILES!
31    
32    This is the first subversion-hosted release.  There are also changes
33    to the directory layout.  Here is a table:
34    
35    (All pathnames are relative to the SML/NJ "root" directory.)
36    
37      config -> config
38    
39      src/cm -> base/cm
40      src/compiler -> base/compiler
41      src/runtime -> base/runtime
42      src/system -> base/system
43    
44      src/cm/pgraph -> pgraph
45    
46      src/READMES -> base/READMES
47      src/$notefile -> base/NOTES/$notefile
48         for <notefile> in BOOT CVSNOTES CYGWININSTALL HISTORY INSTALL
49                           MACOSXINSTALL WININSTALL
50    
51      src/smlnj-lib -> smlnj-lib
52      src/MLRISC -> MLRISC
53      ckit -> ckit
54      src/cml -> cml
55      src/eXene -> eXene
56      src/heap2asm -> heap2asm
57      src/lexgen -> lexgen
58      src/ml-burg -> ml-burg
59      src/ml-lex -> ml-lex
60      src/ml-yacc -> ml-yacc
61      src/ml-nlffi-lib -> nlffi/lib
62      src/ml-nlffigen -> nlffi/gen
63      src/smlnj-c -> smlnj-c
64      src/tools/TraceDebugProf -> trace-debug-profile
65    
66    In addition, there is also a new
67    
68      ml-lpt
69    
70    directory containing two new program generator tools: ml-ulex and
71    ml-antlr (a lexer generator that handles unicode and an ANTRL-inspired
72    LL(k) parser generator). These tools are currently "beta-quality"
73    
74    The latest versios of the sources can now be obtained anonymously
75    via subversion.  For this, it is useful to first check out
76    
77       svn://smlnj-gforge.cs.uchicago.edu/smlnj/admin
78    
79    and put the resulting directory on your shell's PATH.  This provides
80    access to three shell scripts: checkout-all.sh, stat-all.sh,
81    and refresh-all.sh.
82    
83    To create a freshly checked-out copy of the sources, do
84    
85       checkout-all.sh [dir]
86    
87    where dir is the optional SML/NJ root directory (default is ".").
88    
89    This creates the above directory layout.  Each subdirectory of
90    the root is under individual subversion control.  The stat-all.sh
91    and refresh-al.sh scripts apply "svn stat" or "svn update" to
92    each of these subtrees.
93    
94    ----------------------------------------------------------------------
95    Name: Matthias Blume (http://www.tti-c.org/blume/)
96    Date: 2006/11/02 12:20:00 CST
97    Description:
98    
99    Reorganized directory layout.
100    
101    This is a temporary solution, more reorganization is to come.
102    
103    The basic idea is to have a number of toplevel trees, each corresponding
104    to a well-defined part of the overall system.  Each part can be
105    maintained individually, even in separate source repositories,
106    although currently we still serve everything out of the main
107    smlnj-gforge tree.
108    
109    Installer and and scripts have been updated to reflect the new
110    layout.  The installer (base/src/system/smlnj/installer) is now
111    "scriptable" to avoid burning too much knowledge about the
112    layout into SML source code.  The main script used by the installer
113    is in config/actions.
114    
115    The main change is that many of the subdirectories of what used to
116    be known as "src" have moved to the toplevel.  The "src" directory
117    itself has moved down into a subtree called "base".  (We may eventually
118    get rid of the extra level of indirection represented by "src".)
119    
120    The layout is now as follows:
121    
122      toplevel tree name | default repository
123                         | (using gf=svn://smlnj-gforge.cs.uchicago.edu/smlnj)
124      -------------------+----------------------------------------------------
125      config             | $gf/config/trunk
126                         |
127      base               | $gf/sml/trunk
128                         |
129      smlnj-lib          | $gf/smlnj-lib/trunk
130      MLRISC             | $gf/MLRISC/trunk
131                         |
132      ml-yacc            | $gf/ml-yacc/trunk
133      ml-lex             | $gf/ml-lex/trunk
134      ml-burg            | $gf/ml-burg/trunk
135      lexgen             | $gf/lexgen/trunk
136      heap2asm           | $gf/heap2asm/trunk
137                         |
138      cml                | $gf/cml/trunk
139      eXene              | $gf/eXene/trunk
140      ckit               | $gf/ckit/trunk
141      nlffi              | $gf/nlffi/trunk
142                         |
143      smlnj-c            | $gf/smlnj-c/trunk
144    
145    In $gf/admin there are a few useful shell scripts for checking out
146    and maintaining the entire collection of trees:
147    
148       admin/checkout-all.sh [dir]
149          -- optionally creates dir and checks out all trees from their
150             default repositories; if dir is missing, checkout into .
151       admin/refresh-all.sh [dir]
152          -- looks at all trees (from the above list) in dir (default: .)
153             and runs "svn update" if the tree exists and is under
154             subversion control;
155             non-existing or non-subversion trees are skipped
156       admin/stat-all.sh [dir]
157          -- like refresh-all.sh, but runs "svn stat" instead
158    
159    ----------------------------------------------------------------------
160    Name: Matthias Blume (http://www.tti-c.org/blume/)
161    Date: 2006/10/05 11:30:00 CDT
162    Tag: blume-20061005-merge-amd64
163    Description:
164    
165    Merged code for AMD64 backend (Mike Rainey's work).
166    Everything is hooked up but untested.
167    
168    ----------------------------------------------------------------------
169    Name: Matthias Blume (http://www.tti-c.org/blume/)
170    Date: 2006/05/17 14:00:00 CST
171    Tag: Release_110_59
172    Description:
173    
174    New working version (110.59).  NEW BOOTFILES!
175    
176    I am freezing 110.59.  Changes other than the version-number increase:
177    
178      eXene:
179    
180         * committed changes to eXene from Alley Stoughton:
181             "fixed bugs in X authorization and resource handling, as well
182              as in the pile and viewport widgets"
183    
184      Runtime:
185        * fixed linking problem with NetBSD 3.x.
186    
187      Lexgen:
188        * lexgen tool handles non-ascii characters in 7-bit mode the same
189          way that ml-lex does
190    
191        * lexgen propagates exceptions the same way that ml-lex does
192    
193      CML:
194        * Fixed a bug in the SyncVar polling functions (iGetPoll,
195          mTakePoll, and mGetPoll) that could lead to livelock.
196    
197    ----------------------------------------------------------------------
198    Name: Matthias Blume (http://www.tti-c.org/blume/)
199    Date: 2006/05/12 15:20:00 CST
200    Tag: blume-20060515-makedepend
201    Description:
202    
203    Implemented ml-makedepend (i.e., CM.sources) in a better (more robust)
204    way.  This should hopefully fix the ml-makedepend problem permanently.
205    
206    ----------------------------------------------------------------------
207    Name: Matthias Blume (http://www.tti-c.org/blume/)
208    Date: 2006/05/12 15:15:00 CST
209    Tag: blume-20060512-makedepend
210    Description:
211    
212    Fixed long-standing bug with ml-makedepend where it would output a
213    spurious dependency to a non-existing file.  (This is a simple fix.
214    It might need further looking into.)
215    
216    ----------------------------------------------------------------------
217    Name: Matthias Blume (http://www.tti-c.org/blume/)
218    Date: 2006/04/20 10:30:00 CDT
219    Tag: blume-20060420-heap2exec
220    Description:
221    
222    Committed patches received from Johannes 5 Joemann (joemann@befree.free.de)
223    that enable heap2exec under Linux and FreeBSD.
224    
225    ----------------------------------------------------------------------
226    Name: John Reppy
227    Date: 2006/04/14
228    Tag:
229    Description:
230    
231    MLRISC changes:
232      1) renamed GAS_PSEUDO_OPS to AS_PSEUDO_OPS and put it in its own file.
233      2) added support for NOTB and XORB operators in pseudo-op expressions
234      3) added DarwinPseudoOp functor that supports Darwin's assembler syntax.
235      4) added support for 64-bit integer literals
236    
237    ----------------------------------------------------------------------
238    Name: Matthias Blume (http://www.tti-c.org/blume/)
239    Date: yyyy/mm/dd
240    Tag: Release_110_58
241    Description:
242    
243    New working version (110.58).  NEW BOOTFILES!
244    
245    ----------------------------------------------------------------------
246    Name: Matthias Blume (http://www.tti-c.org/blume/)
247    Date: 2006/03/01 22:15:00 CST
248    Tag: blume-20060301-lexgen
249    Description:
250    
251    Incorporated several bugfixes to lexgen.  Compiler now compiles to
252    fixpoint when using lexgen instead of ml-lex.
253    
254    ----------------------------------------------------------------------
255    Name: Matthias Blume (http://www.tti-c.org/blume/)
256    Date: 2006/02/28 22:45:00 CST
257    Tag: blume-20060228-lexgen
258    Description:
259    
260    Removed ml-flex and added lexgen instead, using Aaron Turon's newly
261    provided tarball.  The generated lexers still have problems.
262    
263    ----------------------------------------------------------------------
264    Name: Matthias Blume (http://www.tti-c.org/blume/)
265    Date: 2006/02/26 23:30:00 CST
266    Tag: blume-20060226-ml-flex
267    Description:
268    
269    Removed ml-flex' dependency on regexp-lib.cm.  Turned installation
270    of ml-flex on by default.
271    
272    ----------------------------------------------------------------------
273    Name: Matthias Blume (http://www.tti-c.org/blume/)
274    Date: 2006/02/24 16:30:00 CST
275    Tag: blume-20060224-ml-flex
276    Description:
277    
278    Added ml-flex sources.  Partially integrated, but should not be
279    turned on yet!  (Read: leave it commented-out in config/targets!)
280    
281    ----------------------------------------------------------------------
282    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
283    Date: 2006/02/23
284    Tag: jhr-20060223-x86-64
285    Description:
286    Changes to support building on x86-64 systems (using the 32-bit mode).
287    Also cleaned up signal handling on Linux.  Support for pre-2.2 Linux
288    kernels dropped.
289    
290    ----------------------------------------------------------------------
291    Name: Allen Leung (leunga (at) reservoir (dot) com)
292    Date: 2006/02/22 15:07:00 EST
293    Tag: leunga-20060222-mdl-gen
294    Description:
295    
296      CM has changed.  Updated the script for rebuilding the MLRISC generated
297    files.
298    
299    ----------------------------------------------------------------------
300    Name: Matthias Blume (http://www.tti-c.org/blume/)
301    Date: 2006/02/14 17:30:00 CST
302    Tag: blume-20060214-intel-mac
303    Description:
304    
305    Hooked code for Darwin-specific Intel ABI into main compiler.
306    (This is a temporary solution which relies on the fact that the
307    compiler itself does not use NLFFI.  Eventually we need to divorce
308    intel mac from generic x86 unix code and make separate sets of binaries.)
309    
310    ----------------------------------------------------------------------
311    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
312    Date: 2006/02/13
313    Tag: jhr-20060213-intel-mac
314    Description:
315    Changed MLRISC x86 CCalls for partial support of MacOS X ABI.
316    
317    ----------------------------------------------------------------------
318    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
319    Date: 2006/02/06
320    Tag: jhr-20060206-intel-mac
321    Description:
322    Changes to support MacOS X on Intel hardware.  The C-calls support in
323    MLRISC must also be updated to support the MacOS X ABI.
324    
325    ----------------------------------------------------------------------
326    Name: Matthias Blume (http://www.tti-c.org/blume/)
327    Date: 2005/12/16 00:15:00 CST
328    Tag: blume-20051216-cm
329    Description:
330    
331    Improved error reporting and handling in CM.
332    
333    ----------------------------------------------------------------------
334    Name: Matthias Blume (http://www.tti-c.org/blume/)
335    Date: 2005/11/21 14:00:00 CST
336    Tag: blume-20051121-html-lib
337    Description:
338    
339    Enabling $/html-lib.cm in config/preloads did not work.  This is fixed
340    now.  (Since the anchor mapping for html-lib.cm is not yet in effect
341    at the time when config/preloads is processed, the library has to
342    be referred to by another name.  In 110.57 this would be
343    $SMLNJ-LIB/HTML/html-lib.cm.  I arranged for $smlnj/smlnj-lib/html-lib.cm
344    to be valid as well.)
345    
346    Thanks to Todd Wilson (Fresno) for alerting me to this issue.
347    
348    ----------------------------------------------------------------------
349    Name: Matthias Blume (http://www.tti-c.org/blume/)
350    Date: 2005/11/19 13:45:00 CST
351    Tag: Release_110_57
352    Description:
353    
354    Moved release tag for 110.57.
355    
356    ----------------------------------------------------------------------
357    Name: Matthias Blume (http://www.tti-c.org/blume/)
358    Date: 2005/11/19 23:35:00 CST
359    Tag: blume-20051119-fish
360    Description:
361    
362    Fixed a problem in config/install.sh where it tries to "fish" the
363    name of the CM metadata directory from the wrong place (because
364    the physical location of basis.cm has changed).  Also, corrected the
365    path anchor for $/html-lib.cm.  (Thanks to M. Fluet for pointing out
366    these problems.)
367    
368    ----------------------------------------------------------------------
369    Name: Matthias Blume (http://www.tti-c.org/blume/)
370    Date: 2005/11/16 14:30:00 CST
371    Tag: blume-orig-110_57
372    Description:
373    
374    New working version (110.57).  NEW BOOTFILES!
375    
376    UPDATE: The release tag has been moved to include a fix for a brown-paper-
377            bag glitch (see above).
378    
379    ----------------------------------------------------------------------
380    Name: Matthias Blume (http://www.tti-c.org/blume/)
381    Date: 2005/11/16 10:25:00 CST
382    Tag: blume-22051116-btrace
383    Description:
384    
385    Fixed problem with bogus exception message when using back-trace
386    facility.
387    
388    ----------------------------------------------------------------------
389    Name: Matthias Blume (http://www.tti-c.org/blume/)
390    Date: 2005/11/15 22:35:00 CST
391    Tag: blume-22051115-array2copy
392    Description:
393    
394    Added simple implementation of Array2.copy.  (Warning: mostly untested.)
395    
396    ----------------------------------------------------------------------
397    Name: Matthias Blume (http://www.tti-c.org/blume/)
398    Date: 2005/11/15 21:35:00 CST
399    Tag: blume-22051115-versiontool
400    Description:
401    
402    Reversed change to src/system/smlnj/internals/versiontool.cm.  This
403    file gets loaded as a tool -- by the equivalent of CM.make during the
404    run of CMB.make.  Thus, CMB's path configuration is meaningless for
405    it.  Instead, it has the status of "user code", so it should use
406    $/basis.cm to refer to the Basis library.  (At least that's true for
407    the purpose of bootstrapping the previous change.  In the future it
408    might make sense to have versiontool.cm refer to
409    $smlnj/basis/basis.cm, i.e., the version of the Basis that the
410    compiler itself uses.)
411    
412    Also patched src/system/testml to have it activate those extra anchor
413    bindings in config/extrapathconfig.
414    
415    ----------------------------------------------------------------------
416    Name: Matthias Blume (http://www.tti-c.org/blume/)
417    Date: 2005/11/15 16:35:00 CST
418    Tag: blume-22051115-libraries
419    Description:
420    
421    This change affects the way the following libraries are tied into
422    the system:
423    
424       $/basis.cm
425       $/smlnj-lib.cm
426       $/pp-lib.cm
427       $/controls-lib.cm
428       $/html-lib.cm
429       $/ml-yacc-lib.cm
430    
431    These libraries are now internally (as seen from the source code
432    of the implementation itself) known by the following names:
433    
434       $smlnj/basis/basis.cm
435       $smlnj/smlnj-lib/smlnj-lib.cm
436       $smlnj/smlnj-lib/pp-lib.cm
437       $smlnj/smlnj-lib/controls-lib.cm
438       $smlnj/smlnj-lib/html-lib.cm
439       $smlnj/ml-yacc/ml-yacc-lib.cm
440    
441    This makes it possible to work with code that requires different
442    versions of these libraries, and which refers to these libraries using
443    their "default" names (i.e., the first set of names above).  In other
444    words, one can un-define or re-define those default names without
445    compromising the proper functioning of the compiler itself.
446    
447    A similar procedure had already been performed for several of the
448    MLRISC libraries that are linked into the compiler.  I did some
449    cleanup on this code.
450    
451    A new file in the config directory (named extrapathconfig) is
452    responsible for setting up path anchors that the compiler itself does
453    not need, but that are typically required by user code.
454    
455    ----------------------------------------------------------------------
456    Name: Matthias Blume
457    Date: 2005/11/07 17:05:00 CST
458    Tag: blume-20051107-slice
459    Description:
460    
461    Fixed erroneous out-of-bounds test in the "update" function of
462    various *ArraySlice modules.  (Thanks to Vesa A. Norrman for pointing
463    out the problem.)
464    
465    Pushed some Basis changes through ML-Lex, CML, and eXene.
466    
467    ----------------------------------------------------------------------
468    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
469    Date: 2005/11/07
470    Description:
471    Fixed a Basis incompatibility: The depreciated function Substring.all
472    was removed (use Substring.full instead).
473    
474    ----------------------------------------------------------------------
475    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
476    Date: 2005/11/05
477    Description:
478    Tweaked interval set API in SML/NJ library; see the CHANGES file for details.
479    
480    ----------------------------------------------------------------------
481    Name: Matthias Blume (http://www.tti-c.org/blume/)
482    Date: 2005/11/02 16:25:00 CST
483    Tag: blume-20051102-hex
484    Description:
485    
486    * Runtime system bootstrap code now accepts hex digits in BOOTLIST
487      in either upper case or lower case format.
488    * Pushed changes to names of Pack<N>{Big,Little} structures through
489      CML and eXene.
490    
491    ----------------------------------------------------------------------
492    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
493    Date: 2005/11/02
494    Description:
495    Fixed a Basis incompatibility: Pack<N>{Big,Little} structures should
496    be called PackWord<N>{Big,Little}.
497    
498    ----------------------------------------------------------------------
499    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
500    Date: 2005/10/28
501    Description:
502    Fixed a minor Basis incompatibility: hex digits should be upper case.
503    
504    ----------------------------------------------------------------------
505    Name: Matthias Blume (blume (at) tti - c (dot) org)
506    Date: 2005/10/25 16:00:00 CDT
507    Tag: Release_110_56
508    Description:
509    
510    New working version (110.56).  NEW BOOTFILES!
511    
512    ----------------------------------------------------------------------
513    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
514    Date: 2005/10/25
515    Description:
516    Added interval sets to utility library (signatures INTERVAL_DOMAIN
517    and INTERVAL_SET, and functor IntervalSetFn).
518    
519    ----------------------------------------------------------------------
520    Name: John Reppy (http://www.cs.uchicago.edu/~jhr)
521    Date: 2005/10/14
522    Description:
523    Add Zhong Shao's fix for datatype equality functions.
524    
525    ----------------------------------------------------------------------
526    Name: Allen Leung (leunga (at) reservoir (dot) com)
527    Date: 2005/10/14 12:30:00 EST
528    Tag: leunga-20051014-x86-spill
529    Description:
530    
531    Bug fix a bug found by Carl Hauser.
532    There was a typo in the reload code for FCMP in x86SpillInstr.sml.
533    
534    ----------------------------------------------------------------------
535    Name: Allen Leung (leunga (at) reservoir (dot) com)
536    Date: 2005/10/14 11:15:00 EST
537    Tag: leunga-20051014-x86-asm
538    Description:
539    
540    Removed some debugging code in file x86Asm.sml.
541    The function emit_operand was printing out debugging output.
542    
543    ----------------------------------------------------------------------
544    Name: John Reppy
545    Date: 2005/07/27
546    Tag:
547    Description:
548    
549    Fixed ml-lex to recognize "\r" as representing carriage return.
550    
551    ----------------------------------------------------------------------
552    Name: John Reppy
553    Date: 2005/07/27
554    Tag:
555    Description:
556    
557    Fixed ml-yacc to work on files with non-native end-of-line
558    encodings (e.g., Windows text file on a Unix system).
559    
560    ----------------------------------------------------------------------
561    Name: John Reppy
562    Date: 2005/07/20
563    Tag:
564    Description:
565    
566    Added changes from Dominic Evans (oldmanuk (at) gmail (dot) com)
567    to support HPUX 11.
568    
569    ----------------------------------------------------------------------
570    Name: John Reppy
571    Date: 2005/07/06
572    Tag:
573    Description:
574    
575    Changes to the SML/NJ library.  See smlnj-lib/CHANGES for details.
576    
577    ----------------------------------------------------------------------
578    Name: Matthias Blume (blume (at) tti - c (dot) org)
579    Date: 2005/07/06 00:45:00 CDT
580    Tag: blume-20050706-slice-copy
581    Description:
582    
583    Fixed reversed logic for deciding whether to "copy up" or "copy down"
584    in *-array-slice.sml.
585    
586    ----------------------------------------------------------------------
587    Name: Allen Leung (leunga (at) reservoir (dot) com)
588    Date: 2005/05/31 17:00:00 EST
589    Tag: leunga-20050531-cygwin-fault-2
590    Description:
591    
592    A typo in the cygwin code fixed.
593    
594    ----------------------------------------------------------------------
595    Name: Allen Leung (leunga (at) reservoir (dot) com)
596    Date: 2005/05/31 16:47:00 EST
597    Tag: leunga-20050531-cygwin-fault
598    Description:
599    
600    Updated Cygwin's fault/signal handling to match the Windows version.
601    Updated the export list.
602    
603    ----------------------------------------------------------------------
604    Name: Matthias Blume (blume (at) tti - c (dot) org)
605    Date: 2005/05/18 13:35:00 CDT
606    Tag: Release_110_54
607    Description:
608    
609    New working version (110.54).  NEW BOOTFILES!
610    
611    ----------------------------------------------------------------------
612    Name: Matthias Blume (blume (at) tti - c (dot) org)
613    Date: 2005/05/18 11:58:00 CDT
614    Tag: blume-20050518-installer
615    Description:
616    
617    Added support scripts for Mac OS X PackageMaker and modified
618    config/install.sh so that it supports re-dumping a heap image
619    after customization.
620    
621    ----------------------------------------------------------------------
622    Name: Matthias Blume (blume (at) tti - c (dot) org)
623    Date: 2005/05/18 10:55:00 CDT
624    Tag: blume-20050518-realdiv-noovld
625    Description:
626    
627    Un-overloaded / to work around bug in overloading resolution code.
628    
629    ----------------------------------------------------------------------
630    Name: Matthias Blume (blume (at) tti - c (dot) org)
631    Date: 2005/05/16 23:50:00 CDT
632    Tag: blume-20050516-redump-heap
633    Description:
634    
635    Added mechanism for re-creating a heap file for the interactive system
636    after configuration variables have been changed.
637    
638       CM.redump_heap : string -> unit
639    
640    This is much like SMLofNJ.exportML, but starting from the resulting
641    heap does not return to the caller of CM.redump_heap but
642    restarts the interactive system from scratch.  The original call of
643    CM.redump_heap does not return but ends the interactive session.
644    Thus, CM.redump_heap is a lot like SMLofNJ.exportFn.
645    
646    Internally, redump_heap winds the dynamic execution context back to
647    the point where the original heap image was created and re-executes
648    the heap image generation code in the boot code.
649    
650    ----------------------------------------------------------------------
651    Name: Matthias Blume (blume (at) tti - c (dot) org)
652    Date: 2005/05/09 21:55:00 CDT
653    Tag: blume-20050509-word64
654    Description:
655    
656    Added a hack to the existing hack known as Word64 to make fromString
657    behave correctly.  I am still not sure whether Word64.scan will work
658    as specified with respect to the interaction of radix and prefix.
659    
660    ----------------------------------------------------------------------
661    Name: Allen Leung (leunga (at) reservoir (dot) com)
662    Date: 2005/05/04 11:50:00 EST
663    Tag: leunga-20050504-checkgc
664    Description:
665    
666    Added a gc protocol checking phase.  This phase is enabled with
667    the flag "check-gc".  "debug-check-gc" turns on the verbose mode.
668    
669    ----------------------------------------------------------------------
670    Name: Matthias Blume (blume (at) tti - c (dot) org)
671    Date: 2005/05/04 10:45:00 CDT
672    Tag: blume-20050504-intinf
673    Description:
674    
675    Fixed a bug in the implementation of div and mod for IntInf.
676    Thanks to Neophytos Michael for reporting the problem.
677    
678    ----------------------------------------------------------------------
679    Name: Matthias Blume (blume (at) tti - c (dot) org)
680    Date: 2005/05/04 10:35:00 CDT
681    Tag: blume-20050504-join
682    Description:
683    
684    Added a "join" combinator to the ParserComb module in smlnj-lib.cm.
685    
686    ----------------------------------------------------------------------
687    Name: Matthias Blume (blume (at) tti - c (dot) org)
688    Date: 2005/02/28 23:40:00 CST
689    Tag: blume-20050228-mVar
690    Description:
691    
692    Fixed serious bug (brown paper bag variety) in new implementation of
693    structure Atom in CML.  (I had accidentally used a mailbox instead of
694    an mvar, leaving the door open for races.)
695    
696    ----------------------------------------------------------------------
697    Name: Matthias Blume (blume (at) tti - c (dot) org)
698    Date: 2005/02/25 15:00:00 CST
699    Tag: Release_110_53
700    Description:
701    
702    New working version (110.53).  NEW BOOTFILES!
703    
704    ----------------------------------------------------------------------
705    Name: Matthias Blume (blume (at) tti - c (dot) org)
706    Date: 2005/02/25 14:50:00 CST
707    Tag: blume-20050225-susp
708    Description:
709    
710    Brought back SMLofNJ.Susp.  The underlying suspension type is the one
711    implemented in Core -- which means that it is the same as the one used
712    by the lazy extension.
713    
714    ----------------------------------------------------------------------
715    Name: Matthias Blume (blume (at) tti - c (dot) org)
716    Date: 2005/02/24 16:50:00 CST
717    Tag: blume-20050224-cml-atom
718    Description:
719    
720    Simpler and at the same time more general implementation of structure
721    Atom in CML.
722    
723    ----------------------------------------------------------------------
724    Name: Matthias Blume (blume (at) tti - c (dot) org)
725    Date: 2005/02/15 17:35:00 CST
726    Tag: blume-20050215-tools
727    Description:
728    
729    Created new "tools" directory under "src" and moved "TraceDebugProf"
730    there.
731    
732    ----------------------------------------------------------------------
733    Name: Matthias Blume (blume (at) tti - c (dot) org)
734    Date: 2005/02/10 17:55:00 CST
735    Tag: blume-20050210-longlong
736    Description:
737    
738    Implemented "long long" arguments and results for NLFFI.  (Only the
739    PPC/MacOS implementation is complete, the other backends still need to
740    be updated.)
741    
742    ----------------------------------------------------------------------
743    Name: Matthias Blume (blume (at) tti - c (dot) org)
744    Date: 2005/01/24 17:40:00 CST
745    Tag: blume-20050124-mlyacc
746    Description:
747    
748    Minor cleanup in ML-Yacc rule printing mechanism.  This should fix a
749    problem with certain "as" patterns which previously got rendered
750    using incorrect syntax.
751    
752    ----------------------------------------------------------------------
753    Name: Matthias Blume (blume (at) tti - c (dot) org)
754    Date: 2005/01/18 12:00:00 CST
755    Tag: blume-20050118-profile
756    Description:
757    
758    Made time profiling code (interrupt handler) in runtime system aware
759    of new array representation.
760    
761    ----------------------------------------------------------------------
762    Name: Matthias Blume (blume (at) tti - c (dot) org)
763    Date: 2005/01/14 18:00:00 CST
764    Tag: blume-20050114-heap2exec
765    Description:
766    
767    Implemented new (but still experimental) heap2exec facility.  This is
768    tested under Mac OS X and should work under Linux (will test shortly).
769    It will probably also work on the Sparc (will test some time later).
770    
771      - removed old "HACKED_STANDALONE" hack from runtime
772    
773    To be able to test this, uncomment the request for "heap2asm" in
774    config/targets prior to installation.  (Notice that this is different
775    from "heap2exec" mentioned below.  Not a typo.)
776    
777    To perform an actual test, run the command
778    
779       $ bin/heap2exec heapfile execfile
780    
781    (You can put heap2exec on your shell's path.)
782    
783    For example, run
784    
785      $ bin/heap2exec bin/.heap/ml-yacc.ppc-darwin mly
786    
787    This will create a standalone executable called "mly" which you can
788    then invoke directly as a command.
789    
790    ----------------------------------------------------------------------
791    Name: Matthias Blume (blume (at) tti - c (dot) org)
792    Date: 2005/01/07 11:44:00 CST
793    Tag: blume-20050107-mlstring
794    Description:
795    
796    fixed off-by-one error in ML_STRING macro (globals.c)
797    
798    ----------------------------------------------------------------------
799    Name: Matthias Blume (blume (at) tti - c (dot) org)
800    Date: 2004/12/23 18:00:00 CST
801    Tag: blume-20041223-santa
802    Description:
803    
804    Made ml-build script "smarter" (but only very little).
805    
806    ----------------------------------------------------------------------
807    Name: Matthias Blume (blume (at) tti - c (dot) org)
808    Date: 2004/12/21 15:05:00 CST
809    Tag: blume-20041221-longlong
810    Description:
811    
812    * Implemented access to signed and unsigned long long data in NLFFI.
813    (The parameter-passing part of the picture has not complete. But
814    data structure access seems to work.)
815    
816    * Fixed CM's incorrect assumption that the PPC is little-endian.
817      (On the Mac, it is big-endian.  And that's currently our only
818      PPC platform.)
819    
820    ----------------------------------------------------------------------
821    Name: Matthias Blume (blume (at) tti - c (dot) org)
822    Date: 2004/12/21 12:50:00 CST
823    Tag: blume-20041221-memory
824    Description:
825    
826    Some cleanup in the $c/memory.cm library: separated some concerns by
827    moving allocation code and memory access code each into their own
828    files.
829    
830    ----------------------------------------------------------------------
831    Name: Allen Leung (leunga (at) reservoir (dot) com)
832    Date: 2004/12/17 16:12:00 EST
833    Tag: leunga-20041217-cygwin-smlnj-home
834    Description:
835    
836        The Unix I/O library of SML/NJ on cygwin does not understand
837    Windows style pathname, so problems arise when SMLNJ_HOME is set
838    to a Windows style pathname.  _run-sml now converts SMLNJ_HOME
839    to a POSIX pathname on cygwin.
840    
841    ----------------------------------------------------------------------
842    Name: Matthias Blume (blume (at) tti - c (dot) org)
843    Date: 2004/12/16 13:35:00 CST
844    Tag: Release_110_52
845    Description:
846    
847    Last-minute changes incorporated into 110.52.  Release tag moved.
848    
849    The changes:
850       - HashString.hashString' -> HashString.hashSubstring
851       - bug fix in UnivariateStats
852    
853    ----------------------------------------------------------------------
854    Name: Matthias Blume (blume (at) tti - c (dot) org)
855    Date: 2004/12/15 23:40:00 CST
856    Tag: blume-20041215-hashSubstring
857    Description:
858    
859    - HashString.hashString' -> HashString.hashSubstring
860    - corresponding changes in atom.sml
861    - "de-compressed" (aka. un-obfuscated) code for UnivariateStats and
862      added some comments
863    
864    ----------------------------------------------------------------------
865    Name: Matthias Blume (blume (at) tti - c (dot) org)
866    Date: 2004/12/15 15:30:00 CST
867    Tag: (Release_110_52)
868    Description:
869    
870    New working version (110.52).  NEW BOOTFILES!
871    
872    ----------------------------------------------------------------------
873    Name: Matthias Blume (blume (at) tti - c (dot) org)
874    Date: 2004/12/15 12:45:00 CST
875    Tag: blume-20041215-spaces
876    Description:
877    
878    More on the space problem (this time for Win32).
879    
880    ----------------------------------------------------------------------
881    Name: Matthias Blume (blume (at) tti - c (dot) org)
882    Date: 2004/12/14 17:30:00 CST
883    Tag: blume-20041214-spaces
884    Description:
885    
886    Hacked some of the scripts (in particular: the installer) to cope with
887    spaces in filenames a bit better.  But beware: the current "solution"
888    is likely still full of bugs and inherently incomplete.  (We need to
889    do away with those shell scripts for a comprehensive solution.)
890    
891    ----------------------------------------------------------------------
892    Name: Matthias Blume (blume (at) tti - c (dot) org)
893    Date: 2004/12/13 14:45:00 CST
894    Tag: blume-20041213-ml-makedepend
895    Description:
896    
897    Fixed bug in code for ml-makedepend.
898    
899    ----------------------------------------------------------------------
900    Name: Matthias Blume (blume (at) tti - c (dot) org)
901    Date: 2004/12/09 16:30:00 CST
902    Tag: blume-20041209-statistics
903    Description:
904    
905    Added two simple but potentially useful statistics modules to SML/NJ Library.
906    (See CHANGES file there.)
907    
908    ----------------------------------------------------------------------
909    Name: Matthias Blume (blume (at) tti - c (dot) org)
910    Date: 2004/12/01 16:50:00 CST
911    Tag: blume-20041201-atom
912    Description:
913    
914    smlnj-lib:
915    
916      Added function HashString.hashString' for substrings.
917      Hand-inlined CharVector.foldl into HashString (for speed).
918      Modified implementation of structure Atom to avoid extracting
919      strings from substrings unless necessary.
920      (Also see CHANGES file for smlnj-lib.)
921    
922    ----------------------------------------------------------------------
923    Name: Matthias Blume (blume (at) tti - c (dot) org)
924    Date: 2004/11/24 22:15:00 CST
925    Tag: blume-20041124-cml
926    Description:
927    
928    Made sure CML compiles when Position = Int64.
929    
930    ----------------------------------------------------------------------
931    Name: Matthias Blume (blume (at) tti - c (dot) org)
932    Date: 2004/11/24 14:30:00 CST
933    Tag: blume-20041124-position
934    Description:
935    
936    The compiler can now be compiled in a mode that makes structure Position
937    equal to Int64.  The default, however, is unchanged (Position = Int31)
938    for the time being.
939    
940    To enable 64-bit positions, use the following procedure:
941    
942    1. Start sml
943    2. Autoload $smlnj/cmb.cm (if not already autoloaded)
944    3. Type
945          #set (CMB.symval "USE_64_BIT_POSITIONS") (SOME 1);
946    4. Run CMB.make() as usual.
947    
948    This is barely tested.  The only test so far was a little SML program
949    counting the number of characters in an 8-gigabyte file by
950    reading it character-by-character.  That test was successful.
951    
952    In support of 64-bit positions, a number of new functions have been
953    added to the runtime system.
954    
955    ----------------------------------------------------------------------
956    Name: Matthias Blume (blume (at) tti - c (dot) org)
957    Date: 2004/11/23 14:45:00 CST
958    Tag: blume-20041123-useFile
959    Description:
960    
961    Fixed a problem with unhelpful error messages related to problems with
962    .cm- or .sml files that appear as part of the sml command line.
963    
964    ----------------------------------------------------------------------
965    Name: Matthias Blume (blume (at) tti - c (dot) org)
966    Date: 2004/11/18 15:40:00 CST
967    Tag: Release_110_51
968    Description:
969    
970    New working version (110.51).  NEW BOOTFILES!
971    
972    ----------------------------------------------------------------------
973    Name: Matthias Blume (blume (at) tti - c (dot) org)
974    Date: 2004/11/18 15:35:00 CST
975    Tag: <none>
976    Description:
977    
978    Enabled dlopen and friends for FreeBSD (as recommended by Johannes 5
979    Joemann).
980    
981    ----------------------------------------------------------------------
982    Name: Allen Leung (leunga (at) reservoir (dot) com)
983    Date: 2004/11/17 16:05:21 EST 2004
984    Tag: leunga-20041117-mlrisc-live-kill
985    Description:
986    
987       Added support for MLTree constructs LIVE and KILL
988    to all the architectures.
989    
990    ----------------------------------------------------------------------
991    Name: Matthias Blume (blume (at) tti - c (dot) org)
992    Date: 2004/11/13 00:20:00 CST
993    Tag: blume-20041113-versiontool
994    Description:
995    
996    - Stripped down the versiontool: It now only handles the version number.
997      The date string is generated at bootstrap time (during makeml).
998    
999    - In a previous commit, fixed a minor issue with how polyequal is being
1000      translated.  In particular, the code now "looks through" abstractions.
1001      This results in slightly fewer polyEqual warnings and hopefully slightly
1002      more efficient code.  Important examples for where this matters are
1003      the new int64 and word64 types.
1004    
1005    ----------------------------------------------------------------------
1006    Name: Matthias Blume (blume (at) tti - c (dot) org)
1007    Date: 2004/11/12 00:30:00 CST
1008    Tag: blume-20041112-int64
1009    Description:
1010    
1011    Structure Int64 fully hooked in.  (The implementation is not very
1012    efficient, though.)
1013    
1014    ----------------------------------------------------------------------
1015    Name: Matthias Blume (blume (at) tti - c (dot) org)
1016    Date: 2004/11/11 17:30:00 CST
1017    Tag: blume-20041111-more64
1018    Description:
1019    
1020    All the pieces of Word64 are now there, with the exception of the
1021    conversions from and to LargeWord. (Eventually these need to be identities,
1022    but for the time being they don't even make sense because LargeWord is
1023    32-bit wide.)
1024    
1025    Also started to add similar support for Int64, but major pieces of that
1026    are still missing.
1027    
1028    ----------------------------------------------------------------------
1029    Name: Matthias Blume (blume (at) tti - c (dot) org)
1030    Date: 2004/11/11 00:15:00 CST
1031    Tag: blume-20041111-word64
1032    Description:
1033    
1034    Structure Word64 is now (almost) complete, word literals and patterns
1035    seem to work.  There are a few odd pieces missing.  In particular,
1036    I didn't do the {from,to}LargeWord parts because LargeWord is still Word32
1037    at the moment.
1038    
1039    Making Word64 official would mean that LargeWord becomes Word64.  But
1040    this requires extreme care because most word-word conversions have to
1041    go through LargeWord, so making a mistake means loss of efficiency or
1042    worse.  Eventually there will be a solution similar to (but actually
1043    simpler than) what I did with IntInf.
1044    
1045    ----------------------------------------------------------------------
1046    Name: Matthias Blume (blume (at) tti - c (dot) org)
1047    Date: 2004/11/10 18:12:00 CST
1048    Tag: blume-20041110-64bit
1049    Description:
1050    
1051    More 64-bit hacking (but still not even half-way there yet).
1052    Also, some assorted improvements to the handling of 8-bit words.
1053    
1054    ----------------------------------------------------------------------
1055    Name: Matthias Blume (blume (at) tti - c (dot) org)
1056    Date: 2004/11/09 17:50:00 CST
1057    Tag: <none>
1058    Description:
1059    
1060    Started adding some infrastructure for supporting 64-bit int- and
1061    word-types.  (Still in its very early stages.)
1062    
1063    ----------------------------------------------------------------------
1064    Name: Matthias Blume (blume (at) tti - c (dot) org)
1065    Date: 2004/10/28 10:45:00 CDT
1066    Tag: Release_110_50
1067    Description:
1068    
1069    New working version (110.50).  NEW BOOTFILES!
1070    
1071                 =====================
1072    
1073    Also:
1074    
1075      - Changend config/srcarchiveurl from a file just
1076        containing the URL string into a file containing
1077        shell script code.  The code has access to the $VERSION variable.
1078      - Made corresponding changes to config/install.sh and config/unpack.
1079      - Default contents of config/srcarchiveurl uses $VERSION and
1080        normally does not have to be edited to reflect a version change.
1081    
1082      (As a result, a version change can be done by just editing
1083       config/version, the rest is now automatic.)
1084    
1085    ----------------------------------------------------------------------
1086    Name: Matthias Blume (blume (at) tti - c (dot) org)
1087    Date: 2004/10/27 17:50:00 CDT
1088    Tag: blume-20041027-btrace-msg
1089    Description:
1090    
1091    BackTrace.monitor now also reports the source of the exception that
1092    triggered the trace.
1093    
1094    ----------------------------------------------------------------------
1095    Name: Matthias Blume (blume (at) tti - c (dot) org)
1096    Date: 2004/10/27 17:20:00 CDT
1097    Tag: blume-20041027-x86-c-calls
1098    Description:
1099    
1100    This is the HISTORY entry for two earlier commits, both concerning
1101    the x86 c-calls code in MLRISC:
1102    
1103      - added a missing LOAD in the code that deals with struct arguments
1104      - made sure the caller does not add the wrong number of bytes to the
1105        stack pointer after a call of a function returning a struct
1106        (the callee already pops the implicit argument which points to
1107         the space reserved for the result)
1108    
1109    ----------------------------------------------------------------------
1110    Name: Allen Leung (leunga (at) reservoir (dot) com)
1111    Date: 2004/10/24 14:00:00 EST
1112    Tag: leunga-20041024-x86-gas-fucomip
1113    Description:
1114    
1115       John discovered a bug in the syntax of fucomip.
1116       The opcodes FU?COMIP? have been changed to
1117    
1118           fu?comip? %st(i), %st
1119    
1120    ----------------------------------------------------------------------
1121    Name: Matthias Blume (blume (at) tti - c (dot) org)
1122    Date: 2004/10/20 15:06:00 CDT
1123    Tag: blume-20041020-standalone-backtrace
1124    Description:
1125    
1126    Added a mechanism for getting back-trace information from standalone
1127    programs.  Here is how it works:
1128    
1129       1. The part of the program from which you want to get backtrace
1130          information (usually the whole program) should be wrapped with
1131          BackTrace.monitor.  This is a (unit->'a)->'a function, and your
1132          main program could be modified from something like
1133    
1134             fun main (pgm, args) = ...
1135    
1136         to
1137    
1138            fun main (pgm, args) = BackTrace.monitor (fn () => ...)
1139    
1140       2. To be able to access BackTrace.monitor, you have to add
1141          library $smlnj-tdp/plugins.cm to the .cm file that contains your
1142          main function.
1143    
1144       3. Remove all compiled code (i.e., all the .cm/ subdirectories that
1145          CM might have created in the past for your project).
1146    
1147       4. Build the system using this command line:
1148    
1149             ml-build -Ctdp.instrument=true \$smlnj-tdp/back-trace.cm \
1150                      myprog.cm MyProg.main myprog
1151    
1152          instead of the usual
1153    
1154             ml-build myprog.cm MyProg.main myprog
1155    
1156    I changed a library name:
1157    
1158       $/trace-debug-profile.cm --> $smlnj-tdp/plugins.cm
1159    
1160    New libraries:
1161    
1162       $smlnj-tdp/back-trace.cm
1163          -- when loaded causes the back-trace plugin to be installed
1164       $smlnj-tdp/coverage.cm
1165          -- when loaded causes the coverage plugin to be installed
1166    
1167    ----------------------------------------------------------------------
1168    Name: Matthias Blume (blume (at) tti - c (dot) org)
1169    Date: 2004/10/18 16:45:00 CDT
1170    Tag: blume-20041018-groupowner
1171    Description:
1172    
1173    Added an "obsolete" warning for the "group owner" syntax to CM's parser.
1174    
1175    Eliminated group owner specs from .cm files throughout the source tree.
1176    
1177    ----------------------------------------------------------------------
1178    Name: Matthias Blume (blume (at) tti - c (dot) org)
1179    Date: 2004/10/15 15:45:00 CDT
1180    Tag: blume-20041015-coverage
1181    Description:
1182    
1183    * Test coverage tool added!
1184    * Further reorganization of tracing-, debugging-, and profiling support:
1185    
1186        - moved original BTImp -- now called BackTrace -- into a separate
1187          library called $/trace-debug-profile.cm
1188        - eliminated all mentions of BTrace from SMLofNJ.Internals
1189        - only the instrumentation mechanism is now left in the compiler proper
1190        - BackTrace module is a plugin which is NOT plugged in by default
1191        - Coverage module is another such plugin
1192    
1193    To get the benefits of any of these plugin modules, the code in
1194    question must be compiled with tdp instrumentation turned on.  This
1195    can be done by setting SMLofNJ.Internals.TDP.mode to true.
1196    (The ref cell is also controlled via the -Ctdp.instrument=... switch.)
1197    
1198    Plugins are selected at link time.  (Pre-compiled instrumented code
1199    can be re-loaded with different plugins in effect.)  When an
1200    instrumented module is linked, whatever plugins are at that time
1201    enabled will come into effect for that module.
1202    
1203    To enable the back-trace plugin, load library $/trace-debug-profile.cm
1204    and invoke BackTrace.install() (e.g., from the interactive prompt).
1205    To enable the coverage plugin, load the same library and invoke
1206    Coverage.install().
1207    
1208    Back-traces are generated automatically on uncaught exceptions and
1209    when the code in question explicitly invokes BackTrace.trigger().
1210    
1211    Coverage (and execution frequency-) information must be queried
1212    explicitly by calling Coverage.not_covered and Coverage.hot_spots.
1213    
1214    ----------------------------------------------------------------------
1215    Name: Matthias Blume (blume (at) tti - c (dot) org)
1216    Date: 2004/10/14 17:40:00 CDT
1217    Tag: blume-20041014-tdp-core
1218    Description:
1219    
1220    Snapshot of a significant overhaul of how the trace/debug/profile support
1221    is hooked into the system (specifically: Core and SMLofNJ.Internals).
1222    
1223    ----------------------------------------------------------------------
1224    Name: Matthias Blume (blume (at) tti - c (dot) org)
1225    Date: 2004/10/13 16:34:00 CDT
1226    Tag: blume-20041013-tdp
1227    Description:
1228    
1229    Some rationalization of names:
1230    
1231       structure BTrace -> structure TDPInstrument
1232       etc.
1233    
1234    This is is preparation of using the original back-trace
1235    instrumentation for other purposes.  "TDP" stands for
1236    Trace/Debug/Profile.
1237    
1238    The control flag controlling whether instrumentation is on or off is now
1239    registered under a different name, so instead of running sml as
1240    
1241     sml -Cinstrument.btrace-mode=true
1242    
1243    one has to say
1244    
1245     sml -Ctdp.instrument=true
1246    
1247    ----------------------------------------------------------------------
1248    Name: Matthias Blume (blume (at) tti - c (dot) org)
1249    Date: 2004/10/11 16:37:00 CDT
1250    Tag: blume-20041011-regions
1251    Description:
1252    
1253    Made some minor modifications to elabcore.sml to have source regions
1254    be propagated more tightly -- resulting in better (i.e., smaller)
1255    regions being reported in error- and debug messages.
1256    
1257    ----------------------------------------------------------------------
1258    Name: Matthias Blume (blume (at) tti - c (dot) org)
1259    Date: 2004/10/08 22:50:00 CDT
1260    Tag: blume-20041008-cmkw
1261    Description:
1262    
1263    Fixed handling of keywords in .cm files: After seeing "is" the lexer
1264    treats subsequent occurrences of "group", "library", "source", "is",
1265    "*", and "-" as ordinary identifiers rather than keywords.
1266    
1267    Most seriously, this fixes a problem with CM's "shell" tool.  The tool
1268    is supposed to accept a tool argument called "source", but this did
1269    not work because of the clash with the keyword.
1270    
1271    ----------------------------------------------------------------------
1272    Name: Matthias Blume (blume (at) tti - c (dot) org)
1273    Date: 2004/10/07 16:00:00 CDT
1274    Tag: blume-20041007-cleanup
1275    Description:
1276    
1277    Assorted cleanup work:
1278    
1279      - got rid of intstrmap in favor of using the library's
1280        hash table implementation
1281      - threw out most of the pathnames stuff, as it was not used anyway
1282      - simplified tokentable implementation
1283      - fixed some minor spelling errors
1284    
1285    ----------------------------------------------------------------------
1286    Name: Matthias Blume (blume (at) tti - c (dot) org)
1287    Date: 2004/10/06 15:15:15 CDT
1288    Tag: blume-20041006-handler
1289    Description:
1290    
1291    Cleaned up the absyn to reflect the invariant that HANDLE always
1292    carries a FNexp as part of the type definition.  This eliminates some
1293    superfluous sanity checks at runtime down the road.
1294    
1295    Some minor cleanup of the btrace code.
1296    
1297    ----------------------------------------------------------------------
1298    Name: Matthias Blume (blume (at) tti - c (dot) org)
1299    Date: 2004/10/01 10:20:30 CDT
1300    Tag: blume-20041001-slave
1301    Description:
1302    
1303    Added hack to make slave mode work in the presence of the version
1304    tool.  (Still, since the master does two passes over the code for
1305    CMB.make, the release number gets bumped twice when slaves are
1306    attached.  I don't know if this is worth fixing...)
1307    
1308    ----------------------------------------------------------------------
1309    Name: Matthias Blume (blume (at) tti - c (dot) org)
1310    Date: 2004/09/30 10:55:00 CDT
1311    Tag: blume-20040930-version
1312    Description:
1313    
1314    * Moved the "version" magic into its own little library under
1315      src/system/smlnj/internal.  This avoids expensive reconstruction of
1316      a stable src/compiler/core.cm.
1317    
1318    * At the same time, structure CompilerVersion is now known as
1319      structure SMLNJVersion.
1320    
1321    * Arranged for the version tool to NOT kick in when rebuilding the system
1322      (makeml -rebuild, fixpt).  Otherwise one would never reach a fixpoint.
1323      Also, loading the versiontool does not work when rebuilding the system
1324      because CM is not properly initialized at that time.
1325    
1326    ----------------------------------------------------------------------
1327    Name: Matthias Blume (blume (at) tti - c (dot) org)
1328    Date: 2004/09/29 14:00:00 CDT
1329    Tag: blume-20040929-autoversion
1330    Description:
1331    
1332    Implemented some CM magic to have
1333        file src/compiler/TopLevel/main/version.sml
1334    generated automagically.
1335    The version is taken from two files: config/version and config/release.
1336    The first is expected to contain a two-part version number such as 110.49.
1337    The second should contain a single number, but it may be missing.
1338    
1339    If the environment variable VERSIONTOOL_BUMP_RELEASE is defined at the
1340    time the version tool is loaded (which is the first time you say CMB.make),
1341    then the tool will increment the value stored in config/release every
1342    time CMB.make is invoked.
1343    
1344    The binfile format is now insensitive to anything beyond the first
1345    two components of a version number, so bumping the release does not render
1346    binfiles incompatible.  Auto-bumping can be used to keep track of versions
1347    during development without invalidating existing binfiles.
1348    
1349    In any case, every CMB.make updates the date information in version.sml.
1350    (This is the date that is printed in the banner.)
1351    
1352    ----------------------------------------------------------------------
1353    Name: Matthias Blume (blume (at) tti - c (dot) org)
1354    Date: 2004/09/28 10:53:00 CDT
1355    Tag: blume-20040928-controls
1356    Description:
1357    
1358    Some cleanup of the controls code.
1359    
1360    ----------------------------------------------------------------------
1361    Name: Matthias Blume (blume (at) tti - c (dot) org)
1362    Date: 2004/09/27 22:08:00 CDT
1363    Tag: blume-20040927-controls
1364    Description:
1365    
1366    Added two pieces of functionality to the Controls interface:
1367    
1368    1.   val save'restore: 'a control -> unit -> unit
1369    
1370       grabs the current value of the control in stage 1 and restores it
1371       in stage 2.
1372    
1373    2.   val set' : 'a control * 'a -> unit -> unit
1374    
1375       stores the given value into the control in stage 2 (i.e., delayed)
1376       but does all error checking in stage 1.
1377       (This is for string controls that need to do parse their argument --
1378        something that might fail.  In some cases, notably in CM, one
1379        already knows the intended argument but wants to delay the actual
1380        assignment until a time when error recovery would be more difficult.)
1381    
1382    Changed the handling of controls in tool arguments to classes "sml" and
1383    "lazysml":
1384       - use Controls.save'restore as a more robust way of restoring the
1385         old value (in particular: without having to re-parse the string)
1386       - use controls to handle the "overload" keyword in the init group
1387         (I believe this change actually fixes a long-standing obscure bug.)
1388    
1389    ----------------------------------------------------------------------
1390    Name: Matthias Blume (blume (at) tti - c (dot) org)
1391    Date: 2004/09/27 17:00:00 CDT
1392    Tag: blume-20040927-lazysml
1393    Description:
1394    
1395    Added a new tool class called "lazysml" to CM's tool chest.  The only
1396    difference to "sml" is that compilation is done with Control.lazysml
1397    set to true.  A source of class "lazysml" is automatically recognized
1398    by a file name suffix of ".lml".
1399    
1400    In addition to the above feature, the original class "sml" now also
1401    supports a tool argument "lazy" which has the same effect.  As a
1402    result, the following three lines are equivalent:
1403    
1404        foo.sml : lazysml
1405        foo.sml : sml (lazy)
1406        foo.sml (lazy)
1407    
1408    The setting goes into effect both during parsing and during
1409    compilation.  The original setting is restored right after parsing and
1410    after compilation, respectively.
1411    
1412    In addition to all the above, there is also a general mechanism to set
1413    ANY of the "controls" that are available at the command line via
1414    "-C..." on a per-sml-file basis.  The same rules that apply for "lazy"
1415    apply as well. (In fact, "lazy" is implemented as a special case of
1416    the general mechanism.)
1417    
1418    The .cm file syntax uses a new keyword tool argument called "with".
1419    There are several ways of indicating the desired settings:
1420    
1421        foo.sml (with:parser.quotations=true)
1422        foo.sml (with:(name:parser.quotations value:true))
1423        foo.sml (with:(name:name1 value:value1 name:name2 value:value2 ...))
1424        foo.sml (with:(name1=value1 name2=value2 ...))
1425        foo.sml (with:(name1=value1 name:name2 value:value2 name3=value3 ...))
1426    
1427        etc.
1428    
1429    Another possible abbreviation is to leave out the =v or value:v part
1430    if the name refers to a boolean control (in which case the value is
1431    taken to be true).  Thus, one could get lazy sml also by saying:
1432    
1433        foo.sml (with:parser.lazy-keyword=true)
1434        foo.sml (with:parser.lazy-keyword)
1435        foo.sml (with:(name:parser.lazy-keyword value:true))
1436        foo.sml (with:(name:parser.lazy-keyword))
1437    
1438    ----------------------------------------------------------------------
1439    Name: Matthias Blume (blume (at) tti - c (dot) org)
1440    Date: 2004/09/24 16:22:00 CDT
1441    Tag: blume-20040924-ppc-long-branch
1442    Description:
1443    
1444    Turned message about "emiting long form of branch" off by default.
1445    Added a control flag to turn it back on when desired.
1446    
1447    ----------------------------------------------------------------------
1448    Name: Matthias Blume (blume (at) tti - c (dot) org)
1449    Date: 2004/09/24 16:05:00 CDT
1450    Tag: blume-20040924-rounding
1451    Description:
1452    
1453    Applied patch for setting rounding modes under Mac OS X.  Thanks to
1454    Melissa O'Neill for providing the code!
1455    
1456    ----------------------------------------------------------------------
1457    Name: Matthias Blume (blume (at) tti - c (dot) org)
1458    Date: 2004/09/23 17:30:00 CDT
1459    Tag: blume-20040923-envvars
1460    Description:
1461    
1462    1. Changed definition of type ControlRegistry.registry_tree to
1463       include control_info (i.e., the name of the controlling environment
1464       variable).
1465    
1466    2. Added command-line flags -e and -E to print the names of environment
1467       variables that can be used to control internal settings.
1468       (This uses the new API mentioned in 1.)
1469    
1470    ----------------------------------------------------------------------
1471    Name: Matthias Blume (blume (at) tti - c (dot) org)
1472    Date: 2004/09/13 16:50:00 CDT
1473    Tag: Release_110_49
1474    Description:
1475    
1476    New working version (110.49).  NEW BOOTFILES!
1477    
1478    ----------------------------------------------------------------------
1479    Name: Matthias Blume
1480    Date: 2004/09/13 16:20:00 CDT
1481    Tag: blume-20040913-config-mlrisc
1482    Description:
1483    
1484    Put target "mlrisc" back into the default list.
1485    (There is no harm in having it, and some users have expressed their
1486    wish to have "mlrisc" included by default.)
1487    
1488    ----------------------------------------------------------------------
1489    Name: John Reppy
1490    Date: 2004/09/13
1491    Tag: jhr-20040913-signals
1492    Description:
1493    
1494    Fixed the signal masking code to properly nest mask/unmask operations
1495    on a per-signal basis.
1496    
1497    ----------------------------------------------------------------------
1498    Name: Matthias Blume (blume (at) tti - c (dot) org)
1499    Date: 2004/09/08 13:20:00 CDT
1500    Tag: blume-20040908-heap-magic
1501    Description:
1502    
1503    Bumped the heap macig number to 0x09082004 to account for the changed
1504    layout of the ML frame under MacOS X.
1505    
1506    ----------------------------------------------------------------------
1507    Name: Allen Leung (leunga (at) reservoir (dot) com)
1508    Date: 2004/09/03 11:26:00 EST
1509    Tag: leunga-20040903-cygwin-install
1510    Description:
1511    
1512       Added a patch to _arch-n-opsys to enable the Cygwin runtime.
1513    The Cygwin runtime is turned on by setting the environment
1514    variable SMLNJ_CYGWIN_RUNTIME to 1.
1515    
1516    ----------------------------------------------------------------------
1517    Name: Matthias Blume (blume (at) tti - c (dot) org)
1518    Date: 2004/08/31 17:15:00 CDT
1519    Tag: blume-20040831-core
1520    Description:
1521    
1522    Added some exports to src/compiler/core.cm upon request by J. Joemann.
1523    
1524    ----------------------------------------------------------------------
1525    Name: Matthias Blume (blume (at) tti - c (dot) org)
1526    Date: 2004/08/30 17:55:00 CDT
1527    Tag: blume-20040830-installer
1528    Description:
1529    
1530    Upon request by Johannes Joemann:
1531    
1532    - improved ML code of installer to fall back to coping when renaming
1533      fails (i.e., when source and target are on different file systems);
1534      the code compiles but has yet to be tested in anger
1535    - removed mlrisc from list of default targets (config/targets)
1536    
1537    ----------------------------------------------------------------------
1538    Name: Matthias Blume (blume (at) tti - c (dot) org)
1539    Date: 2004/08/27 17:20:00 CDT
1540    Tag: blume-20040827-ptreql
1541    Description:
1542    
1543    Added ptreql primop to structure InlineT (upon request from Larry
1544    Paulson).
1545    
1546    ----------------------------------------------------------------------
1547    Name: Allen Leung (leunga (at) reservoir (dot) com)
1548    Date: 2004/08/15 21:21:00 EST
1549    Tag: leunga-110_48-udgraph
1550    Description:
1551    
1552    Another bug fix from Carl Hauser:
1553    
1554    diff /net/niflab/smlnj48/src/MLRISC/graphs/udgraph.sml udgraph.sml
1555    > 48c48
1556    > <              | rmv((e as (k,_))::es,L) = rmv(es,if k = i then es else
1557    > e::L)
1558    > ---
1559    > >              | rmv((e as (k,_))::es,L) = rmv(es,if k = i then L else e::L)
1560    > Without this, any deletion of an edge in an undirected graph does severe
1561    > violence to the graph.
1562    
1563    ----------------------------------------------------------------------
1564    Name: Allen Leung (leunga (at) reservoir (dot) com)
1565    Date: 2004/08/10 23:35:00 EST
1566    Tag: leunga-110_48-ppc
1567    Description:
1568    
1569       The IBM/MacOS syntax switch on PPC was incorrectly swapped.
1570    
1571    ----------------------------------------------------------------------
1572    Name: Matthias Blume (blume (at) tti - c (dot) org)
1573    Date: 2004/08/10 12:00:00 CDT
1574    Tag: Release_110_48
1575    Description:
1576    
1577    New working version (110.48).  NEW BOOTFILES!
1578    
1579    ----------------------------------------------------------------------
1580    Name: Allen Leung (leunga (at) reservoir (dot) com)
1581    Date: 2004/08/09 12:21:00 EST
1582    Tag: leunga-110_47-dijsktra
1583    Description:
1584    
1585    Bug fix from Carl Hauser:
1586    
1587    single_source_shortest_paths in dijkstra.sml was observed to get wrong
1588    answers (by comparing to single_source_shortest_paths in bellman-ford.sml).
1589    
1590    The problem is that following the expression A.update(dist,s,Num.zero)
1591    it is necessary to update the priority queue using Q.decreaseWeight(Q,s).
1592    
1593    ----------------------------------------------------------------------
1594    Name: Matthias Blume (blume (at) tti - c (dot) org)
1595    Date: 2004/08/06 18:10:00 CDT
1596    Tag: blume-20040806-cmdline
1597    Description:
1598    
1599    Fiddled with handling of command-line options:
1600    
1601      * sml now quits after processing the command line
1602        if -H, -S, -h<n>, or -s<n> appears as the last
1603        command-line argument
1604      * a new option -q terminates the session when encountered on
1605        the command line; subsequent arguments will be ignored
1606      * bug fixes: short (erroneous) arguments are no longer ignored
1607        completely
1608    
1609    ----------------------------------------------------------------------
1610    Name: Allen Leung (leunga (at) reservoir (dot) com)
1611    Date: 2004/08/04 18:17:00 EST
1612    Tag: leunga-110_47-ppc-ibm-asm
1613    Description:
1614    
1615      - Added minimal IBM assembly syntax support for PowerPC.
1616    
1617      - Cygwin: manually changed the file cygwin.def.  Some exported symbols have
1618        been altered in the runtime.  We need an automatic way to keep the file
1619        in sync.
1620    
1621    ----------------------------------------------------------------------
1622    Name: Matthias Blume (blume (at) tti - c (dot) org)
1623    Date: 2004/08/04 14:00:00 CDT
1624    Tag: Release_110_47
1625    Description:
1626    
1627    New working version (110.47).  NEW BOOTFILES!
1628    
1629    ----------------------------------------------------------------------
1630    Name: Matthias Blume (blume (at) tti - c (dot) org)
1631    Date: 2004/08/03 14:25:00 CDT
1632    Tag: blume-20040803-callingconv
1633    Description:
1634    
1635    Added low-level support for choosing C calling conventions by
1636    twiddling the type of rawccall.  (See
1637    src/compiler/Semant/types/cproto.sml for details.)
1638    
1639    ----------------------------------------------------------------------
1640    Name: Matthias Blume (blume (at) tti - c (dot) org)
1641    Date: 2004/08/02 15:55:00 CDT
1642    Tag: blume-20040802-backout
1643    Description:
1644    
1645    Backed out of change to win32-filesys.c.  The earlier patch to
1646    get_file_time caused CM to produce files with the wrong time stamp.
1647    
1648    ----------------------------------------------------------------------
1649    Name: Matthias Blume (blume (at) tti - c (dot) org)
1650    Date: 2004/08/02 14:45:00 CDT
1651    Tag: blume-20040802-nlffi-win32
1652    Description:
1653    
1654    Added NLFFI support for Win32, adapted from a patch provided by David
1655    Hansel.  This is currently completely untested.  Also, the issue
1656    concerning stdcall vs. ccall is still unresolved.
1657    
1658    ----------------------------------------------------------------------
1659    Name: Matthias Blume (blume (at) tti - c (dot) org)
1660    Date: 2004/07/30 17:55:00 CDT
1661    Tag: blume-20040730-various
1662    Description:
1663    
1664    Gearing up towards 110.47...
1665    
1666    - various minor bugfixes to ml-nlffigen
1667    - a beginning of a manual for nlffi
1668    
1669    - eliminated 'export name=value' in config/install.sh as this does
1670      not work with certain versions of /bin/sh
1671      (Thanks to David King at Motorola for catching this.)
1672    
1673    - several bugfixes provided or suggested by David Hansel at Reactive Systems:
1674      - added a test for tm==NULL to gmtime.c and localtime.c
1675      - applied patch for incorrect GetFileTime under win32
1676      - toSeconds -> toMilliseconds in Win32/win32-process.sml
1677    
1678    ----------------------------------------------------------------------
1679    Name: Matthias Blume (blume (at) tti - c (dot) org)
1680    Date: 2004/07/21 18:20:00 CDT
1681    Tag: blume-20040721-nlffigen
1682    Description:
1683    
1684    - Fixed minor issue in ml-nlffigen: Now generate structure T_foo
1685      for a typedef to an incomplete type, but leave out the "typ" member.
1686      (This is just for consistency.)
1687    - Started to produce what is supposed to become better (i.e., comprehensive)
1688      documentation of what ml-nlffigen does and produces.
1689    
1690    ----------------------------------------------------------------------
1691    Name: Matthias Blume (blume (at) tti - c (dot) org)
1692    Date: 2004/07/14 16:25:00 CDT
1693    Tag: blume-20040714-union
1694    Description:
1695    
1696    Added C_UNION to c-calls/c-types.sml and updated the machinery
1697    (ml-nlffigen, cproto.sml) that conveys C function interface
1698    information to the code generator.
1699    
1700    However, the actual architecture-specific implementation of function
1701    arguments and results that are C unions is still not implemented.
1702    
1703    ----------------------------------------------------------------------
1704    Name: Allen Leung (leunga (at) reservoir (dot) com)
1705    Date: 2004/07/14 14:38:00 EST
1706    Tag: leunga-110_46_1-ppc-lwzu
1707    Description:
1708    
1709        Added these instructions to the PowerPC architecture:
1710        LBZU(X), LHZU(X), LWZU(X),
1711        STWU(X), STFDU, STFSU
1712    
1713        etc...
1714    
1715        Note: I haven't added their instruction encoding into the description.
1716    
1717    ----------------------------------------------------------------------
1718    Name: Allen Leung (leunga (at) reservoir (dot) com)
1719    Date: 2004/07/13 15:04:00 EST
1720    Tag: leunga-110_46_1-ppc-lwarx
1721    Description:
1722    
1723       Added the two instructions LWARX and STWCX to the PowerPC
1724    instruction set.
1725    
1726       A (untested) rewrite of loop-structure.sml.  The old version
1727    is completely broken.
1728    
1729    ----------------------------------------------------------------------
1730    Name: Matthias Blume (blume (at) tti - c (dot) org)
1731    Date: 2004/07/13 13:50:00 CDT
1732    Tag: blume-20040713-nlffi
1733    Description:
1734    
1735    - use paramAlloc to report c-calls with too many arguments
1736      (for PPC version where parameter area is pre-allocated)
1737    - added ccall_maxargspace to machspec (to implement the above)
1738    - made "make" commend in CM's "make" tool configurable
1739    - added option (default: on) for passing the name of the SML/NJ's "bin"
1740      directory to "make"; the call looks like this:
1741    
1742         make <options> SMLNJ_BINDIR=<dir> <target>
1743    
1744      This can be used by the Makefile to, e.g., pick the "right" version
1745      of ml-nlffigen.
1746    - minor code tweaks
1747    
1748    ----------------------------------------------------------------------
1749    Name: Matthias Blume (blume (at) tti - c (dot) org)
1750    Date: 2004/07/12 22:50:00 CDT
1751    Tag: blume-110_46_1-macosx-nlffi
1752    Description:
1753    
1754    NLFFI under Mac OS X now working (sort of).  This is largely untested,
1755    though.
1756    
1757    Note:  1. You have to make a new, clean build of the runtime system.
1758           2. There are new BOOTFILES, you have to use them!
1759              (Doing the bootstrap process yourself would be *very* painful!
1760               If you absolutely have to do it, build the system under
1761               a different architecture and then cross-compile.)
1762    
1763    Version bumped to 110.46.1 to account for runtime data format changes.
1764    
1765    ----------------------------------------------------------------------
1766    Name: Matthias Blume (blume (at) tti - c (dot) org)
1767    Date: 2004/06/18 14:30:00 CDT
1768    Tag: blume-20040618-unix
1769    Description:
1770    
1771    Changed the implementation of structure Unix so that the same stream
1772    is returned every time one of the {text,bin}{In,Out}streamOf functions
1773    is invoked on the same proc.  This is not what the spec currently
1774    says -- although IMO it arguably should.  (See discussion below.)
1775    
1776    ----------------------------------------------------------------------
1777    Name: Matthias Blume (blume (at) tti - c (dot) org)
1778    Date: 2004/06/17 18:15:00 CDT
1779    Tag: Release_110_46
1780    Description:
1781    
1782    New working version (110.46).  NEW BOOTFILES!
1783    
1784    ----------------------------------------------------------------------
1785    Name: Matthias Blume (blume (at) tti - c (dot) org)
1786    Date: 2004/06/17 17:20:00 CDT
1787    Tag: blume-20040617-timer-unix
1788    Description:
1789    
1790    Changed the interface of structures Timer and Unix to match the most
1791    recent Basis spec.
1792    
1793    In the case of Unix there still seems to be an open/weird issue:
1794    
1795       The {text,bin}{In,Out}streamOf functions are supposed to create
1796       fresh streams whenever they are called -- as opposed to have them
1797       return the same stream every time.  This design is supposed to
1798       prevent space leaks caused by proc values hanging on to streams.
1799    
1800       The reap function, on the other hand, is supposed to close the
1801       streams.  This cannot be done without having a handle on the
1802       stream in proc after all...
1803    
1804    I took the liberty to implement the following stopgap solution:
1805    
1806      The proc value hangs on to the most recently created stream(s).
1807      Reap closes those.  If either or both of the two streams hadn't
1808      been created at all yet, then reap will close the corresponding
1809      file descriptors directly.
1810    
1811    PS: I don't understand the original space leak argument anymore.  If
1812    a proc hangs on to the imperative stream, then I/O operations on those
1813    will advance the state of the cached stream and avoid the space leak.
1814    
1815    ----------------------------------------------------------------------
1816    Name: Matthias Blume (blume (at) tti - c (dot) org)
1817    Date: 2004/05/28 16:45:00 CDT
1818    Tag: blume-20040528-basis
1819    Description:
1820    
1821    Added signature PACK_REAL and exported functor PrimIO.
1822    
1823    ----------------------------------------------------------------------
1824    Name: Matthias Blume (blume (at) tti - c (dot) org)
1825    Date: 2004/05/25 16:00:00 CDT
1826    Tag: blume-20040525-group-owner
1827    Description:
1828    
1829    CM now ignores (but still accepts) the "owner" information in group
1830    descriptions.  The owner of a group is its next enclosing
1831    library. Each group must have a unique owner.  (There is a virtual
1832    "toplevel" library that owns groups which are not nested within a real
1833    library.)  Previously, each group had to explicitly declare its owner,
1834    and CM would check that such a declaration is correct.  The new scheme
1835    is to have CM check that for each group there is precisely one owning
1836    library.
1837    
1838    The advantage of the new scheme is that the programmer no longer needs
1839    to maintain the somewhat annoying owner information.  The downside is
1840    that CM cannot enforce the ownership rule across multiple runs of
1841    CM.make.  Fortunately, enclosing the same group in two different
1842    libraries A and B which are not part of the same program does not
1843    cause real problems.
1844    
1845    ----------------------------------------------------------------------
1846    Name: Matthias Blume (blume (at) tti - c (dot) org)
1847    Date: 2004/05/20 16:00:00 CDT
1848    Tag: blume-20040520-win32
1849    Description:
1850    
1851    Made the win32 version work again.  (Strangely, a misplaced comma had
1852    slipped into win32-process.c which prevented the runtime from being
1853    compiled correctly.)
1854    
1855    Also, included a minor addition to ml-build.bat analogous to what was
1856    done in blume-20040519-ml-build.
1857    
1858    ----------------------------------------------------------------------
1859    Name: Matthias Blume (blume (at) tti - c (dot) org)
1860    Date: 2004/05/19 22:10:00 CDT
1861    Tag: blume-20040519-ml-build
1862    Description:
1863    
1864    Arranged for ml-build to clean up after itself a little bit better.
1865    The script generates a temporary SML source file and compiles it using
1866    CM, so CM generates metadata (GUID, SKEL, objectfile) for it.  It now
1867    gets rid of those at the end, so they don't accumulate under .cm.
1868    
1869    This required a minor change to install.sh because the name of the
1870    metadata directory (default: .cm) is actually configurable at
1871    installation time.
1872    
1873    ----------------------------------------------------------------------
1874    Name: Matthias Blume (blume (at) tti - c (dot) org)
1875    Date: 2004/05/18 15:50:00 CDT
1876    Tag: blume-20040518-mkreader
1877    Description:
1878    
1879    Added Posix.IO.mk{Bin,Text}{Reader,Writer} by lifting their respective
1880    implementations from internal modules PosixBinPrimIO and PosixTextPrimIO.
1881    
1882    ----------------------------------------------------------------------
1883    Name: Matthias Blume (blume (at) tti - c (dot) org)
1884    Date: 2004/05/11 14:35:00 CDT
1885    Tag: blume-20040511-win32sock
1886    Description:
1887    
1888    Added previously missing support for many socket-related functions
1889    under win32.  Thanks to David Hansel <hansel@reactive-systems.com>
1890    for the voluminous patch!
1891    
1892    (I have not tested this patch under win32 yet.)
1893    
1894    Here is David's e-mail:
1895    
1896    Hi,
1897    
1898    Attached to this email you find a diff against sml/nj 110.45
1899    that will enable socket support under Windows.
1900    
1901    To apply the patch (using unix or cygwin)
1902    1) gunzip runtime.diff.gz
1903    2) "cd" into "src/runtime" in the source tree of a fresh
1904       110.45 installation.
1905    3) patch -p 1 < [your/path/to]runtime.diff
1906    
1907    The code compiles fine but has NOT yet been extensively tested.
1908    I only ran a few tests for basic socket client functionality
1909    (which worked fine).  Especially the functions that use ioctl
1910    are not tested at all and might not work (see below).
1911    
1912    I implemented this since we want to move to a newer version of sml/nj
1913    but need socket support in order to use it.  This is the first time I
1914    even had a look at the sml/nj source,  so please review my changes
1915    before making this part of the distribution!  Here are a few issues
1916    that I think might be better for someone to solve who is more
1917    familiar with the sml/nj source (and socket programming):
1918    
1919    - getnetbyaddr.c and getnetbyname.c will raise a "not implemented"
1920      exception since I could not figure out what the windows equivalent
1921      of these functions is
1922    
1923    - In sockets-osdep.h there are a some #include statements that are
1924      only used in a few files that include sockets-osdep.h
1925    
1926    - In smlnj-sock-lib.c, function init_fn() calls WSAStartup() but
1927      does not process its return value since I don't know how to
1928      report an error upwards.
1929    
1930    - It would probably be good to have a call to WSACleanup() when
1931      the library is unloaded (if there is such a possibility).
1932      Otherwise I think Windows will take care of this automatically
1933      when the process finishes.
1934    
1935    - I used ioctlsocket() as a replacement for ioctl() but I have
1936      no idea if that is actually the proper replacement on Windows.
1937    
1938    - All these issues are marked in the code by "FIXME" comments.
1939    
1940    We use sml/nj extensively in our products and are quite happy
1941    with it.  I hope this contribution will help you.
1942    
1943    Keep up the good work!
1944    
1945    David
1946    
1947    ----------------------------------------------------------------------
1948    Name: Matthias Blume (blume (at) tti - c (dot) org)
1949    Date: 2004/05/11 14:20:00 CDT
1950    Tag: blume-20040511-installml
1951    Description:
1952    
1953    Fixed two bugs in installml script.  (Thanks to Vesa A. Norrman for
1954    the patch.)
1955    
1956    ----------------------------------------------------------------------
1957    Name: Matthias Blume (blume (at) tti - c (dot) org)
1958    Date: 2004/05/11 14:05:00 CDT
1959    Tag: blume-20040511-nlffi-netbsd
1960    Description:
1961    
1962    Added support for nlffi under netbsd.  (Thanks to Vesa A. Norrman for
1963    the patch.)
1964    
1965    ----------------------------------------------------------------------
1966    Name: Matthias Blume (blume (at) tti - c (dot) org)
1967    Date: 2004/05/11 12:05:00 CDT
1968    Tag: blume-20040511-exports
1969    Description:
1970    
1971    As per request by Adam Chlipala <adam@hcoop.net>, extended various
1972    export lists in compiler-related .cm-files.
1973    
1974    ----------------------------------------------------------------------
1975    Name: Matthias Blume (blume (at) tti - c (dot) org)
1976    Date: 2004/05/11 11:35:00 CDT
1977    Tag: blume-20040511-allsource
1978    Description:
1979    
1980    The installer now honors the "src-smlnj" target again, although its meaning
1981    has changed from "all sources required for the compiler" to "all sources
1982    the installer knows about".  In other words, if you enable "src-smlnj"
1983    in the "targets" file, then the installer will pull in sources for
1984    everything.  (Notice that this refers to source code only.  Compiled
1985    code is still only installed for modules that were requested explicitly
1986    or which are required for other modules that were requested explicitly.)
1987    
1988    ----------------------------------------------------------------------
1989    Name: Matthias Blume (blume (at) tti - c (dot) org)
1990    Date: 2004/04/23 17:40:00 CDT
1991    Tag: blume-20040423-ieee-scan
1992    Description:
1993    
1994    Fixed IEEEReal.scan (and .fromString) so that if there is an overflow
1995    in the exponent calculation we get INF or ZERO (depending on the mantissa
1996    and the sign of the exponent).
1997    
1998    ----------------------------------------------------------------------
1999    Name: Matthias Blume (blume (at) tti - c (dot) org)
2000    Date: 2004/04/23 10:40:00 CDT
2001    Tag: blume-20040423-ml-build
2002    Description:
2003    
2004    The ml-build script now terminates with a non-0 status when something
2005    goes wrong.
2006    
2007    ----------------------------------------------------------------------
2008    Name: Matthias Blume (blume (at) tti - c (dot) org)
2009    Date: 2004/04/22 16:35:00 CDT
2010    Tag: blume-20040422-Option
2011    Description:
2012    
2013    Made exception Option to be the same as exception Option.Option
2014    (as it should be).
2015    
2016    ----------------------------------------------------------------------
2017    Name: Allen Leung (leunga (at) reservoir (dot) com)
2018    Date: 2004/03/19 14:40:00 EST
2019    Tag: leunga-20040319-cygwin-nlffi
2020    Description:
2021    
2022    Fixed the runtime so that ml-nlffi-lib runs on the cygwin version
2023    of SML/NJ.  The problem is that
2024    
2025       lib = dlopen(NULL, ...)
2026       f   = dlsym(lib, "malloc");
2027    
2028    does not work on Windows unless we explicitly export symbols
2029    such as 'malloc' during linking.  We fixed this by explicitly
2030    exporting the required symbols with the magic gcc incantation:
2031    
2032        -Wl,--export-all cygwin.def
2033    
2034    where cygwin.def is a file containing all the symbols that
2035    we wish to export.
2036    
2037    I suspect this is a Windows problem and we'll have to
2038    do the same (somehow with windows compilers) when
2039    we build the native win32 version with the system
2040    calls LoadLibrary/GetProcAddress.
2041    
2042    ----------------------------------------------------------------------
2043    Name: Matthias Blume (blume (at) tti - c (dot) org)
2044    Date: 2004/03/04 16:35:00 CST
2045    Tag: blume-20040304-intinf-fmt
2046    Description:
2047    
2048    Fixed problem with IntInf.fmt (sign would show up on the right instead
2049    of on the left for BIN, OCT, and HEX).
2050    
2051    ----------------------------------------------------------------------
2052    Name: Matthias Blume (blume (at) tti - c (dot) org)
2053    Date: 2004/03/04 11:25:00 CST
2054    Tag: blume-20040304-symlinks
2055    Description:
2056    
2057    Fixed problem with installer script (unix only) where bin/ml-yacc and
2058    friends pointed (via symlinks) to absolute locations instead of just
2059    .run-sml.  This was reported by Vesa A Norrman.
2060    
2061    ----------------------------------------------------------------------
2062    Name: Matthias Blume (blume (at) tti - c (dot) org)
2063    Date: 2004/02/13 14:50:00 CST
2064    Tag: Release_110_45
2065    Description:
2066    
2067    New working version (110.45). New bootfiles.
2068    
2069    ----------------------------------------------------------------------
2070    Name: Matthias Blume (blume (at) tti - c (dot) org)
2071    Date: 2004/01/26 15:15:15 CST
2072    Tag: blume-20040126-toplevel
2073    Description:
2074    
2075    Improved handling of exceptions at the interactive toplevel.
2076    
2077    ----------------------------------------------------------------------
2078    Name: Matthias Blume (blume (at) tti - c (dot) org)
2079    Date: 2004/01/26 11:25:00
2080    Tag: blume-20040126-app
2081    Description:
2082    
2083    Type of top-level "app" corrected.
2084    Added code for setting vp_limitPtrMask to Win32-specific runtime.
2085    
2086    ----------------------------------------------------------------------
2087    Name: Matthias Blume (blume (at) tti - c (dot) org)
2088    Date: 2003/11/18 17:10 CST
2089    Tag: blume-20031118-basis-fiddle
2090    Description:
2091    
2092    - changed Timer interface to what might become the spec
2093    - POSIX_FLAGS -> BIT_FLAGS according to spec
2094    - some other minor discrepancies wrt. spec eliminated
2095    
2096    ----------------------------------------------------------------------
2097    Name: Matthias Blume (blume (at) tti - c (dot) org)
2098    Date: 2003/11/06 12:00:00 CST
2099    Tag: Release_110_44
2100    Description:
2101    
2102    New working version (110.44). New bootfiles.
2103    
2104    ----------------------------------------------------------------------
2105    Name: Matthias Blume (blume (at) tti - c (dot) org)
2106    Date: 2003/11/04 11:50:00 CST
2107    Tag: blume-20031104-move-libraries
2108    Description:
2109    
2110    Eliminated the "dont_move_libraries" directive in config/targets.
2111    (The mechanism was broken and could not be fixed easily.  Moreover,
2112    there does not seem to be any reason not to move all libraries into
2113    lib during installation.  I originally implemented this directive as a
2114    backward-compatibility feature when I first introduced the new CM.
2115    Now that things have been stable for a long time and going back to the
2116    old CM is not an option, there is no reason to keep it around.)
2117    
2118    ----------------------------------------------------------------------
2119    Name: Matthias Blume (blume (at) tti - c (dot) org)
2120    Date: 2003/11/03 16:00:00 CST
2121    Tag: blume-20031103-installdir
2122    Description:
2123    
2124    Made installer honor INSTALLDIR variable again.  (Thanks to Chris
2125    Richards for pointing out the problem and providing the solution.)
2126    
2127    ----------------------------------------------------------------------
2128    Name: Matthias Blume (blume (at) tti - c (dot) org)
2129    Date: 2003/10/01 17:05:00 CDT
2130    Tag: blume-20031001-lal-mlrisc
2131    Description:
2132    
2133    MLRISC bug fix from Lal.
2134    
2135    ----------------------------------------------------------------------
2136    Name: Matthias Blume (blume (at) tti - c (dot) org)
2137    Date: 2003/09/30 16:10:00 CDT
2138    Tag: blume-20030930-primio-bat
2139    Description:
2140    
2141    1. Added openVector, nullRd, and nullWr to PRIM_IO.
2142    2. Improved .bat files (for Win32 port) to make things work under Win95.
2143       (thanks to Aaron S. Hawley for this one)
2144    
2145    ----------------------------------------------------------------------
2146    Name: Matthias Blume (blume (at) tti - c (dot) org)
2147    Date: 2003/09/26 16:05:00 CDT
2148    Tag: blume-20030926-wrappriv
2149    Description:
2150    
2151    Added missing wrapper for privilege "primitive" in $smlnj/viscomp/core.cm.
2152    
2153    ----------------------------------------------------------------------
2154    Name: Matthias Blume (blume (at) tti - c (dot) org)
2155    Date: 2003/09/26 15:00:00 CDT
2156    Tag: blume-20030926-110_43_3
2157    Description:
2158    
2159    - additional cleanup
2160    - version number bump, NEW BOOTFILES
2161    
2162    ----------------------------------------------------------------------
2163    Name: Matthias Blume (blume (at) tti - c (dot) org)
2164    Date: 2003/09/26 12:00:00 CDT
2165    Tag: blume-20030926-ppautoload
2166    Description:
2167    
2168    I modified the read-eval-print loop so that the autoloader gets
2169    invoked whenever the prettyprinter tries to look up a symbol that
2170    is not currently defined in the toplevel environment but which
2171    appears in CM's autoload registry.  As a result, we see far fewer of
2172    those ?.Foo.Bar.xxx names in the prettyprinter's output.
2173    
2174    In addition to this I tried to clean up some pieces of the Basis
2175    implementation (e.g., Socket, Word8Array) in order to prevent other
2176    instances of these ?.Foo.Bar.xxx names from being printed.
2177    
2178    The mechanism that picks names for types still needs some work, though.
2179    (Right now it seems that if there is a type A.t which is defined to
2180    be B.u, but B is unavailable at toplevel, then A.t gets printed as
2181    "?.B.u" although the perhaps more sensible solution would be to use
2182    "A.t" in this case.  In other words, the prettyprinter should follow
2183    a chain of DEFtycs not farther than there are corresponding toplevel
2184    names in the current environment.)
2185    
2186    ----------------------------------------------------------------------
2187    Name: Matthias Blume (blume (at) tti - c (dot) org)
2188    Date: 2003/09/24 16:31:00 CDT
2189    Tag: blume-20030924-installer
2190    Description:
2191    
2192    Another installer tweak:  All the ML code for the installer is now
2193    compiled during CMB.make and put into a little library called
2194    $smlnj/installer.cm.  The installation then simply invokes
2195    
2196       sml -m $smlnj/installer.cm
2197    
2198    and everything happens automagically.
2199    
2200    Win32:  ML code senses value of environment variable SMLNJ_HOME.
2201    Unix:   ML code senses values of environment variables ROOT, CONFIGDIR,
2202            and BINDIR.
2203    
2204    The new scheme guarantees that the ML code responsible for the installation
2205    is in sync with the APIs of the main system.  Also, the installer is
2206    somewhat faster because the installer script is precompiled.
2207    
2208    ----------------------------------------------------------------------
2209    Name: Matthias Blume (blume (at) tti - c (dot) org)
2210    Date: 2003/09/24 15:35:00 CDT
2211    Tag: blume-20030924-synsock
2212    Description:
2213    
2214    Added a signature SYNCHRONOUS_SOCKET to basis.cm.  This is like SOCKET
2215    but excludes all non-blocking operations.  Defined SOCKET (in Basis)
2216    and CML_SOCKET in terms of SYNCHRONOUS_SOCKET.  Removed superfluous
2217    implementations of non-blocking operations from CML's Socket
2218    structure.
2219    
2220    ----------------------------------------------------------------------
2221    Name: Matthias Blume (blume (at) tti - c (dot) org)
2222    Date: 2003/09/24 15:10:05 CDT
2223    Tag: blume-20030924-sockets
2224    Description:
2225    
2226    1. Fixed SOCKET API and implementation to match Basis spec.
2227       This required changing the internal representation of sockets to one
2228       that remembers (for each socket file descriptor) whether it is currently
2229       blocking or non-blocking.  This state is maintained lazily (i.e., a system
2230       call is made only if the state actually needs to change).
2231    
2232    2. OS-specific details of sockets were moved into separate files, thus
2233       making it possible to unify the bulk of the socket implementations
2234       between Unix and Win32.
2235    
2236    3. CML's socket API changed accordingly.
2237       (Note that we need to remove non-blocking functions from this API
2238       since they are redundant in the case of CML!)
2239    
2240    4. CML's socket implementation now makes use of non-blocking functions
2241       provided by Basis, thus removing all OS-dependent code from this part
2242       of CML.
2243    
2244    5. Changed Real64.precision from 52 to 53.  Minor cleanup in Real64 code.
2245    
2246    ----------------------------------------------------------------------
2247    Name: Matthias Blume (blume (at) tti - c (dot) org)
2248    Date: 2003/09/22 12:10:00 CDT
2249    Tag: blume-20030922-110_43_2
2250    Description:
2251    
2252    Made a new interim version and bootfiles for developer's bootstrapping
2253    convenience.
2254    
2255       110.43.2 -- NEW BOOTFILES
2256    
2257    ----------------------------------------------------------------------
2258    Name: Matthias Blume (blume (at) tti - c (dot) org)
2259    Date: 2003/09/19 15:55:00 CDT
2260    Tag: blume-20030919-cmdir
2261    Description:
2262    
2263    1. new-install.sh -> install.sh
2264    2. changed default CM "metadata" directory name to ".cm" (instead of "CM")
2265    3. tweaked installer so that another name instead of .cm can be chosen
2266       at install time (by setting the CM_DIR_ARC environment variable
2267       during installation); once installation is complete, the name is
2268       fixed
2269    
2270    ----------------------------------------------------------------------
2271    Name: Matthias Blume (blume (at) tti - c (dot) org)
2272    Date: 2003/09/18 16:00:00 CDT
2273    Tag: blume-20030918-110_43_1
2274    Description:
2275    
2276    Made a new interim version and bootfiles for developer's bootstrapping
2277    convenience.
2278    
2279       110.43.1 -- NEW BOOTFILES
2280    
2281    ----------------------------------------------------------------------
2282    Name: Matthias Blume (blume (at) tti - c (dot) org)
2283    Date: 2003/09/18 15:20:00 CDT
2284    Tag: blume-20030918-misc
2285    Description:
2286    
2287    1. Exported fractionsPerSecond etc. from TimeImp (but not from Time as
2288       this seems to be controversial at the moment) and used those in
2289       Posix.ProcEnv.times.
2290    
2291    2. Added Time.{from,to}Nanoseconds to Time.
2292    
2293    3. Improved Real.{from,to}LargeInt by avoiding needless calculations.
2294       For example, fromLargeInt never needs to look at more than 3 "big
2295       digits" to get its 53 bits of precision.
2296    
2297    ----------------------------------------------------------------------
2298    Name: Matthias Blume (blume (at) tti - c (dot) org)
2299    Date: 2003/09/17 16:30:00 CDT
2300    Tag: blume-20030917-real32-slices
2301    Description:
2302    
2303    Added an entry to the primitive environment
2304    (compiler/Semant/statenv/prim.sml) for int32->real64 conversion and
2305    added code to compiler/CodeGen/main/mlriscGen.sml to implement it.
2306    
2307    Removed some of the "magic" constants in real64.sml and replaced them
2308    with code that generates these values from their corresponding
2309    integer counterparts.
2310    
2311    Made all(?) the slice-related changes to the Basis and made everything
2312    compile again...
2313    
2314    ----------------------------------------------------------------------
2315    Name: Matthias Blume (blume (at) tti - c (dot) org)
2316    Date: 2003/09/15 17:45:00 CDT
2317    Tag: blume-20030915-rbase
2318    Description:
2319    
2320    Fixed bug in Real.fromLargeInt.
2321    
2322    ----------------------------------------------------------------------
2323    Name: Matthias Blume (blume (at) tti - c (dot) org)
2324    Date: 2003/09/13 18:11:00 CDT
2325    Tag: blume-20030913-libinstall
2326    Description:
2327    
2328    Minor bugfix in config/libinstall (set anchor with path to
2329    standalone tool after installing it, otherwise libraries that
2330    need ml-lex or ml-yacc won't compile the first time the installer
2331    runs).
2332    
2333    ----------------------------------------------------------------------
2334    Name: Matthias Blume (blume (at) tti - c (dot) org)
2335    Date: 2003/09/12 11:45:00 CDT
2336    Tag: blume-20030912-various
2337    Description:
2338    
2339     - fixed bug in Real.toLargeInt
2340     - fixed bug in Posix.ProcEnv.times
2341     - changed inputLine functions to return an option
2342     - minor installer improvements / bugfixes
2343     - changed default @SMLalloc parameter for x86/celeron to 64k
2344    
2345    ----------------------------------------------------------------------
2346    Name: Matthias Blume (blume (at) tti - c (dot) org)
2347    Date: 2003/09/09 22:00:00 CDT
2348    Tag: Release_110_43
2349    Description:
2350    
2351        New working release 110.43.  New bootfiles.
2352    
2353    ----------------------------------------------------------------------
2354    Name: Matthias Blume (blume (at) tti - c (dot) org)
2355    Date: 2003/09/09 19:20:00 CDT
2356    Tag: blume-20030909-installer
2357    Description:
2358    
2359    Rewrote large parts of config/install.sh in SML (config/libinstall.sml).
2360    Modified config/install.bat to take advantage of it.  Also modified
2361    config/install.sh (and called it config/new-install.sh) to take advantage
2362    of it on Unix systems.  (The SML code is (supposed to be) platform-
2363    independent.)
2364    
2365    The installer can now install everything under Win32
2366    as well as under *nix as long as it compiles.
2367    
2368    Other changes:
2369    
2370      - made CML compile again under Win32
2371      - made eXene compile under Win32 (by providing a fake structure UnixSock
2372        and by using OS.Process.getEnv instead of Posix.ProcEnv.getenv)
2373      - fixed a bug in nowhere: it assumed that type OS.Process.status is the
2374        same as type int;  under Win32 it isn't
2375      - fixed some slice-related problems in the win32-specific parts of CML
2376      - added a functor argument "sameVol" to os-path-fn.sml in the Basis
2377        (under Win32, the volume name is case-insensitive, and the
2378        OS.Path code compares volume names for equality)
2379    
2380    ----------------------------------------------------------------------
2381    Name: Matthias Blume (blume (at) tti - c (dot) org)
2382    Date: 2003/09/08 11:55:00 CDT
2383    Tag: blume-20030908-fullpath
2384    Description:
2385    
2386    Made Win32 version of OS.FileSys.fullPath return current directory
2387    when given an empty string.  This is what the spec says, and incidentally,
2388    CM depends on it.  (CM otherwise goes into an infinite loop in certain
2389    cases when presented with the name of a non-existing .cm file.)
2390    
2391    ----------------------------------------------------------------------
2392    Name: Matthias Blume (blume (at) tti - c (dot) org)
2393    Date: 2003/09/04 16:30:00 CDT
2394    Tag: blume-20030905-slices-etc
2395    Description:
2396    
2397      1. Changed interface to vectors and arrays in Basis to match
2398         (draft) Basis spec.
2399      2. Added signatures and implementations of slices according to
2400         Basis spec.
2401      3. Edited source code throughout the system to make it compile again
2402         under 1. and 2.  (In some cases code had to be added to have it
2403         match the new signatures.)
2404      4. MLRISC should be backward-compatible: the copies of the originals
2405         of files that needed to change under 3. were retained, the .cm files
2406         check the compiler version number and use old versions when
2407         appropriate.
2408      5. Changed type of OS.FileSys.readDir and Posix.FileSys.readdir to
2409         dirstream -> string option (in accordance with Basis spec).
2410      6. When generating code that counts lines, ml-lex used function
2411         CharVector.foldli, taking advantage of its old interface.
2412         This has been replaced with the corresponding code from
2413         CharVectorSlice.  (html-lex must be re-lexed!)
2414      7. BitArray in smlnj-lib/Util has been extended/modified to match the
2415         new MONO_ARRAY signature.  (Do we need BitArraySlice?)
2416      8. Removed temporary additions (fromInternal, toInternal) from the
2417         (now obsolete) IntInf in smlnj-lib/Util.
2418      9. Cleaned up structure Byte.
2419     10. Added localOffset, scan, and fromString to Date (according to spec).
2420         Cleaned/corrected implementation of Date.
2421         (Still need to check for correctness; implement better canonicalizeDate.)
2422     11. Added "scan" to signature IEEE_REAL.
2423     12. Some improvements to IntInf [in particular: efficiency-hack for
2424         mod and rem when second operand is 2 (for parity checks).]
2425     13. Changed representation of type Time.time, using a single IntInf.int
2426         value counting microseconds.  This considerably simplified the
2427         implementation of structure Time.  We now support negative time
2428         values; scan and fromString handle signs.
2429     14. Functor PrimIO now takes two additional arguments (VectorSlice and
2430         ArraySlice).
2431    
2432    ----------------------------------------------------------------------
2433    Name: Matthias Blume (blume (at) tti - c (dot) org)
2434    Date: 2003/08/28 17:00:00 CDT
2435    Tag: blume-20030828-intinf
2436    Description:
2437    
2438    This is a major update which comes with a version number bump
2439    (110.42.99 -- yes, we are really close to 110.43 :-), NEW BOOTFILES,
2440    and an implementation of IntInf in the Basis.
2441    
2442    There are a fairly large number of related changes and updates throughout
2443    the system:
2444    
2445    Basis:
2446            - Implemented IntInf.
2447            - Made LargeInt a projection of IntInf (by filtering through INTEGER).
2448            - Added some missing Real64 operations, most notably Real.toLargeInt.
2449            - Added FixedInt as a synonym for Int32.
2450    
2451    compiler:
2452            * Added support for a built-in intinf type.
2453              - literals
2454              - pattern matching
2455              - conversion shortcuts (Int32.fromLarge o Int.toLarge etc.)
2456              - overloading on literals and operations
2457    
2458            This required adding a primitive type intinf, some additional
2459            primops, and implementations for several non-trivial intinf
2460            operations in Core.  (The intinf type is completely abstract
2461            to the compiler; all operations get delegated back to the Core.)
2462    
2463            * Intinf equality is handled by polyequal.  However, the compiler
2464            does not print its usual warning in this case (since polyequal
2465            is the right thing to do there).
2466    
2467            * Improved the organization of structure InlineT.
2468    
2469            * A word about conversion primops:
2470            If conversions involving intinf do not cancel out during
2471            CPS contract, then the compiler must insert calls to Core functions.
2472            Since all core access must be resolved already during the FLINT
2473            translate phase, it would be too late a the time of CPS contract
2474            to add new Core calls.  For this reason, conversion primops
2475            for intinf carry two arguments:  1. the numeric argument that
2476            they are supposed to convert, and 2. the Core function that
2477            can help with this conversion if necessary.  If CPS contract
2478            eliminates a primop, then the associated Core function becomes
2479            dead and goes away.  Intinf conversion primops that do not get
2480            eliminated by CPS contract get rewritten into calls of their
2481            core functions by a separate, new phase.
2482    
2483    interactive system:
2484            - Control.Print.intinfDepth controls max length of intinf constants
2485            being printed. (Analogous to Control.Print.stringDepth.)
2486            - Cleanup in printutil and pputil: got rid of unused stuff and
2487            duplicates; replaced some of the code with code that makes better
2488            use of library functionality.
2489    
2490    CM:
2491            Bugfix: parse-errors in init group (system/smlnj/init/init.cmi)
2492            are no longer silent.
2493    
2494    CKIT:
2495            Fixed mismatched uses of Int32 and LargeInt.  I always decided
2496            in favor of LargeInt -- which is now the same as IntInf.
2497            CKIT-knowledgable people should check whether this is what's
2498            intended and otherwise change things back to using Int32 or
2499            FixedInt.
2500    
2501    Throughout the code:
2502            Started using IntInf.int literals and built-in operations
2503            (e.g., comparison with 0) where this seems appropriate.
2504    
2505    
2506    ----------------------------------------------------------------------
2507    Name: Dave MacQueen (dbm@cs.uchicago.edu)
2508    Date: 2003/08/13 11:36:00 CDT
2509    Tag: dbm-20030813-mcz-merge1
2510    Description:
2511    
2512    Merging changes from the mcz-branch development branch into trunk.
2513    These changes involve replacement of the emulated old prettyprinter
2514    interface with direct use of the SML/NJ Lib PP library, and fixing
2515    of a couple of bugs (895, 1186) relating to error messages.  A new
2516    prettyprinter for ast datatypes (Elaborator/print/ppast.{sig,sml})
2517    has been added.
2518    
2519    ----------------------------------------------------------------------
2520    Name: Matthias Blume (blume (at) tti - c (dot) org)
2521    Date: 2003/08/11 15:45:00 CDT
2522    Tag: blume-20030811-windows
2523    Description:
2524    
2525    Version number bumped to 110.42.9.  NEW BOOTFILES!!!
2526    
2527        http://smlnj.cs.uchicago.edu/dist/working/110.42.9/
2528    
2529    This patch restores SML/NJ's ability to run under win32.  There are a
2530    number of changes, including fixes for several bugs that had gone
2531    unnoticed until now:
2532    
2533      - uname "CYGWIN_NT*" is recognized as win32 (This is relevant only when
2534        trying to run the win32 version from within cygwin.)
2535    
2536      - There are a number of simple .bat scripts that substitute for their
2537        corresponding Unix shell-scripts.  (See below.)
2538    
2539      - The internals of ml-build have been modified slightly.  The main
2540        difference is that instead of calling ".link-sml" (or link-sml.bat)
2541        using OS.Process.system, the ML process delegates this task back
2542        to the script.  Otherwise problems arise in mixed environments such
2543        as Cygwin where scripts look and work like Unix scripts, but
2544        where OS.Process.system cannot run them.
2545    
2546      - In CM, the srcpath pickler used native pathname syntax -- which
2547        is incorrect in the case of cross-compilation.  The new pickle format
2548        is independent of platform-specific naming conventions.
2549    
2550      - Path configuration files (such as lib/pathconfig) can now choose
2551        between native and standard syntax.  Placing a line of the form
2552    
2553            standard!
2554    
2555        into the file causes all subsequent paths to be interpreted using
2556        CM standard pathname syntax (= Unix conventions); a line
2557    
2558            native!
2559    
2560        switches back to native style.  This was needed so that
2561        path config files can be written portably, see src/system/pathconfig.
2562    
2563      - Runtime system:
2564    
2565          - win32-filesys.c:  get_file_time and set_file_time now
2566            access modification time, not creation time.
2567    
2568          - I/O code made aware of new array representation.
2569    
2570          - Bug fixes in X86.prim.masm.
2571    
2572       - src/system/makeml made aware of win32. (For use under cygwin
2573            and other Unix-environments for windows.)
2574    
2575       - In Basis, fixed off-by-one error in win32-io.sml (function vecF)
2576         which caused BinIO.inputAll to fail consistently.
2577    
2578    .bat scripts:
2579    
2580       Windows .bat scripts assume that SMLNJ_HOME is defined.
2581    
2582       - sml.bat, ml-yacc.bat, ml-lex.bat:  Driver scripts for standalone
2583         applications (sml, ml-yacc, ml-lex).
2584       - ml-build.bat: analogous to ml-build.
2585       - config\install.bat:  Analogous to config/install.sh.  This requires
2586         that SMLNJ_HOME is set and that Microsoft Visual C is ready to use.
2587         (nmake etc. must be on the path, and vcvars32 must have been run.)
2588         Moreover, sources for ml-lex and ml-yacc need to exist under src,
2589         and the bootfile hierarchy must have been unpacked under
2590         sml.boot.x86-win32.
2591         The script is very primitive and does a poor job at error checking.
2592         It only installs the base system, ml-lex, and ml-yacc.  No other
2593         libraries are being installed (i.e., you get only those that
2594         are part of the compiler.)
2595       - link-sml.bat:  analogous to .link-sml, but not currently used
2596    
2597    Unrelated bug fixes:
2598    
2599      - ml-nlffigen now exports structures ST_* corresponding to incomplete
2600        types.
2601      - Added getDevice to PP/src/pp-debug-fn.sml.  (Would not compile
2602        otherwise.)
2603    
2604    ----------------------------------------------------------------------
2605    Name: Dave MacQueen (macqueen@cs.uchicago.edu)
2606    Date: 2003/06/17
2607    Tag: macqueen-20030617-bug895
2608    Description:
2609    
2610    Modified compiler/Elaborator/print/pptype.sml to fix bug 895.
2611    Tag will be used for new development branch (mcz-branch) for
2612    use by MacQueen, (Lucasz) Zairek, and (George) Cao at uchicago.
2613    
2614    ----------------------------------------------------------------------
2615    Name: Matthias Blume (blume (at) tti - c (dot) org)
2616    Date: 2003/05/27 16:55:00 CDT
2617    Tag: blume-20030527-polyeq
2618    Description:
2619    
2620    Tried to eliminated most cases of polymorphic equality.
2621    
2622    ----------------------------------------------------------------------
2623    Name: Matthias Blume (blume (at) tti - c (dot) org)
2624    Date: 2003/05/21 17:45:00 CDT
2625    Tag: blume-20030517-complete
2626    Description:
2627    
2628    Two changes:
2629    
2630      1. Added a flag for controlling whether non-exhaustive bindings will
2631         be treated as errors (default is false).
2632      2. Cleaned up the *entire* source tree so that CMB.make goes through
2633         without a single non-exhaustive match- or bind warning.
2634    
2635    ----------------------------------------------------------------------
2636    Name: Matthias Blume (blume (at) tti - c (dot) org)
2637    Date: 2003/05/17 10:20:00 CDT
2638    Tag: blume-20030517-absyn
2639    Description:
2640    
2641    1. Added cases for IF, WHILE, ANDALSO, and ORELSE to Absyn.
2642    
2643       This mainly affects the quality of error messages.  However, some
2644       of the code is now more straightforward than before. (Treatment of
2645       the above four constructs in translate.sml is much simpler than
2646       the "macro-expansion" that was going on before.  Plus, the mach-
2647       compiler no longer gets invoked just to be able to compile an
2648       if-expression.)
2649    
2650    2. The ErrorMsg.Error exception is now caught and absorbed by the
2651       interactive loop.
2652    
2653    ----------------------------------------------------------------------
2654    Name: Allen Leung
2655    Date: 2003/05/16 13:05:00 CDT
2656    Tag: leunga-20030516-cygwin-runtime
2657    Description:
2658    
2659        Ported the runtime system to cygwin, which uses the unix
2660    x86-unix bin files.  Missing/buggy features:
2661    
2662       o getnetbyname, getnetbyaddr: these functions seem to be missing in
2663         the Cygwin library.
2664       o Ctrl-C handling may be flaky.
2665       o Windows system calls and Windows I/O are not supported.
2666    
2667       A new set of binfiles is located at:
2668    
2669         http://www.dorsai.org/~leunga/boot.x86-unix.tgz
2670    
2671       This is only needed for bootstrapping the cygwin version of smlnj.
2672       Other x86 versions can use the existing binfiles.
2673    
2674    ----------------------------------------------------------------------
2675    Name: Matthias Blume
2676    Date: 2003/04/08 15:42:00 CDT
2677    Tag: blume-20030408-listpair
2678    Description:
2679    
2680    1. Added a target 'mlrisc' to installer.
2681    
2682    2. Added missing elements to structure ListPair.
2683    
2684    ----------------------------------------------------------------------
2685    Name: Allen Leung
2686    Date: 2003/01/07 10:40:00 EST
2687    Tag: leunga-20030107-int-rem
2688    Description:
2689    
2690    Fixed a bug in Int.rem(x,y) where y is a power of 2 on x86.
2691    The arguments to the SUBL instruction were swapped.
2692    
2693    ----------------------------------------------------------------------
2694    Name: Matthias Blume
2695    Date: 2002/12/12 16:25:00 EST
2696    Tag: blume-20021212-risc-ra
2697    Description:
2698    
2699    Fixed a serious bug in the rewrite code for FP spilling/reloading that
2700    sent the RA into an infinite loop when floating point registers get
2701    spilled.  (Because of this bug, e.g., nucleic stopped compiling between
2702    110.37 and 110.38.)
2703    There was another set of potential problems related to the handling of
2704    MLRISC annotations (but those did not yet cause real problems, apparently).
2705    
2706    ----------------------------------------------------------------------
2707    Name: Matthias Blume
2708    Date: 2002/12/06 22:40:00 EST
2709    Tag: blume-20021206-cm-fileid
2710    Description:
2711    
2712    Added a call of SrcPath.sync at the beginning of Parse.parse (in CM).
2713    This fixes the problem of CM getting confused by files that suddenly
2714    change their identity (e.g., by getting unlinked and recreated by some
2715    text editor such as vi).  There might be a better/cheaper/cleaner way
2716    of doing this, but for now this will have to do.
2717    
2718    ----------------------------------------------------------------------
2719    Name: Matthias Blume
2720    Date: 2002/10/28 09:50:00 EST
2721    Tag: blume-20021028-typecheck
2722    Description:
2723    
2724    Exported structure Typecheck from $smlnj/viscomp/core.cm.
2725    
2726    ----------------------------------------------------------------------
2727    Name: Matthias Blume
2728    Date: 2002/10/17 09:10:00 EDT
2729    Tag: Release_110_42
2730    Description:
2731    
2732    In good old tradition, there has been a slight hiccup so that we have
2733    to patch 110.42 after the fact.   The old release tag has been replaced
2734    (see below).
2735    
2736    The change solves a problem with two competing approaches the
2737    configuration problem regarding MacOS 10.1 vs. MacOS 10.2 which got in
2738    each other's way.
2739    
2740    This change only affects the runtime system code and the installer script.
2741    (No new bootfiles.)
2742    
2743    ----------------------------------------------------------------------
2744    Name: Matthias Blume
2745    Date: 2002/10/16 12:00:00 EDT
2746    Tag: Release_110_42_removed
2747    Description:
2748    
2749    New working release.  New bootfiles.
2750    
2751    ----------------------------------------------------------------------
2752    Name: Matthias Blume
2753    Date: 2002/10/10 13:10:00 EDT
2754    Tag: blume-20021010-ppc-divs
2755    Description:
2756    
2757    The mltree operator DIVS must be implemented with an overflow check on
2758    the PPC because the hardware indicates divide-by-zero using "overflow" as
2759    well.
2760    
2761    ----------------------------------------------------------------------
2762    Name: Matthias Blume
2763    Date: 2002/07/23 11:45:00
2764    Tag: blume-20020723-smlnj-home
2765    Description:
2766    
2767    Sml now senses the SMLNJ_HOME environment variable.  If this is set,
2768    then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless
2769    CM_PATHCONFIG is also set), the path configuration file is assumed
2770    to be in $SMLNJ_HOME/lib/pathconfig.  This way one can easily move
2771    the entire tree to some other place and everything will "just work".
2772    
2773    (Companion commands such as ml-build and ml-makedepend also sense this
2774    variable.)
2775    
2776    ----------------------------------------------------------------------
2777    Name: Matthias Blume
2778    Date: 2002/07/12 21:19:00 EDT
2779    Tag: blume-20020712-liveness
2780    Description:
2781    
2782    Exported two useful "step" functions from liveness module (MLRISC).
2783    
2784    ----------------------------------------------------------------------
2785    Name: Matthias Blume
2786    Date: 2002/07/05 16:00 EDT
2787    Tag: Release_110_41
2788    Description:
2789    
2790    New working release.  New bootfiles.
2791    
2792    ----------------------------------------------------------------------
2793    Name: Matthias Blume
2794    Date: 2002/07/05 10:25:00 EDT
2795    Tag: blume-20020705-btimp
2796    Description:
2797    
2798    Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that
2799    other clients can set up backtracing support.
2800    
2801    ----------------------------------------------------------------------
2802    Name: Matthias Blume
2803    Date: 2002/06/25 17:23:00 EDT
2804    Tag: blume-20020625-fpmax
2805    Description:
2806    
2807    Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point
2808    case.  (The sense of the isNaN test was reversed -- which made min and
2809    max always return their first argument.)
2810    
2811    ----------------------------------------------------------------------
2812    Name: Matthias Blume
2813    Date: 2002/06/11
2814    Tag: blume-20020611-unixpath
2815    Description:
2816    
2817    Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch.
2818    
2819    ----------------------------------------------------------------------
2820    Name: Matthias Blume
2821    Date: 2002/06/10 16:35:00 EDT
2822    Tag: blume-20020610-ieeereal
2823    Description:
2824    
2825    I back-ported my implementation of IEEEReal.fromString from the
2826    idlbasis-devel branch so that we can test it.
2827    
2828    Another small change is that ppDec tries to give more information
2829    than just "<sig>" in the case of functors.  However, this code is
2830    broken in some mysterious way if the functor's body's signature
2831    has not been declared by ascription but gets inferred from the
2832    implementation.  This needs fixing...
2833    
2834    ----------------------------------------------------------------------
2835    Name: Matthias Blume
2836    Date: 2002/05/31
2837    Tag: blume-20020531-btrace-mode
2838    Description:
2839    
2840    Resurrected SMLofNJ.Internals.BTrace.mode.  (It accidentally fell by
2841    the wayside when I switched over to using Controls everywhere.)
2842    
2843    ----------------------------------------------------------------------
2844    Name: Lal George
2845    Date: 2002/05/23 12:21:40 EDT
2846    Tag: george-20020523-visual-labels
2847    Description:
2848    
2849    Labels are now displayed in the graphical output to make
2850    the fall-through and target blocks obvious.
2851    
2852    ----------------------------------------------------------------------
2853    Name: Matthias Blume
2854    Date: 2002/05/22 11:03:00 EDT
2855    Tag: blume-20020522-shrink
2856    Description:
2857    
2858    John tweaked yesterday's fix for 1131 to handle an out-of-memory
2859    situation that comes up when allocating huge arrays.
2860    
2861    ----------------------------------------------------------------------
2862    Name: Matthias Blume
2863    Date: 2002/05/21 16:00:00 EDT
2864    Tag: Release_110_40
2865    Description:
2866    
2867    New working release (110.40).  New bootfiles.
2868    
2869    [Also: John Reppy fixed GC bug 1131.]
2870    
2871    ----------------------------------------------------------------------
2872    Name: Matthias Blume
2873    Date: 2002/05/21 12:35:00 EDT
2874    Tag: blume-20020521-cmdoc
2875    Description:
2876    
2877    CM documentation update.
2878    
2879    ----------------------------------------------------------------------
2880    Name: Matthias Blume
2881    Date: 2002/05/21 10:55:00 EDT
2882    Tag: blume-20020521-misc
2883    Description:
2884    
2885    - John tweaked runtime to be silent on heap export (except when
2886      GC messages are on).
2887    - I added a few more things (cross-compiling versions of CMB) to
2888      config/preloads (as suggestions).
2889    
2890    ----------------------------------------------------------------------
2891    Name: Matthias Blume
2892    Date: 2002/05/20 22:25:00 EDT
2893    Tag: blume-20020520-controls
2894    Description:
2895    
2896    - Added ControlUtil structure to control-lib.cm.
2897    - Use it throughout.
2898    - Used Controls facility to define MLRISC controls (as opposed to
2899      registering MLRISC control ref cells with Controls after the fact)
2900    - Fixed messed-up controls priorities.
2901    
2902    * Removed again all the stuff from config/preloads that one wouldn't
2903      be able to preload at the time the initial heap image is built.
2904      (Many libraries, e.g., CML, do not exist yet at this time.  The
2905       only libraries that can be preloaded via config/preloads are those
2906       that come bundled with the bootfiles.)
2907    
2908    ----------------------------------------------------------------------
2909    Name: Matthias Blume
2910    Date: 2002/05/20 10:59:00 EDT
2911    Tag: blume-20020520-preloads
2912    Description:
2913    
2914    Added a lot of commented-out suggestions for things to be included
2915    in config/preloads.
2916    
2917    ----------------------------------------------------------------------
2918    Name: Allen Leung
2919    Date: 2002/05/18 14:20:00 EDT
2920    Tag: leunga-20020518-mdl
2921    Description:
2922    
2923    o Made the mdl tool stuff compile and run again.
2924    o I've disabled all the stuff that depends on RTL specifications; they
2925      are all badly broken anyway.
2926    
2927    ----------------------------------------------------------------------
2928    Name: Matthias Blume
2929    Date: 2002/05/17 16:49:00 EDT
2930    Tag: blume-20020517-controls
2931    Description:
2932    
2933    0. John Reppy made several modifications to the SML/NJ library.
2934       In particular, there is a shiny new controls-lib.cm.
2935    
2936    1. Pushed new controls interface through compiler so that everything
2937       compiles again.
2938    
2939    2. Added FormatComb and FORMAT_COMB to the CML version of the
2940       SML/NJ library (so that CML compiles again).
2941    
2942    3. Modified init scripts because XXX_DEFAULT environment variables
2943       are no longer with us.  (Boot-time initialization is now done
2944       using the same environment variables that are also used for
2945       startup-time initialization of controls.)
2946    
2947    ----------------------------------------------------------------------
2948    Name: Lal George
2949    Date: 2002/05/15 09:20:10 EDT
2950    Tag: george-20020515-pseudo-op-decls
2951    Description:
2952    
2953            All pseudo-ops emitted before the first segment declaration
2954    such as TEXT, DATA, and BSS directives are assumed to be global
2955    declarations and are emitted first in the assembly file. This is
2956    useful in a number of situations where one has pseudo-ops that are not
2957    specific to any segment, and also works around the constraint that one
2958    cannot have client pseudo-ops in the TEXT segment.
2959    
2960            Because no segment is associated with these declarations it is
2961    an error to allocate any space or objects before the first segment
2962    directive and an exception will be raised. However, we cannot make
2963    this check for client pseudo-ops.
2964    
2965            These top level declarations are a field in the CFG graph_info.
2966    In theory you can continue to add to this field after the CFG has been
2967    built -- provided you know what you are doing;-)
2968    
2969    ----------------------------------------------------------------------
2970    Name: Matthias Blume
2971    Date: 2002/05/13 16:40:00 EDT
2972    Tag: blume-20020513-pp-etc
2973    Description:
2974    
2975    A few minor bugfixes:
2976    
2977      - Stopgap measure for bug recently reported by Elsa Gunter (ppDec).
2978        (Bogus printouts for redefined bindings still occur.  Compiler
2979        bug should no longer occur now.  We need to redo the prettyprinter
2980        from scratch.)
2981    
2982      - CM pathname printer now also adds escape sequences for ( and )
2983    
2984      - commend and docu fixes for ml-nlffi
2985    
2986    ----------------------------------------------------------------------
2987    Name: Matthias Blume
2988    Date: 2002/05/10 16:40:00 EDT
2989    Tag: blume-20020510-erg-textio
2990    Description:
2991    
2992    Applied the following bugfix provided by Emden Gansner:
2993    
2994        Output is corrupted when outputSubstr is used rather than output.
2995    
2996        The problem occurs when a substring
2997    
2998            ss = (s, dataStart, dataLen)
2999    
3000        where dataStart > 0, fills a stream buffer with avail bytes left.
3001        avail bytes of s, starting at index dataStart, are copied into the
3002        buffer, the buffer is flushed, and then the remaining dataLen-avail
3003        bytes of ss are copied into the beginning of the buffer. Instead of
3004        starting this copy at index dataStart+avail in s, the current code
3005        starts the copy at index avail.
3006    
3007        Fix:
3008        In text-io-fn.sml, change line 695 from
3009             val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0)
3010        to
3011             val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0)
3012    
3013    ----------------------------------------------------------------------
3014    Name: Matthias Blume
3015    Date: 2002/04/12 13:55:00 EDT
3016    Tag: blume-20020412-assyntax
3017    Description:
3018    
3019    1. Grabbed newer assyntax.h from the XFree86 project.
3020    2. Fiddled with how to compile X86.prim.asm without warnings.
3021    3. (Very) Minor cleanup in CM.
3022    
3023    ----------------------------------------------------------------------
3024    Name: Matthias Blume
3025    Date: 2002/04/01 (no joke!) 17:07:00 EST
3026    Tag: blume-20020401-x86div
3027    Description:
3028    
3029    Added full support for div/mod/rem/quot on the x86, using the machine
3030    instruction's two results (without clumsily recomputing the remainder)
3031    directly where appropriate.
3032    
3033    Some more extensive power-of-two support was added to the x86 instruction
3034    selector (avoiding expensive divs, mods, and muls where they can be
3035    replaced with cheaper shifts and masks).  However, this sort of thing
3036    ought to be done earlier, e.g., within the CPS optimizer so that
3037    all architectures benefit from it.
3038    
3039    The compiler compiles to a fixed point, but changes might be somewhat
3040    fragile nevertheless.  Please, report any strange things that you might
3041    see wrt. div/mod/quot/rem...
3042    
3043    ----------------------------------------------------------------------
3044    Name: Matthias Blume
3045    Date: 2002/03/29 17:22:00
3046    Tag: blume-20020329-div
3047    Description:
3048    
3049    Fixed my broken div/mod logic.  Unfortunately, this means that the
3050    inline code for div/mod now has one more comparison than before.
3051    Fast paths (quotient > 0 or remainder = 0) are not affected, though.
3052    The problem was with quotient = 0, because that alone does not tell
3053    us which way the rounding went.  One then has to look at whether
3054    remainder and divisor have the same sign...  :(
3055    
3056    Anyway, I replaced the bootfiles with fresh ones...
3057    
3058    ----------------------------------------------------------------------
3059    Name: Matthias Blume
3060    Date: 2002/03/29 14:10:00 EST
3061    Tag: blume-20020329-inlprims
3062    Description:
3063    
3064    NEW BOOTFILES!!!    Version number bumped to 110.39.3.
3065    
3066    Primops have changed. This means that the bin/boot-file formats have
3067    changed as well.
3068    
3069    To make sure that there is no confusion, I made a new version.
3070    
3071    
3072    CHANGES:
3073    
3074    * removed REMT from mltree (remainder should never overflow).
3075    
3076    * added primops to deal with divisions of all flavors to the frontend
3077    
3078    * handled these primops all the way through so they map to their respective
3079      MLRISC support
3080    
3081    * used these primops in the implementation of Int, Int32, Word, Word32
3082    
3083    * removed INLDIV, INLMOD, and INLREM as they are no longer necessary
3084    
3085    * parameterized INLMIN, INLMAX, and INLABS by a numkind
3086    
3087    * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including
3088      floating point
3089    
3090    * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32,
3091      and Real (but Real.abs maps to a separate floating-point-only primop)
3092    
3093    
3094    TODO items:
3095    
3096    * Hacked Alpha32 instruction selection, disabling the selection of REMx
3097      instructions because the machine instruction encoder cannot handle
3098      them.  (Hppa, PPC, and Sparc instruction selection did not handle
3099      REM in the first place, and REM is supported by the x86 machine coder.)
3100    
3101    * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction
3102      selection phase.  (The two can be streamlined because the hardware
3103      delivers both quotient and remainder at the same time anyway.)
3104    
3105    * Think about what to do with "valOf(Int32.minInt) div ~1" and friends.
3106      (Currently the behavior is inconsistent both across architectures and
3107      wrt. the draft Basis spec.)
3108    
3109    * Word8 should eventually be handled natively, too.
3110    
3111    * There seems to be one serious bug in mltree-gen.sml.  It appears, though,
3112      as if there currently is no execution path that could trigger it in
3113      SML/NJ.  (The assumptions underlying functions arith and promotable do not
3114      hold for things like multiplication and division.)
3115    
3116    ----------------------------------------------------------------------
3117    Name: Matthias Blume
3118    Date: 2002/03/27 16:27:00 EST
3119    Tag: blume-20020327-mlrisc-divisions
3120    Description:
3121    
3122    Added support for all four division operations (ML's div, mod, quot,
3123    and rem) to MLRISC.  In the course of doing so, I also rationalized
3124    the naming (no more annoying switch-around of DIV and QUOT), by
3125    parameterizing the operation by div_rounding_mode (which can be either
3126    DIV_TO_ZERO or DIV_TO_NEGINF).
3127    
3128    The generic MLTreeGen functor takes care of compiling all four
3129    operations down to only round-to-zero div.
3130    
3131    Missing pieces:
3132    
3133      * Doing something smarter than relying on MLTreeGen on architectures
3134        like, e.g., the x86 where hardware division delivers both quotient and
3135        remainder at the same time.  With this, the implementation of the
3136        round-to-neginf operations could be further streamlined.
3137    
3138      * Remove inlining support for div/mod/rem from the frontend and replace it
3139        with primops that get carried through to the backend.  Do this for all
3140        int and word types.
3141    
3142    ----------------------------------------------------------------------
3143    Name: Matthias Blume
3144    Date: 2002/03/25 17:25:00 EST
3145    Tag: blume-20020325-divmod
3146    Description:
3147    
3148    I improved (hopefully without breaking them) the implementation of Int.div,
3149    Int.mod, and Int.rem.   For this, the code in translate.sml now takes
3150    advantage of the following observations:
3151    
3152      Let  q = x quot y      r = x rem y
3153           d = x div  y      m = x mod y
3154    
3155    where "quot" is the round-to-zero version of integer division that
3156    hardware usually provides.  Then we have:
3157    
3158         r = x - q * y        where neither the * nor the - will overflow
3159         d = if q >= 0 orelse x = q * y then q else q - 1
3160                              where neither the * nor the - will overflow
3161         m = if q >= 0 orelse r = 0 then r else r + y
3162                              where the + will not overflow
3163    
3164    This results in substantial simplification of the generated code.
3165    The following table shows the number of CFG nodes and edges generated
3166    for
3167            fun f (x, y) = x OPER y
3168            (* with OPER \in div, mod, quot, rem *)
3169    
3170    
3171        OPER | nodes(old) | edges(old) | nodes(new) | edges(new)
3172        --------------------------------------------------------
3173         div |         24 |         39 |         12 |         16
3174         mod |         41 |         71 |         12 |         16
3175        quot |          8 |         10 |          8 |         10
3176         rem |         10 |         14 |          8 |         10
3177    
3178    
3179    ----------------------------------------------------------------------
3180    Name: Matthias Blume
3181    Date: 2002/03/25 22:06:00 EST
3182    Tag: blume-20020325-cprotobug
3183    Description:
3184    
3185    Fixed a bug in cproto (c prototype decoder).
3186    
3187    ----------------------------------------------------------------------
3188    Name: Matthias Blume
3189    Date: 2002/03/25 16:00:00 EST
3190    Tag: blume-20020325-raw-primops
3191    Description:
3192    
3193    I did some cleanup to Allen's new primop code and
3194    replaced yesterday's bootfiles with new ones.
3195    (But they are stored in the same place.)
3196    
3197    ----------------------------------------------------------------------
3198    Name: Matthias Blume
3199    Date: 2002/03/24 22:40:00 EST
3200    Tag: blume-20020324-bootfiles
3201    Description:
3202    
3203    Made the bootfiles that Allen asked for.
3204    
3205    ----------------------------------------------------------------------
3206    Name: Allen Leung
3207    Date: 2002/03/23 15:50:00 EST
3208    Tag: leunga-20020323-flint-cps-rcc-primops
3209    Description:
3210    
3211      1. Changes to FLINT primops:
3212    
3213        (* make a call to a C-function;
3214         * The primop carries C function prototype information and specifies
3215         * which of its (ML-) arguments are floating point. C prototype
3216         * information is for use by the backend, ML information is for
3217         * use by the CPS converter. *)
3218      | RAW_CCALL of { c_proto: CTypes.c_proto,
3219                       ml_args: ccall_type list,
3220                       ml_res_opt: ccall_type option,
3221                       reentrant : bool
3222                     } option
3223       (* Allocate uninitialized storage on the heap.
3224        * The record is meant to hold short-lived C objects, i.e., they
3225        * are not ML pointers.  With the tag, the representation is
3226        * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8)
3227        *)
3228      | RAW_RECORD of {tag:bool,sz:int}
3229      and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR
3230    
3231      2.  These CPS primops are now overloaded:
3232    
3233           rawload of {kind:numkind}
3234           rawstore of {kind:numkind}
3235    
3236          The one argument form is:
3237    
3238             rawload {kind} address
3239    
3240          The two argument form is:
3241    
3242             rawload {kind} [ml object, byte-offset]
3243    
3244      3. RAW_CCALL/RCC now takes two extra arguments:
3245    
3246         a. The first is whether the C call is reentrant, i.e., whether
3247            ML state should be saved and restored.
3248         b. The second argument is a string argument specifying the name of
3249            library and the C function.
3250    
3251         These things are currently not handled in the code generator, yet.
3252    
3253      4. In CProto,
3254    
3255         An encoding type of "bool" means "ml object" and is mapped into
3256         C prototype of PTR.  Note that "bool" is different than "string",
3257         even though "string" is also mapped into PTR, because "bool"
3258         is assigned an CPS type of BOGt, while "string" is assigned INT32t.
3259    
3260      5. Pickler/unpicker
3261    
3262         Changed to handle RAW_RECORD and newest RAW_CCALL
3263    
3264      6. MLRiscGen,
3265    
3266         1. Changed to handle the new rawload/rawstore/rawrecord operators.
3267         2. Code for handling C Calls has been moved to a new module CPSCCalls,
3268            in the file CodeGen/cpscompile/cps-c-calls.sml
3269    
3270      7. Added the conditional move operator
3271    
3272             condmove of branch
3273    
3274         to cps.  Generation of this is still buggy so it is currently
3275         disabled.
3276    
3277    ----------------------------------------------------------------------
3278    Name: Lal George
3279    Date: 2002/03/22 14:18:25 EST
3280    Tag: george-20020322-cps-branch-prob
3281    Description:
3282    
3283    Implemented the Ball-Larus branch prediction-heuristics, and
3284    incorporated graphical viewers for control flow graphs.
3285    
3286    Ball-Larus Heuristics:
3287    ---------------------
3288    See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml.
3289    
3290    By design it uses the Dempster-Shafer theory for combining
3291    probabilities.  For example, in the function:
3292    
3293        fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc)
3294    
3295    the ball-larus heuristics predicts that the n=0 is unlikely
3296    (OH-heuristic), and the 'then' branch is unlikely because of the
3297    RH-heuristic -- giving the 'then' branch an even lower combined
3298    probability using the Dempster-Shafer theory.
3299    
3300    Finally, John Reppy's loop analysis in MLRISC, further lowers the
3301    probability of the 'then' branch because of the loop in the else
3302    branch.
3303    
3304    
3305    Graphical Viewing:
3306    ------------------
3307    I merely plugged in Allen's graphical viewers into the compiler. The
3308    additional code is not much. At the top level, saying:
3309    
3310            Control.MLRISC.getFlag "cfg-graphical-view" := true;
3311    
3312    will display the graphical view of the control flow graph just before
3313    back-patching.  daVinci must be in your path for this to work. If
3314    daVinci is not available, then the default viewer can be changed
3315    using:
3316    
3317            Control.MLRISC.getString "viewer"
3318    
3319    which can be set to "dot" or "vcg" for the corresponding viewers. Of
3320    course, these viewers must be in your path.
3321    
3322    The above will display the compilation unit at the level of clusters,
3323    many of which are small, boring, and un-interesting. Also setting:
3324    
3325            Control.MLRISC.getInt "cfg-graphical-view_size"
3326    
3327    will display clusters that are larger than the value set by the above.
3328    
3329    
3330    ----------------------------------------------------------------------
3331    Name: Matthias Blume
3332    Date: 2002/03/21 22:20:00 EST
3333    Tag: blume-20020321-kmp-bugfix
3334    Description:
3335    
3336    Changed the interface to the KMP routine in PreString and fixed
3337    a minor bug in one place where it was used.
3338    
3339    ----------------------------------------------------------------------
3340    Name: Allen Leung
3341    Date: 2002/03/21 20:30:00 EST
3342    Tag: leunga-20020321-cfg
3343    Description:
3344    
3345      Fixed a potential problem in cfg edge splitting.
3346    
3347    ----------------------------------------------------------------------
3348    Name: Allen Leung
3349    Date: 2002/03/21 17:15:00 EST
3350    Tag: leunga-20020321-x86-fp-cfg
3351    Description:
3352    
3353      1. Recoded the buggy parts of x86-fp.
3354    
3355         a. All the block reordering code has been removed.
3356            We now depend on the block placement phases to do this work.
3357    
3358         b. Critical edge splitting code has been simplified and moved into the
3359            CFG modules, as where they belong.
3360    
3361         Both of these were quite buggy and complex.  The code is now much, much
3362         simpler.
3363    
3364      2. X86 backend.
3365    
3366         a. Added instructions for 64-bit support.  Instruction selection for
3367            64-bit has not been committed, however, since that
3368            requires changes to MLTREE which haven't been approved by
3369            Lal and John.
3370    
3371         b. Added support for FUCOMI and FUCOMIP when generating code for
3372            PentiumPro and above.  We only generate these instructions in
3373            the fast-fp mode.
3374    
3375         c. Added cases for JP and JNP in X86FreqProps.
3376    
3377      3. CFG
3378    
3379         CFG now has a bunch of methods for edge splitting and merging.
3380    
3381      4. Machine description.
3382    
3383         John's simplification of MLTREE_BASIS.fcond broke a few machine
3384         description things:
3385    
3386         rtl-build.{sig,sml} and hppa.mdl fixed.
3387    
3388         NOTE: the machine description stuff in the repository is still broken.
3389               Again, I can't put my fixes in because that involves
3390               changes to MLTREE.
3391    
3392    ----------------------------------------------------------------------
3393    Name: Matthias Blume
3394    Date: 2002/03/20 15:55:00 EST
3395    Tag: blume-20020320-kmp
3396    Description:
3397    
3398    Implemented Knuth-Morris-Pratt string matching in PreString and used
3399    it for String.isSubstring, Substring.isSubstring, and
3400    Substring.position.
3401    
3402    (Might need some stress-testing.  Simple examples worked fine.)
3403    
3404    ----------------------------------------------------------------------
3405    Name: Matthias Blume
3406    Date: 2002/03/19 16:37:00 EST
3407    Tag: blume-20020319-witnesses
3408    Description:
3409    
3410    Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib.
3411    
3412    This implements a generic mechanism for changing constness qualifiers
3413    anywhere within big C types without resorting to outright "casts".
3414    (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you
3415    modify the constness at the outermost level.)
3416    The implementation of "convert" is based on the idea of "witness"
3417    values -- values that are not used by the operation but whose types
3418    "testify" to their applicability.  On the implementation side, "convert"
3419    is simply a projection (returning its second curried argument).  With
3420    cross-module inlining, it should not result in any machine code being
3421    generated.
3422    
3423    ----------------------------------------------------------------------
3424    Name: Matthias Blume
3425    Date: 2002/03/15 16:40:00 EST
3426    Tag: blume-20020315-basis
3427    Description:
3428    
3429    Provided (preliminary?) implementations for
3430    
3431      {String,Substring}.{concatWith,isSuffix,isSubstring}
3432    
3433    and
3434    
3435      Substring.full
3436    
3437    Those are in the Basis spec but they were missing in SML/NJ.
3438    
3439    ----------------------------------------------------------------------
3440    Name: Matthias Blume
3441    Date: 2002/03/14 21:30:00 EST
3442    Tag: blume-20020314-controls
3443    Description:
3444    
3445    Controls:
3446    ---------
3447    
3448    1. Factored out the recently-added Controls : CONTROLS stuff and put
3449       it into its own library $/controls-lib.cm.  The source tree for
3450       this is under src/smlnj-lib/Controls.
3451    
3452    2. Changed the names of types and functions in this interface, so they
3453       make a bit more "sense":
3454    
3455          module -> registry
3456          'a registry -> 'a group
3457    
3458    3. The interface now deals in ref cells only.  The getter/setter interface
3459       is (mostly) gone.
3460    
3461    4. Added a function that lets one register an already-existing ref cell.
3462    
3463    5. Made the corresponding modifications to the rest of the code so that
3464       everything compiles again.
3465    
3466    6. Changed the implementation of Controls.MLRISC back to something closer
3467       to the original.  In particular, this module (and therefore MLRISC)
3468       does not depend on Controls.  There now is some link-time code in
3469       int-sys.sml that registers the MLRISC controls with the Controls
3470       module.
3471    
3472    CM:
3473    ---
3474    
3475      * One can now specify the lambda-split aggressiveness in init.cmi.
3476    
3477    ----------------------------------------------------------------------
3478    Name: Allen Leung
3479    Date: 2002/03/13 17:30:00 EST
3480    Tag: leunga-20020313-x86-fp-unary
3481    Description:
3482    
3483    Bug fix for:
3484    
3485    > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml
3486    > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002
3487    > - fun f(x,(y,z)) = Real.~ y;
3488    > [autoloading]
3489    > [autoloading done]
3490    >       fchsl   (%eax), 184(%esp)
3491    > Error: MLRisc bug: X86MCEmitter.emitInstr
3492    >
3493    > uncaught exception Error