|
|
@@ -331,6 +331,7 @@ BEGIN
|
|
|
Execute () ;
|
|
|
| 41H : (* load_stack_d0 *)
|
|
|
p := Pop () ;
|
|
|
+ IF p = 0 THEN Fatal ("NIL dereference") END ;
|
|
|
Push (ReadSlot (p)) ;
|
|
|
| 42H .. 4FH : (* load_global_n *)
|
|
|
Push (ReadSlot (GetGP () + VAL (LONGCARD, opc MOD 16) * 8)) ;
|
|
|
@@ -338,15 +339,18 @@ BEGIN
|
|
|
RETURN ;
|
|
|
| 51H : (* store_stack_d0 *)
|
|
|
p := Pop () ;
|
|
|
+ IF p = 0 THEN Fatal ("NIL dereference") END ;
|
|
|
WriteSlot (p, Pop ()) ;
|
|
|
| 52H .. 5FH : (* store_global_n *)
|
|
|
WriteSlot (GetGP () + VAL (LONGCARD, opc MOD 16) * 8, Pop ()) ;
|
|
|
|
|
|
| 60H .. 6FH : (* load_i_n *)
|
|
|
p := Pop () ;
|
|
|
+ IF p = 0 THEN Fatal ("NIL dereference") END ;
|
|
|
Push (ReadSlot (p + VAL (LONGCARD, opc MOD 16) * 8)) ;
|
|
|
| 70H .. 7FH : (* store_i_n *)
|
|
|
v := Pop () ; p := Pop () ;
|
|
|
+ IF p = 0 THEN Fatal ("NIL dereference") END ;
|
|
|
WriteSlot (p + VAL (LONGCARD, opc MOD 16) * 8, v) ;
|
|
|
|
|
|
| 80H : (* load_local_addr i8 *)
|
|
|
@@ -512,11 +516,13 @@ BEGIN
|
|
|
done := FALSE ;
|
|
|
WHILE NOT done DO
|
|
|
IF (np >= sz) OR (np >= ssz) THEN done := TRUE
|
|
|
- ELSIF ReadByte (src + np) = 0 THEN done := TRUE
|
|
|
+ ELSIF ReadByte (src + np) = 0 THEN
|
|
|
+ IF ReadByte (dst + np) # 0 THEN last := 1 END ;
|
|
|
+ done := TRUE
|
|
|
ELSIF ReadByte (src + np) > ReadByte (dst + np) THEN
|
|
|
- last := 1 ; done := TRUE
|
|
|
- ELSIF ReadByte (src + np) < ReadByte (dst + np) THEN
|
|
|
last := 2 ; done := TRUE
|
|
|
+ ELSIF ReadByte (src + np) < ReadByte (dst + np) THEN
|
|
|
+ last := 1 ; done := TRUE
|
|
|
ELSE
|
|
|
np := np + 1 ;
|
|
|
END ;
|