|
|
@@ -129,7 +129,7 @@ PROCEDURE LoadOperand; FORWARD;
|
|
|
PROCEDURE StoreOperand; FORWARD;
|
|
|
PROCEDURE CheckRelationTypes(t1: ADDRESS); FORWARD; (* audit: op unused in body *)
|
|
|
PROCEDURE FoldRelation(): ADDRESS; FORWARD;
|
|
|
-PROCEDURE ParseFactor(p1, p2, p3, p4, p5: CARDINAL); FORWARD; (* audit: name-to-slot mirrored pK->param(6-K); def+calls positionally consistent *)
|
|
|
+PROCEDURE ParseFactor(p1, p2, p3, p4, p5: CARDINAL); FORWARD; (* re-read: pK = paramK confirmed (InsertEntry-arg=param5, p2#0=param2, p3=9 test=param3); mirror hypothesis REJECTED, def stands *)
|
|
|
PROCEDURE EvalConstExpr; FORWARD;
|
|
|
PROCEDURE ParseSetOrCastTail; FORWARD;
|
|
|
PROCEDURE ParseAssignment; FORWARD;
|
|
|
@@ -138,7 +138,7 @@ PROCEDURE IsSet(t2, t1: Compiler.RecordPtr): BOOLEAN; FORWARD;
|
|
|
PROCEDURE BaseTypeOf(t2, t1: Compiler.RecordPtr): BOOLEAN; FORWARD;
|
|
|
PROCEDURE CheckAssignable; FORWARD;
|
|
|
PROCEDURE ParseSelector(sel: Compiler.RecordPtr; needVal: BOOLEAN; base: Compiler.RecordPtr); FORWARD;
|
|
|
-PROCEDURE ParseDesignatorBase(VAR ok1, ok2: BOOLEAN; VAR id1, id2: CARDINAL; p1, p2: CARDINAL): BOOLEAN; FORWARD; (* FIXME 3/4-arg sites; audit: fct_leave 132 = 4 words, not 6 formals *)
|
|
|
+PROCEDURE ParseDesignatorBase(finA, finB, probeA, probeB: CARDINAL): BOOLEAN; FORWARD; (* re-read: 4 formals (fct_leave 132); param4/param3 = final operands (formals 1-2), param2/param1 = probe keys (formals 3-4); ok1..id2 dropped (unused); probeA/B assignment by call order TBD *)
|
|
|
PROCEDURE GetTypeDesc(src: ADDRESS; dest: ADDRESS; mode: CARDINAL); FORWARD;
|
|
|
PROCEDURE CheckAssignmentCompat(dst: ADDRESS); FORWARD;
|
|
|
|
|
|
@@ -351,16 +351,15 @@ BEGIN
|
|
|
END MatchOpClass;
|
|
|
|
|
|
(* proc21 @02d0 — ~ParseDesignatorBase *)
|
|
|
-PROCEDURE ParseDesignatorBase(VAR ok1, ok2: BOOLEAN;
|
|
|
- VAR id1, id2: CARDINAL; p1, p2: CARDINAL): BOOLEAN;
|
|
|
+PROCEDURE ParseDesignatorBase(finA, finB, probeA, probeB: CARDINAL): BOOLEAN;
|
|
|
VAR
|
|
|
found1, found2: BOOLEAN; (* local-6, local-7 *)
|
|
|
w8, w9: CARDINAL; (* local-8, local-9 *)
|
|
|
f1, f2: CARDINAL; (* local-2, local-3 *)
|
|
|
BEGIN
|
|
|
{/* 02d0 */} (* double PASS1.CondInsert probe for qualified pair *)
|
|
|
- Pass1.CondInsert(p2, ADR(w8), ADR(f1), ADR(found1));
|
|
|
- Pass1.CondInsert(p1, ADR(w9), ADR(f2), ADR(found2));
|
|
|
+ Pass1.CondInsert(probeB, ADR(w8), ADR(f1), ADR(found1));
|
|
|
+ Pass1.CondInsert(probeA, ADR(w9), ADR(f2), ADR(found2));
|
|
|
{/* 02e6 */} (* walk while both found *)
|
|
|
WHILE found1 AND found2 DO
|
|
|
IF w8 <> w9 THEN RETURN FALSE END;
|
|
|
@@ -369,11 +368,11 @@ BEGIN
|
|
|
f1 := f1^.word5; f2 := f2^.word5;
|
|
|
END;
|
|
|
IF f1 <> f2 THEN RETURN FALSE END;
|
|
|
- Pass1.InsertEntry(p2, ADR(w8), ADR(f1), ADR(found1));
|
|
|
- Pass1.InsertEntry(p1, ADR(w9), ADR(f2), ADR(found2));
|
|
|
+ Pass1.InsertEntry(probeB, ADR(w8), ADR(f1), ADR(found1));
|
|
|
+ Pass1.InsertEntry(probeA, ADR(w9), ADR(f2), ADR(found2));
|
|
|
END;
|
|
|
{/* 0324 */} (* match iff same head and same tail selector *)
|
|
|
- RETURN (found1 = found2) AND (p2 = p1);
|
|
|
+ RETURN (found1 = found2) AND (finA = finB);
|
|
|
END ParseDesignatorBase;
|
|
|
|
|
|
(* proc36 @032f — ~CheckAssignable *)
|