[comp.lang.lisp.x] xscheme bug

zilla@nyit.UUCP (John Lewis) (10/16/89)

there is a bug in xscheme0.17's (restore) function.  the bug is that garbage
collection should be inhibited during the main part of xlirestore().  This
is because the image is restored in node-array order, rather than obarray order.
For example, strings may be restored before the symbols which refer to them,
and a gc before the corresponding symbol is restored will remove the string (set
its type to FREE).  routines called in xlirestore (e.g. getvspace()) can
trigger gc.
  A fix is simply to set a flag inhibiting gc during the main part of 
xlirestore.  dbetz confirmed that this is a reasonable fix.

mikpe@majestix.ida.liu.se (Mikael Pettersson) (05/30/90)

There's a bug in XScheme's <, <=, =, >= and > predicates.
Try the following:

	(= 10 20 30)

This should fail with a "bad continuation" message. The problem
is in the compare() function [xsmath.c]. It looks roughly as follows:

	compare(fcn)
        {
	    ...
	    for(icmp = TRUE; icmp && moreargs(); ..) {
		/* consume one more argument, compare it (using fcn)
		 * and set icmp to false if the comparison failed
		 */
	    }
	    return icmp ? true : NIL;
	}

As you can see, if the test fails before all arguments have been
consumed, the function will (try to) return, treating the remaining
arguments as the continuation...   The fix is simply to drop the
remaining arguments before returning:

	    drop(xlargc);
	    return icmp ...;


/Mike
-- 
Mikael Pettersson, Dept of Comp & Info Sci, University of Linkoping, Sweden
email: mpe@ida.liu.se or ...!{mcsun,munnari,uunet,unido,...}!sunic!liuida!mpe