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

Diff of /sml/trunk/HISTORY

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

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