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/trunk/NOTES/HISTORY
ViewVC logotype

Diff of /sml/trunk/NOTES/HISTORY

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

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