Procházet zdrojové kódy

stage C cleanup: delete the dead forward-variable text-patching

The L7 flip made Lower resolve forward designators by name at lower
time, so the QbeGen text-patching that rewrote placeholder symbols in
the buffered image is dead: FwdPatchAll was reached only via
FwdDesignator/FwdPatch (both already gone) and nFwd was never
incremented.

Deleted from QbeGen.mod: FwdMangle, FixLoadClass, FixStoreClass,
BufReplaceAll, FwdPatchAll, the nFwd/dbgFwd/fwdSite/fwdOper/fwdGlob
vars, and the FwdPatchAll call in EndModule.  Deleted the dead
SymTab.FwdVarName1 wrapper.

The grammar/SymTab half (FwdVarRef/Resolve/Name/Type, IsFwdVar, the
Design forward branch, FwdVarNote/FwdVarFlush) stays: it is the
mechanism that tolerates a not-yet-declared module global during parse
and reports 201 at module end.  Removing it needs the resolve/check
pass (plan-two-phase sec.2).

Suite 189/189; fixpoint OK (3,424,520 bytes).
Eric Streit před 1 týdnem
rodič
revize
38518c26a1
2 změnil soubory, kde provedl 0 přidání a 146 odebrání
  1. 0 141
      compiler/src/QbeGen.mod
  2. 0 5
      compiler/src/SymTab.mod

+ 0 - 141
compiler/src/QbeGen.mod

@@ -99,15 +99,6 @@ VAR
   nVal : ARRAY [0 .. 255] OF QVal;  (* VAR-actual note keys *)
   nVal : ARRAY [0 .. 255] OF QVal;  (* VAR-actual note keys *)
   nAddr : ARRAY [0 .. 255] OF QVal; (* VAR-actual note addresses *)
   nAddr : ARRAY [0 .. 255] OF QVal; (* VAR-actual note addresses *)
   nn : CARDINAL;
   nn : CARDINAL;
-  (* Forward-global designator patch sites: a not-yet-declared
-     identifier inside a procedure body emits "site =l copy 0" plus a
-     load/store operand "fwd<id>"; both are text-patched once the
-     module's declarations are complete. *)
-  nFwd : CARDINAL;
-  dbgFwd : INTEGER;
-  fwdSite : ARRAY [0 .. 255] OF SymTab.Name;  (* real name to patch in *)
-  fwdOper : ARRAY [0 .. 255] OF QVal;         (* final load/store class *)
-  fwdGlob : ARRAY [0 .. 255] OF BOOLEAN;
   (* Session-state snapshot: Lower runs per unit while the grammar's
   (* Session-state snapshot: Lower runs per unit while the grammar's
      suppressed inline emit still mutates these, so Lower saves/restores
      suppressed inline emit still mutates these, so Lower saves/restores
      its own values around each unit. *)
      its own values around each unit. *)
@@ -349,137 +340,6 @@ PROCEDURE AppNum (VAR d: ARRAY OF CHAR; v: CARDINAL);
     END
     END
   END AppNum;
   END AppNum;
 
 
-PROCEDURE FwdMangle (id: INTEGER; VAR q: QVal);
-  BEGIN
-    Cpy(q, "$fwd");
-    AppNum(q, VAL(CARDINAL, id))
-  END FwdMangle;
-
-PROCEDURE FixLoadClass (ph: ARRAY OF CHAR; cls: CHAR);
-(* Re-class "<tmp> =<x> load<x> <ph>" -> "<tmp> =<cls> load<cls> <ph>".
-   The default emit for an unresolved alias is `l` (pointer-like). *)
-  VAR i, j, n: CARDINAL; found: BOOLEAN;
-  BEGIN
-    n := Len(ph);
-    i := 0;
-    WHILE i + n <= sessUsed DO
-      (* "=c loadc " is 9 chars: '=', c, ' ', 'l','o','a','d', c, ' ' *)
-      found := (i + 9 + n <= sessUsed);
-      IF found THEN
-        found := (sessBuf[i] = "=")
-                 AND (sessBuf[i+2] = " ")
-                 AND (sessBuf[i+3] = "l") AND (sessBuf[i+4] = "o")
-                 AND (sessBuf[i+5] = "a") AND (sessBuf[i+6] = "d")
-                 AND (sessBuf[i+8] = " ")
-                 AND (sessBuf[i+1] = sessBuf[i+7])
-      END;
-      IF found THEN
-        j := 0; found := TRUE;
-        WHILE (j < n) AND found DO
-          IF sessBuf[i + 9 + j] # ph[j] THEN found := FALSE END; INC(j)
-        END
-      END;
-      IF found THEN
-        sessBuf[i + 1] := cls;
-        sessBuf[i + 7] := cls
-      END;
-      INC(i)
-    END
-  END FixLoadClass;
-
-PROCEDURE FixStoreClass (ph: ARRAY OF CHAR; cls: CHAR);
-(* Re-class "store<x> <val>, <ph>" -> "store<cls> <val>, <ph>": blinks
-   the opcode word that opens the line holding the operand <ph>. *)
-  VAR i, j, n: CARDINAL; found: BOOLEAN;
-  BEGIN
-    n := Len(ph);
-    i := 0;
-    WHILE i + n <= sessUsed DO
-      found := TRUE; j := 0;
-      WHILE (j < n) AND found DO
-        IF sessBuf[i + j] # ph[j] THEN found := FALSE END; INC(j)
-      END;
-      IF found THEN
-        j := i;
-        WHILE (j > 0) AND (sessBuf[j - 1] # CHR(10)) DO DEC(j) END;
-        WHILE (j < i) AND ((sessBuf[j] = " ") OR (sessBuf[j] = CHR(9))) DO
-          INC(j)
-        END;
-        IF (j + 6 <= i)
-           AND (sessBuf[j] = "s") AND (sessBuf[j+1] = "t")
-           AND (sessBuf[j+2] = "o") AND (sessBuf[j+3] = "r")
-           AND (sessBuf[j+4] = "e") THEN
-          sessBuf[j + 5] := cls
-        END
-      END;
-      INC(i)
-    END
-  END FixStoreClass;
-
-PROCEDURE BufReplaceAll (pat, rep: ARRAY OF CHAR);
-(* Literal substring replacement over sessBuf (in place, memmove
-   semantics for both growth and shrink). *)
-  VAR i, j: CARDINAL; n, m, tail, k: CARDINAL; found: BOOLEAN;
-  BEGIN
-    n := Len(pat); m := Len(rep);
-    IF (n = 0) OR (m = 0) THEN RETURN END;
-    i := 0;
-    WHILE i + n <= sessUsed DO
-      found := TRUE; j := 0;
-      WHILE (j < n) AND found DO
-        IF sessBuf[i + j] # pat[j] THEN found := FALSE END; INC(j)
-      END;
-      IF NOT found THEN INC(i)
-      ELSE
-        IF m > n THEN
-          tail := sessUsed;
-          k := m - n;
-          IF tail + k <= HIGH(sessBuf) THEN
-            WHILE tail > i + n DO
-              DEC(tail);
-              sessBuf[tail + k] := sessBuf[tail]
-            END;
-            sessUsed := sessUsed + k
-          END
-        ELSIF m < n THEN
-          tail := i + n;
-          k := n - m;
-          WHILE tail < sessUsed DO
-            sessBuf[tail - k] := sessBuf[tail]; INC(tail)
-          END;
-          sessUsed := sessUsed - k
-        END;
-        j := 0;
-        WHILE j < m DO sessBuf[i + j] := rep[j]; INC(j) END;
-        i := i + m
-      END
-    END;
-    IF sessUsed <= HIGH(sessBuf) THEN sessBuf[sessUsed] := CHR(0) END
-  END BufReplaceAll;
-
-PROCEDURE FwdPatchAll;
-(* Rewrites each forward placeholder into the real designator, and
-   re-classes the load that reads through it.  Loads are emitted by the
-   frontend as "<tmp> =<x> load<x> <ph>"; the default class is `w`, so
-   for a `d`/`l` slot the opcode is rewritten to loadd/loadl.  Stores
-   are emitted as "store<x> <val>, <ph>"; the class letter of the store
-   is rewritten in place. *)
-  VAR k: INTEGER; ph, sym: QVal; c: CHAR;
-  BEGIN
-    k := 0;
-    WHILE k < VAL(INTEGER, nFwd) DO
-      IF fwdSite[k][0] # CHR(0) THEN
-        FwdMangle(k + 1, ph);
-        Cpy(sym, fwdSite[k]);
-        IF fwdOper[k][0] = CHR(0) THEN c := "w" ELSE c := fwdOper[k][0] END;
-        FixLoadClass(ph, c);
-        FixStoreClass(ph, c);
-        BufReplaceAll(ph, sym)
-      END;
-      INC(k)
-    END;
-    nFwd := 0
-  END FwdPatchAll;
 
 
 
 
 
 
@@ -912,7 +772,6 @@ PROCEDURE EndModule (name: ARRAY OF CHAR);
     FlushUStrings;
     FlushUStrings;
     FlushCtors;
     FlushCtors;
     EmitVTables;
     EmitVTables;
-    FwdPatchAll;
     (* the image is named after the program module *)
     (* the image is named after the program module *)
     fname[0] := CHR(0);
     fname[0] := CHR(0);
     App(fname, "gen_ssa/");
     App(fname, "gen_ssa/");

+ 0 - 5
compiler/src/SymTab.mod

@@ -2614,11 +2614,6 @@ PROCEDURE FwdVarResolve (id: INTEGER): BOOLEAN;
     RETURN TRUE
     RETURN TRUE
   END FwdVarResolve;
   END FwdVarResolve;
 
 
-PROCEDURE FwdVarName1 (id: INTEGER; VAR name: Name);
-  BEGIN
-    FwdVarName(id, name)
-  END FwdVarName1;
-
 PROCEDURE ImportFrom (mod, name: ARRAY OF CHAR): BOOLEAN;
 PROCEDURE ImportFrom (mod, name: ARRAY OF CHAR): BOOLEAN;
   BEGIN
   BEGIN
     RETURN Materialize(mod, name)
     RETURN Materialize(mod, name)