1
0
mirror of synced 2026-02-11 19:04:55 +00:00

Fix problems due to FX record incompatibly on SPY, miscompiled (#1561)

* Fix problems due to FX record incompatibly on SPY, miscompiled

* PROC recompile for safe measure

* Add ASTACK.LCOM, also needed recompile!
This commit is contained in:
Larry Masinter
2024-02-28 18:33:28 -08:00
committed by GitHub
parent d48bd9f77a
commit 174bbe8e14
6 changed files with 272 additions and 498 deletions

View File

@@ -1,13 +1,13 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "28-Jul-2023 20:13:45" {DSK}<home>larry>il>medley>library>SPY.;4 64149
(FILECREATED "27-Feb-2024 20:25:02" {DSK}<home>larry>il>medley>SPY.;1 53724
:EDIT-BY "lmm"
:CHANGES-TO (VARS SPYCOMS)
(FNS \SPY.INTERRUPT SPY.BUFFER.ENTRY SPY.ADD.ENTRY)
:CHANGES-TO (RECORDS FX)
(VARS SPYOBJCOMS)
:PREVIOUS-DATE " 4-Jan-2022 14:09:48" {DSK}<home>larry>il>medley>library>SPY.;1)
:PREVIOUS-DATE "28-Jul-2023 20:13:45" {DSK}<home>larry>il>medley>library>SPY.;1)
(PRETTYCOMPRINT SPYCOMS)
@@ -114,7 +114,7 @@
(FUNCTION SPYOBJ.BUTTON)
(FUNCTION SPYOBJ.COPYIN)
NIL NIL NIL NIL NIL NIL 'SPYNODE]
(DECLARE%: DONTCOPY DOEVAL@COMPILE (RECORDS FX SPYOBJDATA))
(DECLARE%: DONTCOPY DOEVAL@COMPILE (RECORDS SPYOBJDATA))
(INITRECORDS SPYOBJDATA)))
(DEFINEQ
@@ -189,134 +189,6 @@
(DECLARE%: DONTCOPY DOEVAL@COMPILE
(DECLARE%: EVAL@COMPILE
(ACCESSFNS FX ((FXBLOCK (ADDSTACKBASE DATUM))) (* ; "frame extension index")
(BLOCKRECORD FXBLOCK ((FLAGS BITS 3) (* ; "= \STK.FX")
(FAST FLAG)
(NIL FLAG)
(INCALL FLAG) (* ;
 "set when fncall microcode has to punt")
(VALIDNAMETABLE FLAG) (* ;
 "if on, NAMETABLE field is filled in. If off, is same as FNHEADER")
(NOPUSH FLAG) (* ;
 "when returning to this frame, don't push a value. Set by interrupt code")
(USECNT BITS 8)
(%#ALINK WORD) (* ; "low bit is SLOWP")
(FNHEADER FULLXPOINTER)
(NEXTBLOCK WORD)
(PC WORD)
(NAMETABLE# FULLXPOINTER)
(%#BLINK WORD)
(%#CLINK WORD)))
(BLOCKRECORD FXBLOCK ((FLAGBYTE BYTE)
(NIL BYTE)
(NIL BITS 15) (* ; "most of the bits of #ALINK")
(SLOWP FLAG) (* ;
 "if on, then BLINK and CLINK fields are valid. If off, they are implicit")
(NIL FULLXPOINTER 2)
(NAMETABHI WORD)
(NAMETABLO WORD)))
(TYPE? (IEQ (fetch (FX FLAGS) of DATUM)
\STK.FX))
[ACCESSFNS FX ((NAMETABLE (COND
((fetch (FX VALIDNAMETABLE) of DATUM)
(fetch (FX NAMETABLE#) of DATUM))
(T (fetch (FX FNHEADER) of DATUM)))
(PROGN (replace (FX FAST) of DATUM with NIL)
(replace (FX NAMETABLE#) of DATUM with NEWVALUE)
(replace (FX VALIDNAMETABLE) of DATUM with T)))
(FRAMENAME (fetch (FNHEADER FRAMENAME) of (fetch (FX NAMETABLE)
of DATUM)))
(INVALIDP (EQ DATUM 0)) (* ;
 "true when A/CLink points at nobody, i.e. FX is bottom of stack")
[FASTP (NOT (fetch (FX SLOWP) of DATUM))
(PROGN (CHECK (NULL NEWVALUE))
(COND
((fetch (FX FASTP) of DATUM)
(replace (FX %#BLINK) of DATUM
with (fetch (FX DUMMYBF) of DATUM))
(replace (FX %#CLINK) of DATUM
with (fetch (FX %#ALINK) of DATUM))
(replace (FX SLOWP) of DATUM with T]
[BLINK (COND
((fetch (FX FASTP) of DATUM)
(fetch (FX DUMMYBF) of DATUM))
(T (fetch (FX %#BLINK) of DATUM)))
(PROGN (replace (FX %#BLINK) of DATUM with NEWVALUE)
(COND
((fetch (FX FASTP) of DATUM)
(replace (FX %#CLINK) of DATUM
with (fetch (FX %#ALINK) of DATUM))
(replace (FX SLOWP) of DATUM with T]
[CLINK (IDIFFERENCE (COND
((fetch (FX FASTP) of DATUM)
(fetch (FX %#ALINK) of DATUM))
(T (fetch (FX %#CLINK) of DATUM)))
\#ALINK.OFFSET)
(PROGN (replace (FX %#CLINK) of DATUM with (IPLUS NEWVALUE
\#ALINK.OFFSET)
)
(COND
((fetch (FX FASTP) of DATUM)
(replace (FX %#BLINK) of DATUM
with (fetch (FX DUMMYBF) of DATUM))
(replace (FX SLOWP) of DATUM with T]
[ALINK (IDIFFERENCE (FLOOR (fetch (FX %#ALINK) of DATUM)
WORDSPERCELL)
\#ALINK.OFFSET)
(PROGN [COND
((fetch (FX FASTP) of DATUM)
(replace (FX %#BLINK) of DATUM
with (fetch (FX DUMMYBF) of DATUM))
(replace (FX %#CLINK) of DATUM
with (fetch (FX %#ALINK) of DATUM]
(replace (FX %#ALINK) of DATUM with (IPLUS NEWVALUE
\#ALINK.OFFSET
(SUB1
WORDSPERCELL
]
[ACLINK (SHOULDNT)
(PROGN [COND
((fetch (FX FASTP) of DATUM)
(replace (FX %#BLINK) of DATUM
with (fetch (FX DUMMYBF) of DATUM]
(replace (FX %#CLINK) of DATUM with (IPLUS NEWVALUE
\#ALINK.OFFSET)
)
(replace (FX %#ALINK) of DATUM with (IPLUS NEWVALUE
\#ALINK.OFFSET
(SUB1
WORDSPERCELL
]
(* ;
 "replaces A & C Links at once more efficiently than separately")
(DUMMYBF (IDIFFERENCE DATUM WORDSPERCELL))
(* ;; "This is either an actual BF or %"residual%" BF that provides enough BF to find its IVAR slot. This means that when a FX is copied, the cell preceding the FX is copied too.")
(IVAR (fetch (BF IVAR) of (fetch (FX DUMMYBF) of DATUM)))
[CHECKED (AND (type? FX DATUM)
(OR (IEQ (fetch (FX DUMMYBF) of DATUM)
(fetch (FX BLINK) of DATUM))
(AND (fetch (BF RESIDUAL) of (fetch (FX DUMMYBF)
of DATUM))
(IEQ (fetch (BF IVAR) of (fetch (FX DUMMYBF)
of DATUM))
(fetch (BF IVAR) of (fetch (FX BLINK)
of DATUM]
(FIRSTPVAR (IPLUS DATUM (fetch (FX FXSIZE) of T)))
(* ; "stack offset of PVAR0")
(FXSIZE (PROGN 10)) (* ;
 "fixed overhead from flags thru clink")
(PADDING (PROGN 4)) (* ;
 "doublecell of garbage for microcode use")
(FIRSTTEMP (IPLUS (fetch (FX FIRSTPVAR) of DATUM)
(fetch (FX NPVARWORDS) of DATUM)
(fetch (FX PADDING) of DATUM)))
(* ;
 "note that NPVARWORDS is obtained from the FNHEADER")
(SIZE (IDIFFERENCE (fetch (FX NEXTBLOCK) of DATUM)
DATUM])
(RECORD SPYOBJDATA (CACHEDLABEL PERCENT LABEL))
)
)
@@ -1053,17 +925,17 @@
(MOVD? 'NILL 'MODERNWINDOW)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (4707 7314 (SPYOBJ 4717 . 5006) (SPYOBJ.BUTTON 5008 . 5118) (SPYOBJ.SAVE 5120 . 5239) (
SPYOBJ.COPY 5241 . 5303) (SPYOBJ.GET 5305 . 5434) (SPYOBJ.IMAGEBOX 5436 . 5960) (SPYOBJ.DISPLAY 5962
. 6261) (SPYOBJ.LABEL 6263 . 6399) (SPYOBJ.HEIGHT 6401 . 6614) (SPYOBJ.COPYIN 6616 . 6659) (
SPY.COPYBUTTON 6661 . 6753) (SPY.MERGEINFO 6755 . 7312)) (18156 60387 (SPY.FIND.TREE 18166 . 18575) (
SPY.TOGGLE 18577 . 18767) (SPY.TREE 18769 . 19881) (SPY.LEGEND 19883 . 20233) (SPY.GRAPH.EDITOR 20235
. 29800) (SPY.END 29802 . 30044) (SPY.MAKEGRAPHNODES 30046 . 32146) (SPY.MAX 32148 . 33031) (
SPY.MERGE 33033 . 34464) (SPY.MERGE1 34466 . 40949) (SPY.MERGETREE 40951 . 43881) (SPY.NEXT.TREE 43883
. 44557) (SPY.SUM 44559 . 45248) (SPY.TITLE 45250 . 45467) (SPY.MAKE.TREE 45469 . 47494) (
SPY.UPDATE.TITLE 47496 . 50072) (SPY.DELETE 50074 . 50609) (SPY.DRAWBOX 50611 . 51136) (
SPY.BUFFER.ENTRY 51138 . 51481) (SPY.BUTTON 51483 . 52052) (SPY.END.ENTRY 52054 . 52134) (SPY.START
52136 . 52420) (SPY.INIT 52422 . 52657) (\SPY.INTERRUPT 52659 . 54064) (SPY.DUMP.BUFFER 54066 . 55526)
(SPY.START.ENTRY 55528 . 55656) (SPY.ADD.ENTRY 55658 . 56090) (SPY.ORIGINAL 56092 . 56919) (
SPY.OVERFLOW 56921 . 57022) (SPY.MERGE.CALLEES 57024 . 60060) (SPY.PRINT 60062 . 60385)))))
(FILEMAP (NIL (4660 7267 (SPYOBJ 4670 . 4959) (SPYOBJ.BUTTON 4961 . 5071) (SPYOBJ.SAVE 5073 . 5192) (
SPYOBJ.COPY 5194 . 5256) (SPYOBJ.GET 5258 . 5387) (SPYOBJ.IMAGEBOX 5389 . 5913) (SPYOBJ.DISPLAY 5915
. 6214) (SPYOBJ.LABEL 6216 . 6352) (SPYOBJ.HEIGHT 6354 . 6567) (SPYOBJ.COPYIN 6569 . 6612) (
SPY.COPYBUTTON 6614 . 6706) (SPY.MERGEINFO 6708 . 7265)) (7731 49962 (SPY.FIND.TREE 7741 . 8150) (
SPY.TOGGLE 8152 . 8342) (SPY.TREE 8344 . 9456) (SPY.LEGEND 9458 . 9808) (SPY.GRAPH.EDITOR 9810 . 19375
) (SPY.END 19377 . 19619) (SPY.MAKEGRAPHNODES 19621 . 21721) (SPY.MAX 21723 . 22606) (SPY.MERGE 22608
. 24039) (SPY.MERGE1 24041 . 30524) (SPY.MERGETREE 30526 . 33456) (SPY.NEXT.TREE 33458 . 34132) (
SPY.SUM 34134 . 34823) (SPY.TITLE 34825 . 35042) (SPY.MAKE.TREE 35044 . 37069) (SPY.UPDATE.TITLE 37071
. 39647) (SPY.DELETE 39649 . 40184) (SPY.DRAWBOX 40186 . 40711) (SPY.BUFFER.ENTRY 40713 . 41056) (
SPY.BUTTON 41058 . 41627) (SPY.END.ENTRY 41629 . 41709) (SPY.START 41711 . 41995) (SPY.INIT 41997 .
42232) (\SPY.INTERRUPT 42234 . 43639) (SPY.DUMP.BUFFER 43641 . 45101) (SPY.START.ENTRY 45103 . 45231)
(SPY.ADD.ENTRY 45233 . 45665) (SPY.ORIGINAL 45667 . 46494) (SPY.OVERFLOW 46496 . 46597) (
SPY.MERGE.CALLEES 46599 . 49635) (SPY.PRINT 49637 . 49960)))))
STOP

Binary file not shown.