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

SCM Repository

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

Diff of /sml/trunk/HISTORY

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

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