Skip to content

Commit 0bbd8dd

Browse files
ruvac
authored andcommitted
fix incorrect initialization of macroopt, add protection
1 parent c692ae3 commit 0bbd8dd

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed

lib/SPF.ERR

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
-2009 Library not found
162162
-2010 Procedure not found
163163
-2011 Unknown vocabulary
164+
-2301 macroopt: ���ਥ����� OP0 ��। �믮������� SetOP
164165
0xC0000001L UNSUCCESSFUL
165166
0x00000000L WAIT_0
166167
0x00000080L ABANDONED_WAIT_0

lib/SPF.eng.ERR

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
-2009 Library not found
162162
-2010 Procedure not found
163163
-2011 Unknown vocabulary
164+
-2301 macroopt: unacceptable OP0 before executing SetOP
164165
0xC0000001L UNSUCCESSFUL
165166
0x00000000L WAIT_0
166167
0x00000080L ABANDONED_WAIT_0

src/macroopt.f

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,23 @@
5959
DROP
6060

6161
: SetOP ( -- )
62+
DP @ OP0 @ = IF -8FD THROW THEN \ -2301 THROW \ do not alow OP1 be the same as OP0
6263
OP0 OP1 OpBuffSize CELL- CMOVE>
6364
DP @ OP0 !
6465
;
66+
( Ìíîãèå ïðàâèëà îïòèìèçàòîðà ðàáîòàþò íåâåðíî åñëè OP0 óêàçûâàåò íà òîò æå àäðåñ ÷òî è OP1
67+
Òàêîå ìîæåò ïðîèçîéòè åñëè ìåæäó âûçîâûìè SetOP çíà÷åíèå HERE íå ìåíÿåòñÿ,
68+
èëè OP0 óêàçûâàåò íà HERE ïåðåä âûçîâîì SetOP [â òîì ÷èñëå êàê ñëåäñòâèå].
69+
70+
Ïîýòîìó, â SetOP äîáàâëåíà çàùèòà îò òàêîé ñèòóàöèè.
71+
72+
Äî ââåäåíèÿ çàùèòû îøèáêó äåìîíñòðèðîâàë êîä:
73+
SetOP 1 2 :NONAME SWAP ; EXECUTE . . \ -> 5687064 1
74+
 ýòîì ñëó÷àå íåâåðíî ñðàáàòûâàåò ïðàâèëî "M\ 15A" ò.ê. OP1 ... MOV_EDX_[EBP] ... äàåò TRUE
75+
â ñèëó òîãî, ÷òî âûðàæåíèå [ OP1 ] "@ 2+ C@ OP0 @ 2+ C@ =" òîæäåñòâåííî TRUE.
76+
77+
2015-12-26 ~ruv
78+
)
6579

6680
: ToOP0 ( OPn -- )
6781
OP0 OpBuffSize CELL- CMOVE ;

src/spf_init.f

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,6 @@
202202
[ELSE]
203203
: (INIT)
204204
[THEN]
205-
SetOP
206205
NATIVE-LINES
207206
0 TO H-STDLOG
208207
CONSOLE-HANDLES

0 commit comments

Comments
 (0)