[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
'(#B10 10)
- To: WGD at MIT-MC, KMP at MIT-MC, RLB at MIT-MC
- Subject: '(#B10 10)
- From: Jon L White <JONL at MIT-MC>
- Date: Sat, 9 May 81 20:55:00 GMT
- Cc: BUG-LISP at MIT-MC
- Original-date: 9 May 1981 16:55-EDT
Date: 7 APR 1981 0515-EST
From: WGD at MIT-MC (William G. Dubuque)
In MACLISP 2077 with SHARPM 72 and BASE = IBASE = 10, *NOPOINT = ()
'(#o10 10) ==> (8. 8.) !
--------
Date: 7 APR 1981 1409-EST
From: kmp at MIT-MC (Kent M. Pitman)
Subject: more on base
'(10 #8r10 10) => (10. 8. 8.)
'(10 #2r10 10) => (10. 2. 2.)
'(10 #o10 #.(print (list 'ibase= ibase 'base= base)) 10)
(IBASE= 10. BASE= 10.)
=> (10. 8. T 10.)
Maybe something about #. is re-initializing things...
Ha, TYIPEEK is the villain! It clobbers the variable used to hold both
a "reason" why TYI is called and the "re-entrancy level" of a call to read
-- BFPRDP. Aparently whoever put this variable into the reader is not the
same person who used it in TYIPEEK. Anyway, TYI and other functions interact
with it correctly, so I've edited the source to have TYIPEEK save-and-restore
this variable, just like the others.
At first RLB and I thought it was merely the fact that the reader was
"cache"ing the error-checked value of IBASE upon main entry, so I patched
a lot of save-and-restore around reader macro calls into the current LISP
dump. But upon closer inspection, I discovered that BFPRDP had the wrong
value when the SHARPM function for radix reads was calling READ (re-entrantly,
of course). Here is an example which shows TYIPEEK to be the villain:
;;Run this in OLISP^K to see the effect of the bug.
(defun RR ()
(let ((IBASE (caseq (tyi)
((#/X #/x) 16.)
((#/O #/o) 8)
((#/B #/b) 2)
(T (tyipeek)
(* 2 IBASE) ))))
(read)))
(setsyntax '/! 'macro 'RR)
(setq BASE (setq IBASE 10.))
'(!O10 10)
'(!X10 10)
'(!D10 10)
'(!B10 10)