KCL patches (3b1)
Alex S. Crain
alex at umbc3.UMD.EDU
Tue Jan 3 10:28:06 AEST 1989
Welp, I finally got around to fixing the known bugs in the port
of KCL to the 3b1. The bugs are
1) KCL can't read circular structures, repeat by
>(defstruct a b)
A
>#0=#S(a b #0#)
Error: #0# is undefined.
Error signaled by SYSTEM:SHARP-S-READER.
Broken at NIL. Type :H for Help.
>>
2) printing bignums causes a value stack overflow, repeat by
>123123123123123123123
Error: Value Stack Overflow.
Illegal instruction (core dumped)
Neither of these bugs in unique the the 3b1 port, although the latter is unique
to the 68000 assembly math code that the 3b1 was based on. The math pathes fix
both version of the code.
following are diffs for 5 files:
lsp/defstruct.lsp }
lsp/defstruct.c } structure read
lsp/iolib.lsp } bug
lsp/iolib.c }
c/earith.c bignum bug
the patches to the .c files in the lsp directory fix the compiled lisp code,
so you don't have to recompile the sources (there probably isn't enough memory
anyway) so be sure to touch the .c .h and .data files for defstruct and iolib
so that the makefile won't invoke the lisp compiler.
:alex
Alex Crain
Systems Programmer alex at umbc3.umd.edu
Univ Md Baltimore County nerwin!alex at umbc3.umd.edu
------------------------- snip, snip, snip -----------------------------------
*** defstruct.c Sun Dec 25 23:23:05 1988
--- defstruct.c~ Thu Dec 29 19:51:41 1988
***************
*** 1328,1337
vs_top=sup;
T648:;
base[4]= base[0];
! base[5]= Ct;
! base[6]= Cnil;
! base[7]= Ct;
! vs_top=(vs_base=base+4)+4;
Lread();
vs_top=sup;
base[3]= vs_base[0];
--- 1328,1334 -----
vs_top=sup;
T648:;
base[4]= base[0];
! vs_top=(vs_base=base+4)+1
Lread();
vs_top=sup;
base[3]= vs_base[0];
*** iolib.c Thu Dec 29 19:26:04 1988
--- iolib.c~ Thu Dec 29 19:23:38 1988
***************
*** 528,537
vs_top=sup;
T171:;
base[4]= base[0];
! base[5]= Ct;
! base[6]= Cnil;
! base[7]= Ct;
! vs_top=(vs_base=base+4)+4;
Lread();
vs_top=sup;
base[3]= vs_base[0];
--- 528,534 -----
vs_top=sup;
T171:;
base[4]= base[0];
! vs_top=(vs_base=base+4)+1;
Lread();
vs_top=sup;
base[3]= vs_base[0];
*** earith.c Fri Dec 23 22:01:12 1988
--- earith.c~ Fri Dec 23 00:49:44 1988
***************
*** 510,516
asm(" addq.l &1,%d2");
asm(" mov.w &31,%d3");
asm("label2: sub.l %d0,%d1");
! asm(" bcc label1");
asm(" add.l %d0,%d1");
asm("label1: roxl.l &1,%d2");
asm(" roxl.l &1,%d1");
--- 510,516 -----
asm(" addq.l &1,%d2");
asm(" mov.w &31,%d3");
asm("label2: sub.l %d0,%d1");
! asm(" bcs label1");
asm(" add.l %d0,%d1");
asm("label1: roxl.l &1,%d2");
asm(" roxl.l &1,%d1");
*** defstruct.lsp Mon Jan 2 18:53:04 1989
--- defstruct.lsp~ Mon Jan 2 18:48:12 1989
***************
*** 548,554
(declare (ignore subchar))
(when (and arg (null *read-suppress*))
(error "An extra argument was supplied for the #S readmacro."))
! (let ((l (read stream t nil t)))
(unless (get (car l) 'is-a-structure)
(error "~S is not a structure." (car l)))
;; Intern keywords in the keyword package.
--- 548,554 -----
(declare (ignore subchar))
(when (and arg (null *read-suppress*))
(error "An extra argument was supplied for the #S readmacro."))
! (let ((l (read stream)))
(unless (get (car l) 'is-a-structure)
(error "~S is not a structure." (car l)))
;; Intern keywords in the keyword package.
*** iolib.lsp Mon Jan 2 18:52:43 1989
--- iolib.lsp~ Mon Jan 2 18:48:19 1989
***************
*** 126,132
(defun sharp-a-reader (stream subchar arg)
(declare (ignore subchar))
! (let ((initial-contents (read stream t nil t)))
(if *read-suppress*
nil
(do ((i 0 (1+ i))
--- 126,132 -----
(defun sharp-a-reader (stream subchar arg)
(declare (ignore subchar))
! (let ((initial-contents (read stream)))
(if *read-suppress*
nil
(do ((i 0 (1+ i))
--
:alex
Alex Crain
Systems Programmer alex at umbc3.umd.edu
Univ Md Baltimore County nerwin!alex at umbc3.umd.edu
More information about the Unix-pc.general
mailing list