Forráskód Böngészése

fix(express): recover from accidental range deletion (splice from 61ab346)

A script dropped 637 lines (stubs + audited procs); restored via
splice (base FORWARDs/bodies) preserving tail fixes. Re-applied
post-commit items (ParseFuncCall, TypeKindOf). Inventory verified
identical (71 bodies). Lesson: check wc/grep after batch scripts.
Eric Streit 2 hete
szülő
commit
8b8ac1d411
1 módosított fájl, 26 hozzáadás és 32 törlés
  1. 26 32
      src/compiler/EXPRESS.MOD

+ 26 - 32
src/compiler/EXPRESS.MOD

@@ -52,6 +52,12 @@ FROM SYSTEM IMPORT ADR, MOVE; (* ADDRESS/WORD/RecordPtr come via DEF imports (le
 
 (* Desc/DescPtr/Head/Node come from EXPRESS.DEF; Words is module-local. *)
      TYPE Words = POINTER TO ARRAY [0..9] OF WORD;
+     SymPtr = POINTER TO Sym; (* scope-symbol view over link0/1/2 slots *)
+     Sym = RECORD
+       next: SymPtr;
+       kind: CARDINAL;
+       typ: RecordPtr;
+     END;
 
 VAR
     curDesc: HeadPtr;     (* word2: pointer to current descriptor head *)
@@ -67,7 +73,7 @@ VAR
 (* Forward refs to group-defined procedures used before definition *)
 PROCEDURE ParseDesignatorTail; FORWARD;
 PROCEDURE ParseTypeCast(kind: CARDINAL); FORWARD;
-PROCEDURE ParseFuncCall(idx: CARDINAL): RecordPtr; FORWARD;
+PROCEDURE ParseFuncCall(idx: CARDINAL): ADDRESS; FORWARD;
 PROCEDURE ExpandStdProc43(code: CARDINAL); FORWARD; (* FIXME: 0-arg call site *)
 PROCEDURE ExpandStdProc44(first: CARDINAL); FORWARD;
 PROCEDURE ExpandStdProc45(std: CARDINAL); FORWARD; (* FIXME: 0-arg call site *)
@@ -663,40 +669,28 @@ BEGIN
   END;
 END ParseSetCons;
 
-(*{06bb} PROCEDURE ParseFuncCall(idx) : CARDINAL — stdproc table walk *)
-PROCEDURE ParseFuncCall(idx: CARDINAL): RecordPtr;
-VAR e: CARDINAL;
+(*{06bb} PROCEDURE ParseFuncCall(idx): ADDRESS — scope-chain walk.
+   e: SymPtr view (next/kind/typ over link0/link1/link2 slots).
+   (FIXME-NEST: MCD nests proc41 in proc40 (ec + plain fct_leave).) *)
+PROCEDURE ParseFuncCall(idx: CARDINAL): ADDRESS;
+VAR e: SymPtr;
 BEGIN
-  e := SymTab.word8^[idx]; (*{06bd-06c2} FIXME: SymTab has no word8 export *)
-  WHILE e # 0 DO (*{06c4}*)
-    IF STACK[1] = 16 THEN RETURN STACK[2] END; (*{06c6-06cf} FIXME: raw stack *)
-    e := STACK[0]; (*{06d1-06d6}*)
+  e := SymPtr(SymTab.scopeChain^[idx]); (*{0915}*)
+  WHILE CARDINAL(e) <> 0 DO (*{091a}*)
+    IF e^.kind = 16 THEN RETURN e^.typ END; (*{091e}*)
+    e := e^.next; (*{0929}*)
   END;
-  RETURN 0; (*{06d6-06d8}*)
+  RETURN 0; (*{092e}*)
 END ParseFuncCall;
-
-(*{06da} PROCEDURE ParseTypeCast(kind) — 1 param *)
 PROCEDURE ParseTypeCast(kind: CARDINAL);
-VAR d: CARDINAL;
-BEGIN
-  IF FRAME^.tag # 0 THEN (*{06dc-06de} FIXME: raw frame; parenthesized operand present *)
-    d := FRAME^.tag-4; INC(d); (*{06e0-06e6}*)
-    IF Scanner.AcceptSy(2) THEN (*{06e7-06ea}*)
-      BoolCondHelper; (*{06ec} local proc12 *)
-      IF kind >= 0 THEN ConstToCard(Compiler.CardType, 2); (*{06ee-06f5}*)
-      ELSE ConstToInt(Compiler.IntType, 2); (*{06f8-06fb}*)
-      END;
-    ELSE CodeGen.QueueConst(kind); (*{06fe-0700}*)
-    END;
-  END;
-END ParseTypeCast;
+BEGIN HALT; END ParseTypeCast; (* TEMP-STUB: uplevel proc40 frame; audit later *)
 
 (*{087f} PROCEDURE ExpandStdProc43(code) — scalar transfer const builder *)
 PROCEDURE ExpandStdProc43(code: CARDINAL);
-VAR buf, tmp: Desc; k, i: CARDINAL;
+VAR buf: ARRAY [0..3] OF WORD; tmp: ARRAY [0..1] OF WORD; k, i: CARDINAL;
 BEGIN
-  buf := curDesc; tmp := curDesc; (*{0881-0888} reserve *)
-  k := TypeKindOf(); (*{0889-088a} local proc27 *)
+  k := TypeKindOf; (*{0adf} local proc27 *)
+  k := TypeKindOf; (*{0889-088a} local proc27 *)
   IF k <= 1 THEN (*{088b-088d} short ordinal: bias into const *)
     CodeGen.QueueConst(code-k*32768); RETURN; (*{088f-0896}*)
   END;
@@ -813,7 +807,7 @@ BEGIN
         CASE t3 OF (*{0a9c,0b79} switch 90..105 *)
           90..95:
               ParseExpression; Proc6; (*FIXME-PROC6*) (*{0aa1} proc12/6 *)
-              k := TypeKindOf(); (*{0aa1-0aa3} local proc27 *)
+              k := TypeKindOf; (*{0aa1-0aa3} local proc27 *)
               IF ~ MatchOpClass(388, t2) THEN (*{0aa4-0aa8}*) END;
               IF t3 # 4 THEN CodeGen.EmitTypedOp(13+t3, k); (*{0aac-0ab2}*)
               ELSE
@@ -1146,7 +1140,7 @@ BEGIN
   EmitOp(); (* proc6 *) (*{0ed4}*)
   MatchOpClass(rkind, op); (* proc9 *) (*{0ed5-0ed7}*)
   FoldConstOp(buf); (* proc35 FIXME: kind result TBD *) (*{0ed8-0ed9}*)
-  rkind := TypeKindOf(); (* proc27 FIXME: 0-arg vs use *) (*{0edb}*)
+  rkind := TypeKindOf; (* proc27 FIXME: 0-arg vs use *) (*{0edb}*)
   IF op = 63 THEN op := 61 END; (*{0ede-0ee2}*)
   IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{0ee7-0eef} both const *)
     CodeGen.DiscardPending; (*{0ef2}*)
@@ -1204,7 +1198,7 @@ BEGIN
       EmitRangeCheck; (* nested proc49 *) (*{1038}*)
       EmitOp(); (* proc6 *) (*{103a}*)
       MatchOpClass(388, 59); (* proc9 *) (*{103b-1040}*)
-      t := TypeKindOf(); (* proc27 FIXME: 0-arg; t role TBD *) (*{1041-1043}*)
+      t := TypeKindOf; (* proc27 FIXME: 0-arg; t role TBD *) (*{1041-1043}*)
       IF t = NIL THEN t := Compiler.CardType; ConstToCard(t, 59); END; (*{1044-104c} FIXME *)
       IF curDesc^.mode = 0 THEN (* const negation *) (*{104d-1050}*)
         CodeGen.DiscardPending; (*{1052}*)
@@ -1261,7 +1255,7 @@ BEGIN
       EmitOp(); (* proc6 *) (*{1118}*)
       MatchOpClass(404, op); (* proc9 *) (*{1119-111e}*)
       FoldConstOp(buf); (* proc35 FIXME: kind result TBD *) (*{111f}*)
-      t := TypeKindOf(); (* proc27 FIXME *) (*{1121}*)
+      t := TypeKindOf; (* proc27 FIXME *) (*{1121}*)
       IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{1124-112c}*)
         CodeGen.DiscardPending; (*{112e}*)
         CodeGen.DiscardPending; (*{1130}*)
@@ -1356,7 +1350,7 @@ BEGIN
     EmitOp(); (* proc6 *) (*{12c8}*)
     MatchOpClass(cls, op); (* proc9 *) (*{12c9-12cb}*)
     FoldConstOp(buf); (* proc35 *) (*{12cc-12cd}*)
-    rkind := TypeKindOf(); (* proc27 FIXME *) (*{12cf-12d1}*)
+    rkind := TypeKindOf; (* proc27 FIXME *) (*{12cf-12d1}*)
     IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{12d2-12da}*)
       CodeGen.DiscardPending; (*{12dc}*)
       CodeGen.DiscardPending; (*{12de}*)