Jelajahi Sumber

step5: open arrays, whole copy, strings, I/O, NIL trap; 99/99 tests green

Eric Streit 3 minggu lalu
induk
melakukan
26e9458c5d
3 mengubah file dengan 9 tambahan dan 3 penghapusan
  1. 9 3
      Interpreter.mod
  2. TEMPAT SAMPAH
      Interpreter.o
  3. TEMPAT SAMPAH
      mcint

+ 9 - 3
Interpreter.mod

@@ -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 ;

TEMPAT SAMPAH
Interpreter.o


TEMPAT SAMPAH
mcint