[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Had anybody problems with clisp-1996-07-22 before me?
- To: clisp-list@ma2s2.mathematik.uni-karlsruhe.de
- Subject: Re: Had anybody problems with clisp-1996-07-22 before me?
- From: Peter Burwood <clisp@arcangel.dircon.co.uk>
- Date: Wed, 13 Nov 1996 17:37:09 +0000
- In-reply-to: <9610250123.AA08627@ma2s2.mathematik.uni-karlsruhe.de>
- Organization: At Home
unk6 <unk6@rz.uni-karlsruhe.de> wrote:
> I am just wondering. I am currently hacking using clisp-1996-07-22 and
> it seems to have some problems:
>
> - Sometimes CLISP dies badly with no appearing reason. Even
> evaluating a symbol from the REP could do that. This could be
> pretty nice my own code, but I am clueless here.
I don't know whether this is the reason, but I recently found a bug in
the REP which has been around for a long time. The bug is that the
jmpbuf used to store the return point for the REP has gone out of scope,
but a lot of compilers might not be bothered since the space may have
still been allocated on the stack.
Here is the patch (for clisp-1996-07-22, but it should apply to all
versions)
Pete
*** debug.d.old Sun Jul 21 16:04:50 1996
--- debug.d Wed Oct 23 02:43:55 1996
***************
*** 281,295 ****
returner_and_data.old_NUM_STACK_normal = NUM_STACK_normal;
#endif
finish_entry_frame(DRIVER,&!returner_and_data.returner,,;);
}
- # Hier ist der Einsprungpunkt.
- loop
- { # (SYS::READ-EVAL-PRINT "> ") ausf|hren:
- pushSTACK(O(prompt_string)); # Prompt "> "
- funcall(L(read_eval_print),1);
- if (eq(value1,T)) break; # EOF gelesen -> Schleife beenden
- }
- skipSTACK(2); # Driver-Frame auflvsen
}
# Startet einen untergeordneten Driver (Read-Eval-Print-Loop)
--- 281,295 ----
returner_and_data.old_NUM_STACK_normal = NUM_STACK_normal;
#endif
finish_entry_frame(DRIVER,&!returner_and_data.returner,,;);
+ # Hier ist der Einsprungpunkt.
+ loop
+ { # (SYS::READ-EVAL-PRINT "> ") ausf|hren:
+ pushSTACK(O(prompt_string)); # Prompt "> "
+ funcall(L(read_eval_print),1);
+ if (eq(value1,T)) break; # EOF gelesen -> Schleife beenden
+ }
+ skipSTACK(2); # Driver-Frame auflvsen
}
}
# Startet einen untergeordneten Driver (Read-Eval-Print-Loop)