ソースを参照

synchronized with original

Alexander Shiryaev 9 年 前
コミット
a4b091e06b

+ 3 - 3
BlackBox/Po/Files/ORG.Mod.txt

@@ -653,9 +653,9 @@ MODULE ORG; (* NW  18.4.2016  code generator in Oberon-07 for RISC*)
      VAR len: LONGINT;
    BEGIN loadAdr(x); len := x.type.len;
     IF len >= 0 THEN
-      IF y.b > len THEN ORS.Mark("string too long") END
-    ELSIF check THEN Put2(Ldr, RH, x.r, 4);  (*array length check*)
-      Put1(Cmp,RH, RH, y.b); Trap(NE, 3)
+      IF len <  y.b THEN ORS.Mark("string too long") END
+    ELSIF check THEN Put2(Ldr, RH, SP, x.a+4);  (*open array len, frame = 0hk*)
+      Put1(Cmp,RH, RH, y.b); Trap(LT, 3)
     END ;
     loadStringAdr(y);
     Put2(Ldr, RH, y.r, 0); Put1(Add, y.r, y.r, 4);

+ 2 - 1
BlackBox/Po/Files/ORP.Mod.txt

@@ -1,4 +1,4 @@
-MODULE ORP; (*N. Wirth 1.7.97 / 18.4.2016  Oberon compiler for RISC in Oberon-07*)
+MODULE ORP; (*N. Wirth 1.7.97 / 1.5.2016  Oberon compiler for RISC in Oberon-07*)
   IMPORT Texts, Oberon, ORS, ORB, ORG;
   (*Author: Niklaus Wirth, 2014.
     Parser of Oberon-RISC compiler. Uses Scanner ORS to obtain symbols (tokens),
@@ -205,6 +205,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 18.4.2016  Oberon compiler for RISC in Oberon-07
         END
       ELSIF (x.type.form = ORB.Array) & (par.type.form = ORB.Array) &
           (x.type.base = par.type.base) & (par.type.len < 0) THEN
+        IF ~par.rdo THEN CheckReadOnly(x) END ;
         ORG.OpenArrayParam(x)
       ELSIF (x.type.form = ORB.String) & varpar & par.rdo & (par.type.form = ORB.Array) & 
           (par.type.base.form = ORB.Char) & (par.type.len < 0) THEN ORG.StringParam(x)

BIN
BlackBox/Po/Mod/ORG.odc


BIN
BlackBox/Po/Mod/ORG3.odc


BIN
BlackBox/Po/Mod/ORP.odc


BIN
BlackBox/Po/Mod/ORP3.odc