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