mit-scheme.git
14 years agoFixup ignored variables.
Joe Marshall [Wed, 24 Feb 2010 00:32:24 +0000 (16:32 -0800)]
Fixup ignored variables.

14 years agoRemove moribund declarations, add IGNORABLE. Add package comment.
Joe Marshall [Wed, 24 Feb 2010 00:28:19 +0000 (16:28 -0800)]
Remove moribund declarations, add IGNORABLE.  Add package comment.

14 years agoHandle IGNORE declarations in a much more reasonable way.
Joe Marshall [Tue, 23 Feb 2010 21:32:05 +0000 (13:32 -0800)]
Handle IGNORE declarations in a much more reasonable way.

14 years agoFix particularly nasty (but rare) bug that makes ext file generation fail under unusu...
Joe Marshall [Tue, 23 Feb 2010 19:49:07 +0000 (11:49 -0800)]
Fix particularly nasty (but rare) bug that makes ext file generation fail under unusual circumstances.

14 years agoRemove incorrect comment.
Joe Marshall [Tue, 23 Feb 2010 16:52:01 +0000 (08:52 -0800)]
Remove incorrect comment.

14 years agoMerge branch 'release-9.0'
Chris Hanson [Mon, 22 Feb 2010 10:42:28 +0000 (02:42 -0800)]
Merge branch 'release-9.0'

14 years agoSimplify! Implement make-system-file.
Chris Hanson [Mon, 22 Feb 2010 10:41:49 +0000 (02:41 -0800)]
Simplify!  Implement make-system-file.

14 years agoFix FSF address.
Chris Hanson [Sun, 21 Feb 2010 23:13:50 +0000 (15:13 -0800)]
Fix FSF address.

14 years agoUpdate copyright dates.
Chris Hanson [Sun, 21 Feb 2010 23:10:53 +0000 (15:10 -0800)]
Update copyright dates.

14 years agoRename make-dist-files -> make-native-files.
Chris Hanson [Sun, 21 Feb 2010 23:10:02 +0000 (15:10 -0800)]
Rename make-dist-files -> make-native-files.

14 years agoMerge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme
Joe Marshall [Sun, 21 Feb 2010 19:43:05 +0000 (11:43 -0800)]
Merge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme

14 years agoAdd NULL? to constant folding operators.
Joe Marshall [Sun, 21 Feb 2010 19:41:09 +0000 (11:41 -0800)]
Add NULL? to constant folding operators.

14 years agoRewrite dist scripts for so many reasons.
Chris Hanson [Sun, 21 Feb 2010 11:30:53 +0000 (03:30 -0800)]
Rewrite dist scripts for so many reasons.

14 years agoAdd /pc/.
Chris Hanson [Fri, 19 Feb 2010 09:08:54 +0000 (01:08 -0800)]
Add /pc/.

14 years agoAdd changelog.txt.
Chris Hanson [Fri, 19 Feb 2010 09:08:34 +0000 (01:08 -0800)]
Add changelog.txt.

14 years agoMerge branch 'release-9.0'
Chris Hanson [Fri, 19 Feb 2010 09:07:49 +0000 (01:07 -0800)]
Merge branch 'release-9.0'

14 years agoUpdate for release.
Chris Hanson [Fri, 19 Feb 2010 09:05:05 +0000 (01:05 -0800)]
Update for release.

14 years agoUpdate copyright year.
Chris Hanson [Fri, 19 Feb 2010 07:40:31 +0000 (23:40 -0800)]
Update copyright year.

14 years agoFix problem converting negative bignums to flonums.
Chris Hanson [Thu, 18 Feb 2010 06:08:37 +0000 (22:08 -0800)]
Fix problem converting negative bignums to flonums.

14 years agoFix problem converting negative bignums to flonums.
Chris Hanson [Thu, 18 Feb 2010 06:08:37 +0000 (22:08 -0800)]
Fix problem converting negative bignums to flonums.

14 years agoMerge in changes from release-9.0.
Chris Hanson [Tue, 16 Feb 2010 08:33:33 +0000 (00:33 -0800)]
Merge in changes from release-9.0.

14 years agoRemove unused variable binding.
Chris Hanson [Tue, 16 Feb 2010 05:57:07 +0000 (21:57 -0800)]
Remove unused variable binding.

14 years agoInstall Taylor's patch to fix parsing of compiled interrupt frames.
Chris Hanson [Tue, 16 Feb 2010 05:56:58 +0000 (21:56 -0800)]
Install Taylor's patch to fix parsing of compiled interrupt frames.

14 years agoEliminate --enable-static-libs flag.
Chris Hanson [Tue, 16 Feb 2010 05:16:33 +0000 (21:16 -0800)]
Eliminate --enable-static-libs flag.

14 years agoEliminate multiple liarc builds; just use one now that it works again.
Chris Hanson [Tue, 16 Feb 2010 04:18:32 +0000 (20:18 -0800)]
Eliminate multiple liarc builds; just use one now that it works again.

14 years agoRename "LOG" to "changelog.txt".
Chris Hanson [Tue, 16 Feb 2010 04:16:06 +0000 (20:16 -0800)]
Rename "LOG" to "changelog.txt".

14 years agoFix HEXADECIMAL->VECTOR-8B.
Taylor R Campbell [Tue, 16 Feb 2010 02:36:57 +0000 (21:36 -0500)]
Fix HEXADECIMAL->VECTOR-8B.

Now it passes

(do ((i 0 (+ i 1)))
    ((= i #x100))
  (let* ((v (random-byte-vector #x100))
         (h (vector-8b->hexadecimal v))
         (v* (hexadecimal->vector-8b h)))
    (do ((i 0 (+ i 1)))
        ((= i #x100))
      (if (not (= (vector-8b-ref v i) (vector-8b-ref v* i)))
          (error "Lose:" h)))))

14 years agoDon't fix constant at compile time; breaks liarc build.
Chris Hanson [Tue, 16 Feb 2010 00:09:14 +0000 (16:09 -0800)]
Don't fix constant at compile time; breaks liarc build.

14 years agoIn microcode/makegen/makeinit.sh, delete Makefile.in on ^C.
Taylor R Campbell [Mon, 15 Feb 2010 23:12:30 +0000 (18:12 -0500)]
In microcode/makegen/makeinit.sh, delete Makefile.in on ^C.

This reduces the damage to the tree caused by an inopportune ^C
during Setup.sh which would otherwise require manual intervention
to clean up the mess.

14 years agoDon't link prmcrypt.so against libltdl.
Taylor R Campbell [Sun, 14 Feb 2010 18:53:28 +0000 (13:53 -0500)]
Don't link prmcrypt.so against libltdl.

Since 2.5.5 (released nearly eight years ago), libmcrypt has
statically linked all its modules by default, unless configured with
--enable-dynamic-loading.  If anyone actually uses that, we ought to
use `libmcrypt-config --libs' to get the actual list of linker flags,
but just passing -lmcrypt should do for now.

14 years agoMerge branch 'master' of ssh://git.sv.gnu.org/srv/git/mit-scheme
Taylor R Campbell [Sun, 14 Feb 2010 05:25:17 +0000 (00:25 -0500)]
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/mit-scheme

14 years agoruntime/gdbm.scm has no INITIALIZE-PACKAGE!.
Taylor R Campbell [Sun, 14 Feb 2010 05:18:17 +0000 (00:18 -0500)]
runtime/gdbm.scm has no INITIALIZE-PACKAGE!.

14 years agoTypo in variable name.
Joe Marshall [Sat, 13 Feb 2010 22:12:24 +0000 (14:12 -0800)]
Typo in variable name.

14 years agoMake X11 modules dynamically loadable.
Taylor R Campbell [Sat, 13 Feb 2010 21:22:28 +0000 (16:22 -0500)]
Make X11 modules dynamically loadable.

Make the modules depend on `scheme' only for Mac OS X, and let that
be an option to configure, so that users can just build modules
against an already installed Scheme.

This is a step toward making every feature that currently involves a
compile-time decision instead be dynamically loadable, and compilable
separately from the microcode executable.  All that is left is
termcap support.

14 years agoReorganize procedures and use dispatch vector for handling combination operators.
Joe Marshall [Sat, 13 Feb 2010 21:08:53 +0000 (13:08 -0800)]
Reorganize procedures and use dispatch vector for handling combination operators.

14 years agoFix thinko in last change to check realloc errors in tparam.c.
Taylor R Campbell [Sat, 13 Feb 2010 18:16:52 +0000 (13:16 -0500)]
Fix thinko in last change to check realloc errors in tparam.c.

14 years agoMerge branch 'master' of ssh://git.sv.gnu.org/srv/git/mit-scheme
Taylor R Campbell [Sat, 13 Feb 2010 08:00:16 +0000 (03:00 -0500)]
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/mit-scheme

14 years agoTweak tparam.c and tgoto.c.
Taylor R Campbell [Sat, 13 Feb 2010 07:55:11 +0000 (02:55 -0500)]
Tweak tparam.c and tgoto.c.

(tparam.c): Use ANSI-style declarations.  Include relevant headers.
Use memcpy rather than bcopy.  Check for malloc and realloc failures.

(tterm.c): Check for tparam and tgoto failures.  Handle the case
where tparam and tgoto malloc their own memory.  Ensure that a Scheme
interrupt/GC in char_pointer_to_string does not leak that memory.

14 years agoTweak microcode to build better on NetBSD.
Taylor R Campbell [Sat, 13 Feb 2010 07:10:34 +0000 (02:10 -0500)]
Tweak microcode to build better on NetBSD.

Clarify termcap library selection.

Omit rpath hack -- users can specify ld rpath arguments explicitly
when configuring the microcode.

14 years agoSeparate global declarations from top-level declarations.
Joe Marshall [Fri, 12 Feb 2010 22:44:09 +0000 (14:44 -0800)]
Separate global declarations from top-level declarations.

14 years agoAdd some interpreter entries' names to the i386 disassembler.
Taylor R Campbell [Fri, 12 Feb 2010 21:06:01 +0000 (16:06 -0500)]
Add some interpreter entries' names to the i386 disassembler.

14 years agoFix typo in i386 disassembler.
Taylor R Campbell [Fri, 12 Feb 2010 20:45:08 +0000 (15:45 -0500)]
Fix typo in i386 disassembler.

14 years agoSuppress integration of global operators shadowed by top-level integrations. Subtle...
Joe Marshall [Fri, 12 Feb 2010 20:41:14 +0000 (12:41 -0800)]
Suppress integration of global operators shadowed by top-level integrations.  Subtle bug here.  This will workaround until I make the real fix.

14 years agoConvert integrate/name from CPS to direct style and fix up callers.
Joe Marshall [Fri, 12 Feb 2010 01:48:25 +0000 (17:48 -0800)]
Convert integrate/name from CPS to direct style and fix up callers.

14 years agoAdd expansion for EQ?
Joe Marshall [Thu, 11 Feb 2010 02:16:32 +0000 (18:16 -0800)]
Add expansion for EQ?

14 years agoConvert usiexp.scm from CPS to direct style. Fix callers in subst.scm.
Joe Marshall [Thu, 11 Feb 2010 02:14:22 +0000 (18:14 -0800)]
Convert usiexp.scm from CPS to direct style.  Fix callers in subst.scm.

14 years agoUse notifications for noise.
Joe Marshall [Wed, 10 Feb 2010 21:22:02 +0000 (13:22 -0800)]
Use notifications for noise.

14 years agoUse SRFI-1 lset routines.
Joe Marshall [Wed, 10 Feb 2010 20:11:22 +0000 (12:11 -0800)]
Use SRFI-1 lset routines.

14 years agoMove combination rewriting to combination constructor. Import constant folding opera...
Joe Marshall [Wed, 10 Feb 2010 02:42:52 +0000 (18:42 -0800)]
Move combination rewriting to combination constructor.  Import constant folding operators from runtime.

14 years agoSimply disjunction integration by moving disjunction construction logic to object.scm
Joe Marshall [Wed, 10 Feb 2010 01:08:18 +0000 (17:08 -0800)]
Simply disjunction integration by moving disjunction construction logic to object.scm

14 years agoCreate constructor stubs for combination, conditional, and disjunction.
Joe Marshall [Tue, 9 Feb 2010 23:55:03 +0000 (15:55 -0800)]
Create constructor stubs for combination, conditional, and disjunction.

14 years agoMerge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme
Joe Marshall [Tue, 9 Feb 2010 23:32:01 +0000 (15:32 -0800)]
Merge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme

14 years agoMove environment table to tables.
Joe Marshall [Tue, 9 Feb 2010 23:30:08 +0000 (15:30 -0800)]
Move environment table to tables.

14 years agoAdd guarantees, minor cleanups.
Joe Marshall [Tue, 9 Feb 2010 23:24:55 +0000 (15:24 -0800)]
Add guarantees, minor cleanups.

14 years agoAdd KNOWN-DECLARATION guarantee.
Joe Marshall [Tue, 9 Feb 2010 23:19:19 +0000 (15:19 -0800)]
Add KNOWN-DECLARATION guarantee.

14 years agoMerge branch 'master' of git.sv.gnu.org:/srv/git/mit-scheme
Chris Hanson [Tue, 9 Feb 2010 21:31:01 +0000 (13:31 -0800)]
Merge branch 'master' of git.sv.gnu.org:/srv/git/mit-scheme

14 years agoCorrectly remove runtime.com from image.
Chris Hanson [Tue, 9 Feb 2010 20:09:08 +0000 (12:09 -0800)]
Correctly remove runtime.com from image.

14 years agoAdd and export CONSTANT-PROCEDURE.
Joe Marshall [Tue, 9 Feb 2010 19:02:07 +0000 (11:02 -0800)]
Add and export CONSTANT-PROCEDURE.

14 years agoMake guarantees for objects, improve debugging.
Joe Marshall [Tue, 9 Feb 2010 18:51:07 +0000 (10:51 -0800)]
Make guarantees for objects, improve debugging.

14 years agoAdd IGNORABLE declaration for variables. Issue warning if variable is IGNORE, but...
Joe Marshall [Tue, 9 Feb 2010 18:01:25 +0000 (10:01 -0800)]
Add IGNORABLE declaration for variables.  Issue warning if variable is IGNORE, but used anyway.

14 years agoGet rid of block/flags, open-block/optimized, weird optimization switches, and code...
Joe Marshall [Tue, 9 Feb 2010 17:34:53 +0000 (09:34 -0800)]
Get rid of block/flags, open-block/optimized, weird optimization switches, and code for INTEGRATE-SAFELY.

14 years agoRemove declarations INTEGRATE-SAFELY, AUTOMAGIC-INTEGRATIONS, ETA-SUBSTITUTION, and...
Joe Marshall [Tue, 9 Feb 2010 17:13:23 +0000 (09:13 -0800)]
Remove declarations INTEGRATE-SAFELY, AUTOMAGIC-INTEGRATIONS, ETA-SUBSTITUTION, and OPEN-BLOCK-OPTIMIZATION.

14 years agoIgnore eager-integration-switch and eta-substitution-switch.
Joe Marshall [Tue, 9 Feb 2010 17:07:52 +0000 (09:07 -0800)]
Ignore eager-integration-switch and eta-substitution-switch.

14 years agoGet rid of lsets and table. Simplify emodel.
jrm [Tue, 9 Feb 2010 16:51:31 +0000 (08:51 -0800)]
Get rid of lsets and table.  Simplify emodel.

14 years agoRemove strange declarations.
jrm [Tue, 9 Feb 2010 16:48:24 +0000 (08:48 -0800)]
Remove strange declarations.

14 years agoAdd package comments.
jrm [Tue, 9 Feb 2010 16:47:10 +0000 (08:47 -0800)]
Add package comments.

14 years agoAdd SF:DISPLAY-TOP-LEVEL-PROCEDURE-NAMES?
jrm [Tue, 9 Feb 2010 15:56:51 +0000 (07:56 -0800)]
Add SF:DISPLAY-TOP-LEVEL-PROCEDURE-NAMES?

14 years agoMake sure that arch tar file is deleted prior to running tar.
Chris Hanson [Tue, 9 Feb 2010 11:34:04 +0000 (03:34 -0800)]
Make sure that arch tar file is deleted prior to running tar.

14 years agoDon't include "runtime.com" in the image.
Chris Hanson [Tue, 9 Feb 2010 11:21:13 +0000 (03:21 -0800)]
Don't include "runtime.com" in the image.

14 years agoFix some bugs.
Chris Hanson [Tue, 9 Feb 2010 11:20:15 +0000 (03:20 -0800)]
Fix some bugs.

14 years agoChange c32/c64 names to have common prefix with other files.
Chris Hanson [Tue, 9 Feb 2010 10:59:50 +0000 (02:59 -0800)]
Change c32/c64 names to have common prefix with other files.

14 years agoMerge doc files into binary tarballs.
Chris Hanson [Tue, 9 Feb 2010 10:21:53 +0000 (02:21 -0800)]
Merge doc files into binary tarballs.

14 years agoRewrite to handle new architecture and to remove the system-specific
Chris Hanson [Tue, 9 Feb 2010 09:46:10 +0000 (01:46 -0800)]
Rewrite to handle new architecture and to remove the system-specific
code from the main builds.

14 years agoAdjust for 32- and 64-bit liarc builds.
Chris Hanson [Tue, 9 Feb 2010 03:18:38 +0000 (19:18 -0800)]
Adjust for 32- and 64-bit liarc builds.

14 years agoUpdate copyright notices for 2010.
Chris Hanson [Tue, 9 Feb 2010 00:14:01 +0000 (16:14 -0800)]
Update copyright notices for 2010.

14 years agoBump release version to 9.0.
Chris Hanson [Tue, 9 Feb 2010 00:05:25 +0000 (16:05 -0800)]
Bump release version to 9.0.

14 years agoAdd ability to pass configure args to script.
Chris Hanson [Mon, 1 Feb 2010 08:19:49 +0000 (00:19 -0800)]
Add ability to pass configure args to script.

14 years agoEliminate open-coding of QUOTIENT and REMAINDER.
Chris Hanson [Mon, 1 Feb 2010 07:21:41 +0000 (23:21 -0800)]
Eliminate open-coding of QUOTIENT and REMAINDER.

14 years agoFix bug: weak-method:clean! removing entries whose key is #f.
Chris Hanson [Mon, 1 Feb 2010 07:12:02 +0000 (23:12 -0800)]
Fix bug: weak-method:clean! removing entries whose key is #f.

14 years agoFix arg order to LSET-DIFFERENCE.
Chris Hanson [Wed, 20 Jan 2010 03:09:47 +0000 (19:09 -0800)]
Fix arg order to LSET-DIFFERENCE.

14 years agoGot the (incomplete) svm1 back end to syntax.
Matt Birkholz [Sun, 3 Jan 2010 03:00:52 +0000 (20:00 -0700)]
Got the (incomplete) svm1 back end to syntax.

* src/compiler/choose-machine.sh: Added a test that produces the correct
directory name (svm) for TARGET_ARCH svm1.

* src/compiler/machines/svm/.gitignore (new): Ignore generated files.

* src/compiler/machines/svm/assembler-compiler.scm: Fixed to produce
non-empty let bodies in the codecs of instructions with zero
arguments, and fewer unreferenced bindings.

* src/compiler/machines/svm/assembler-runtime.scm: Introduced a module
variable, coding-types, to hold the list of <rt-coding-type>s created
by make-rt-coding-type.  The list is thus no longer required as an
argument to many procedures.

Fixed the trap:* procedures to accept trap arguments.  Fixed the
interface to the interrupt test instructions, which are not (no
longer?) traps.

* src/compiler/machines/svm/compile-assembler.scm: Added a temporary
hack to define write-mit-scheme-copyright in January's snapshot.

* src/compiler/machines/svm/compiler.cbf (new): Cribbed from i386.

* src/compiler/machines/svm/compiler.pkg (new): Cribbed from i386.

* src/compiler/machines/svm/compiler.sf (new): Cribbed from i386.
Referring to compiler.pkg's declarations to get the syntax/load
environments right.

* src/compiler/machines/svm/decls.scm (new): Cribbed from i386.
Collect the list of source files from compiler.pkg, not via *.scm
globs.  Punted initialize/syntax-dependencies!, getting the correct
syntax/load environments from compiler.pkg.

* src/compiler/machines/svm/lapgen.scm: Fixed some typos and
unreferenced bindings.

15 years agoMerge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme
Joe Marshall [Sat, 26 Dec 2009 22:06:05 +0000 (14:06 -0800)]
Merge branch 'master' of ssh://git.savannah.gnu.org/srv/git/mit-scheme

15 years agoFix over-long line.
Chris Hanson [Sat, 26 Dec 2009 21:34:06 +0000 (13:34 -0800)]
Fix over-long line.

15 years agoFix MD5-UPDATE and MHASH to check their index args correctly.
Chris Hanson [Sat, 26 Dec 2009 21:33:18 +0000 (13:33 -0800)]
Fix MD5-UPDATE and MHASH to check their index args correctly.

15 years agoMinor tweak to use disjunction in conditional expansion.
Joe Marshall [Fri, 25 Dec 2009 21:06:31 +0000 (13:06 -0800)]
Minor tweak to use disjunction in conditional expansion.

15 years agoFixed MD5 operations, e.g. `md5-string', so that they would accept the
Arthur A. Gleckler [Fri, 25 Dec 2009 02:22:33 +0000 (18:22 -0800)]
Fixed MD5 operations, e.g. `md5-string', so that they would accept the
empty string as input.  Before this fix, they would fail with this
error:

  ;The object 0, passed as the third argument to md5-update, is not in the correct range.

15 years agoTweak patterns for windows stuff.
Chris Hanson [Wed, 23 Dec 2009 10:03:37 +0000 (02:03 -0800)]
Tweak patterns for windows stuff.

15 years agoTweak patterns for windows stuff.
Chris Hanson [Wed, 23 Dec 2009 10:02:50 +0000 (02:02 -0800)]
Tweak patterns for windows stuff.

15 years agoConditionally include documentation; right now there's none available.
Chris Hanson [Wed, 23 Dec 2009 09:57:26 +0000 (01:57 -0800)]
Conditionally include documentation; right now there's none available.

15 years agoMajor overhaul in preparation for release.
Chris Hanson [Wed, 23 Dec 2009 09:44:35 +0000 (01:44 -0800)]
Major overhaul in preparation for release.

15 years agoFix problems with file enumerations.
Chris Hanson [Wed, 23 Dec 2009 09:44:01 +0000 (01:44 -0800)]
Fix problems with file enumerations.

15 years agoMore updates in preparation for release.
Chris Hanson [Wed, 23 Dec 2009 09:43:35 +0000 (01:43 -0800)]
More updates in preparation for release.

15 years agoUse recursive-lambda icon as default on windows.
Chris Hanson [Wed, 23 Dec 2009 07:42:20 +0000 (23:42 -0800)]
Use recursive-lambda icon as default on windows.

15 years agoForce working directory to user's home-dir when started as mac application bundle.
Chris Hanson [Wed, 23 Dec 2009 05:00:27 +0000 (21:00 -0800)]
Force working directory to user's home-dir when started as mac application bundle.

15 years agoAdd new recursive-lambda icon for use in mac and windows.
Chris Hanson [Wed, 23 Dec 2009 04:59:58 +0000 (20:59 -0800)]
Add new recursive-lambda icon for use in mac and windows.

15 years agoRestrict *.ico rule.
Chris Hanson [Wed, 23 Dec 2009 02:51:11 +0000 (18:51 -0800)]
Restrict *.ico rule.

15 years agoUpdate documentation to reflect changes concerning eq hash tables.
Taylor R Campbell [Mon, 21 Dec 2009 23:41:13 +0000 (18:41 -0500)]
Update documentation to reflect changes concerning eq hash tables.

Document MAKE-WEAK-EQ-HASH-TABLE and MAKE-WEAK-EQV-HASH-TABLE.
Warn that MAKE-EQ-HASH-TABLE and MAKE-EQV-HASH-TABLE may become
aliases for MAKE-STRONG-EQ-HASH-TABLE and MAKE-STRONG-EQV-HASH-TABLE
instead.  Suggest using MAKE-STRONG-EQ-HASH-TABLE for symbol-keyed
tables, rather than MAKE-EQ-HASH-TABLE.

15 years agoEradicate use of MAKE-EQ-HASH-TABLE.
Taylor R Campbell [Mon, 21 Dec 2009 21:15:00 +0000 (16:15 -0500)]
Eradicate use of MAKE-EQ-HASH-TABLE.

Replace each use by a constructor with a more specific name.
Full analysis:

* Use of MAKE-EQ-HASH-TABLE in MIT Scheme, 2009-12-21  -*- outline -*-

In MIT Scheme, MAKE-EQ-HASH-TABLE yields a hash table whose keys are
held only weakly, so that they will be garbage-collected if there are
no strong references to them.  To make a similar hash table whose keys
are held strongly, one must use MAKE-STRONG-EQ-HASH-TABLE explicitly.
Of the sixty-two uses of MAKE-EQ-HASH-TABLE throughout the MIT Scheme
source code, only four appear to need weak references to their keys,
and for only two more is there an obvious reason to use weak
references.  This list categorizes most uses of MAKE-EQ-HASH-TABLE.

Each entry is marked by the decision that was made for it of whether
it should be strong or weak.

** Hash table must be key-weak

*** [weak] edwin/curren.scm, screen-buffer-layouts
*** [weak] edwin/eystep.scm, stepper-buffers
*** [weak] edwin/xterm.scm, display/cached-atoms-table
*** [weak] edwin/xterm.scm, display/selection-records

** Hash table should be key-weak, but will work as key-strong

*** [weak] edwin/comman.scm, permanent-local-variables

As long as Edwin variables are strongly interned, it is safe to use a
key-strong hash table for properties on Edwin variables such as the
permanent-local property, but if Edwin variables were weakly interned
then this would be a space leak.

*** [strong] sos/class.scm, built-in-class-table

Dispatch tags that are garbage-collected shouldn't accumulate space
here.  These might arise, for instance, from re-evaluating
DEFINE-RECORD-TYPE forms causing the old record type's dispatch tags
to be garbage-collected.  That requires key- and datum-weak hash
tables, though.  Using MAKE-WEAK-EQ-HASH-TABLE here breaks the
bootstrap from the 20090107 snapshot, which doesn't have a binding for
that name.  So just use a strong eq hash table for now.

** Hash table should be key-strong, but will work as key-weak

*** [strong] compiler/machines/i386/lapopt.scm, *rules*

If the compiler never generates instructions with certain symbols in
them, and hence the compiler's code has no strong references to those
symbols, then the rules for those symbols may as well be discarded.
But that's pretty sketchy.

*** [strong] compiler/machines/svm/assembler-runtime.scm, symbolic-operators
*** [strong] compiler/machines/svm/assembler-runtime.scm, pvar-type-table
*** [strong] compiler/machines/svm/lapopt.scm, *rules* (not really used)
*** [strong] compiler/machines/x86-64/lapopt.scm, *rules* (not really used)
*** [strong] edwin/nntp.scm, equivalences in build-equivalence-classes

The only reason that this works as a key-weak hash table is that every
key is also strongly referenced by the hash table's data.

*** [strong] edwin/nntp.scm, tables in convert-header-graphs-to-trees

In the only caller of CONVERT-HEADER-GRAPHS-TO-TREES, the (strong)
list of headers is still strongly referenced, so the keys of the two
hash tables in TABLES will not be garbage-collected.

*** [strong] edwin/xterm.scm, built-in-atoms-table

If the binding for BUILT-IN-ATOMS were collected while that for
BUILT-IN-ATOMS-TABLE were not, then the latter would be in trouble.
This generally doesn't happen currently.

*** [strong] microcode/os2pm.scm, type-abbreviations
*** [strong] microcode/os2pm.scm, id-external-roots

This code is probably defunct, but if it weren't, and if the
presentation manager procedure abstraction were used outside this
file, it would probably be necessary to make these two hash tables
key-strong.  Another hash table, PM-PROCEDURES, is incorrectly
key-weak.

*** [strong] runtime/genio.scm, {en,de}coder/sizer/{,de}normalizer maps

Since there are maps in both directions, each hash table's keys also
have strong references in the data positions of the other hash table.
But this is pretty fragile, and in any case there is no need to use
key-weak hash tables.

*** [strong] runtime/syntax-output.scm, unmappings
*** [strong] runtime/syntax-output.scm, rename-databases' mapping-tables
*** [strong] runtime/syntax-output.scm, rename-databases' id-tables
*** [weak] ssp/xmlrpc.scm, methods in get-xmlrpc-method-handler

Since the hash table is used only in one place, and only one key is
fetched out of it, that key will be strongly referenced until it is
fetched, and the other keys don't matter.  (For that matter, why use a
hash table at all?)

*** [strong] xml/turtle.scm, table in write-prefixes

** Hash table must be key-strong

*** [strong] compiler/machines/svm/assembler-runtime.scm, symbol tables

These are probably meant to be treated like the symbol tables
implemented in compiler/back/symtab.scm.

*** [strong] imail/imail-file.scm, file-folder-types
*** [strong] imail/imail-mime.scm, mime-encodings
*** [strong] microcode/os2pm.scm, pm-procedures
*** [strong] runtime/http-syntax.scm, header-value-defns
*** [strong] ssp/mod-lisp.scm, mime-handlers
*** [strong] ssp/xhtml-expander.scm, *sabbr-table*

The processing instructions are processed incrementally as the file is
parsed, so keys in the sabbr table may be garbage-collected and then
re-interned, between which times the associations would be destroyed.

*** [strong] star-parser/matcher.scm, matcher-preprocessors
*** [strong] star-parser/matcher.scm, matcher-compilers
*** [strong] star-parser/parser.scm, parser-preprocessors
*** [strong] star-parser/parser.scm, parser-compilers
*** [strong] star-parser/shared.scm, make-parser-macros
*** [strong] star-parser/shared.scm, *global-parser-macros*
*** [strong] xdoc/validate-xdoc.scm, element-checkers
*** [strong] xdoc/xdoc.scm, html-generators
*** [strong] xdoc/xdoc.scm, when-conditions
*** [strong] xdoc/xdoc.scm, xdoc-content-types
*** [strong] xdoc/xdoc.scm, xdoc-element-types
*** [strong] xdoc/xdoc.scm, xdoc-input-canonicalizers
*** [strong] xdoc/xdoc.scm, xdoc-output-definitions
*** [strong] xml/xhtml.scm, element-context-map

** Other

*** [strong] compiler/machines/C/stackify.scm, stackify count tables

It is not immediately clear to me whether these need to be strong, but
they probably should be.

*** [strong] compiler/rtlbase/rtlobj.scm, label->object maps

It's not immediately obvious to me whether LABEL->OBJECT will ever be
used after the last references to the keys of the hash tables involved
(which cause strong references to those keys to be dropped, if
COMPILER:PRESERVE-DATA-STRUCTURES? is false).  A little further
analysis is required.  A conservative guess would be that these should
to be strong.

*** [weak] edwin/eystep.scm, ynode-regions

What are the keys to these hash tables?  I don't know how long they
persist.

Chris's answer: The keys are stepper nodes; they are stored in a text
property and consequently will be held appropriately.  This should be
a weak table.

*** [weak] edwin/prompt.scm, prompt-histories

Making this key-strong is not likely to be a space leak, but if a
command is garbage-collected, then so may the symbol for its history
be garbage-collected, and its history is presumably no longer needed.

*** [strong-eqv] edwin/win32.scm, event-handlers

The keys in EVENT-HANDLERS are integers.  I think this should be a
key-strong eqv hash table rather than a key-weak eq hash table.

*** [strong] edwin/xterm.scm, selection->record table in display/selection-records

I'm not sure what the domain of possible keys to this hash table is --
it may be just the symbols PRIMARY and CLIPBOARD, which will probably
be strongly referenced by the rest of the Edwin code, but on the other
hand I think this should probably be a key-strong hash table.

*** [strong] edwin/xterm.scm, symbol->x-atom table in display/cached-atoms-table

Whether this should be key-strong or key-weak depends on whether the
set of atoms that it will map is arbitrarily large.

*** [weak] imail/imail-core.scm, memoized-resources

As long as URLs are interned strongly, it doesn't matter whether
MEMOIZED-RESOURCES is key-weak or key-strong.  This requires further
analysis, but leaving it weak for now (i.e. not changing it) is safe
until internment of URLs changes.

*** [strong with comment] runtime/sfile.scm, interned-mime-types

This should really be a key-strong, datum-weak hash table, which the
hash table abstraction does not presently support.  (The same goes for
UNUSUAL-INTERNED-MIME-TYPES.)  Barring that, INTERNED-MIME-TYPES
should be key-strong, although it happens to work as a key-weak hash
table because its data have strong references to its keys anyway.

*** [weak] xdoc/xdoc.scm, *xdoc-element-properties*
*** [weak] xdoc/xdoc.scm, *xdoc-inputs*
*** [weak] xdoc/xdoc.scm, *xdoc-outputs*

As maps from XML elements by identity to properties, these three
should probably be key-weak, but since new ones are created for each
xdoc expansion, they could probably safely be key-strong without
badly leaking memory.

*** [strong] xdoc/xdoc.scm, *xdoc-id-map*

This should be key-strong, although it doesn't matter until XML names
become weakly interned.

*** [strong-eqv] xml/xhtml-entities.scm, table in html-char->name-map

The keys in the table inside HTML-CHAR->NAME-MAP is keyed by
characters.  Should this be a key-strong eqv hash table rather than a
key-weak eq hash table?

*** [strong with comment] xml/xml-names.scm

If we had datum-weak hash tables, then EXPANDED-NAMES should be
key-weak and the other two should be datum-weak.  But we don't, so
instead all three should be strong, since in each one the data all
have strong references to their corresponding keys.

15 years agoReflect specification bug in definition of HASH-TABLE-UPDATE!.
Taylor R Campbell [Mon, 21 Dec 2009 20:11:16 +0000 (15:11 -0500)]
Reflect specification bug in definition of HASH-TABLE-UPDATE!.

We can't use HASH-TABLE/MODIFY! because the specification tacitly
permits the procedure to edit the hash table.  This was a silly
oversight in the SRFI document.

15 years agoAdd names for hash table types with the word `weak' in them.
Taylor R Campbell [Mon, 21 Dec 2009 16:35:39 +0000 (11:35 -0500)]
Add names for hash table types with the word `weak' in them.

New global bindings:
  MAKE-WEAK-EQ-HASH-TABLE
  MAKE-WEAK-EQV-HASH-TABLE
  WEAK-EQ-HASH-TABLE-TYPE
  WEAK-EQV-HASH-TABLE-TYPE

{EQ,EQV}-HASH-TABLE-TYPE and MAKE-{EQ,EQV}-HASH-TABLE are now aliases
for WEAK-{EQ,EQV}-HASH-TABLE-TYPE and MAKE-WEAK-{EQ,EQV}-HASH-TABLE,
as are MAKE-{SYMBOL,OBJECT}-HASH-TABLE.