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