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

SCM Repository

[smlnj] Diff of /sml/trunk/NOTES/HISTORY
ViewVC logotype

Diff of /sml/trunk/NOTES/HISTORY

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

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