|
@@ -28,7 +28,7 @@
|
|
|
Scanner.word13: unknown, kept + FIXME.
|
|
Scanner.word13: unknown, kept + FIXME.
|
|
|
- CodeGen.word5 = emitEnabled. Doubles.qcp/6/7/8/9/11 =
|
|
- CodeGen.word5 = emitEnabled. Doubles.qcp/6/7/8/9/11 =
|
|
|
qcp/qadd/qsub/qmul/qdiv/qneg (DEF order = proc order).
|
|
qcp/qadd/qsub/qmul/qdiv/qneg (DEF order = proc order).
|
|
|
- - Single-arg BaseTypeOf(X) calls = TypeKindOf (proc27); two-arg keeps
|
|
|
|
|
|
|
+ - Single-arg BaseTypeOf(X) calls = TypeKindOf() (proc27); two-arg keeps
|
|
|
BaseTypeOf (proc34). ParseCondValue() = BoolCondHelper (proc12).
|
|
BaseTypeOf (proc34). ParseCondValue() = BoolCondHelper (proc12).
|
|
|
- Errors.ReportErrorWithText 3rd args were HIGH() bounds — stripped.
|
|
- Errors.ReportErrorWithText 3rd args were HIGH() bounds — stripped.
|
|
|
|
|
|
|
@@ -118,7 +118,14 @@ BEGIN
|
|
|
RETURN (t^.word4 = 11) AND (CARDINAL(t^.word5) = CARDINAL(Compiler.CharType));
|
|
RETURN (t^.word4 = 11) AND (CARDINAL(t^.word5) = CARDINAL(Compiler.CharType));
|
|
|
END IsPointer;
|
|
END IsPointer;
|
|
|
PROCEDURE TypeKindOf(): CARDINAL;
|
|
PROCEDURE TypeKindOf(): CARDINAL;
|
|
|
-BEGIN HALT; END TypeKindOf;
|
|
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ CASE curDesc^.typ^.w4 OF
|
|
|
|
|
+ 98: RETURN (CARDINAL(curDesc^.typ^.w3) DIV 2) + 1;
|
|
|
|
|
+ | 97: RETURN 2;
|
|
|
|
|
+ | 94: RETURN 4;
|
|
|
|
|
+ ELSE RETURN ORD(RecordPtr(curDesc^.typ) = Compiler.IntType);
|
|
|
|
|
+ END;
|
|
|
|
|
+END TypeKindOf;
|
|
|
(* proc23 @002a stub — ~LookupField (tiny predicate; TBD by MCD audit). *)
|
|
(* proc23 @002a stub — ~LookupField (tiny predicate; TBD by MCD audit). *)
|
|
|
(* proc23 @002a — field-selector test. FIXME: word2 =0 shape TBD by score. *)
|
|
(* proc23 @002a — field-selector test. FIXME: word2 =0 shape TBD by score. *)
|
|
|
PROCEDURE LookupField(t: RecordPtr): BOOLEAN;
|
|
PROCEDURE LookupField(t: RecordPtr): BOOLEAN;
|
|
@@ -126,13 +133,18 @@ BEGIN
|
|
|
RETURN (t^.word4 = 11) AND (CARDINAL(t^.word2) = 0);
|
|
RETURN (t^.word4 = 11) AND (CARDINAL(t^.word2) = 0);
|
|
|
END LookupField;
|
|
END LookupField;
|
|
|
(* DEF-export stubs (signatures exact per DEF; bodies TBD by MCD audit). *)
|
|
(* DEF-export stubs (signatures exact per DEF; bodies TBD by MCD audit). *)
|
|
|
|
|
+(* proc1 @0001 — central error: report code unless ok. *)
|
|
|
PROCEDURE CentralError(ok: BOOLEAN; code: CARDINAL);
|
|
PROCEDURE CentralError(ok: BOOLEAN; code: CARDINAL);
|
|
|
-BEGIN HALT; END CentralError;
|
|
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF NOT ok THEN Errors.ReportError(code) END;
|
|
|
|
|
+END CentralError;
|
|
|
PROCEDURE EmitOp(subOp, typeKind: CARDINAL);
|
|
PROCEDURE EmitOp(subOp, typeKind: CARDINAL);
|
|
|
BEGIN HALT; END EmitOp;
|
|
BEGIN HALT; END EmitOp;
|
|
|
-(* proc6 @0047 stub — 0-arg curDesc helper (name TBD by MCD audit). *)
|
|
|
|
|
|
|
+(* proc6 @0047 — unwrap typ to typ^.w2 when kind=1. Name TBD (audit). *)
|
|
|
PROCEDURE Proc6;
|
|
PROCEDURE Proc6;
|
|
|
-BEGIN HALT; END Proc6;
|
|
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF curDesc^.typ^.w4 = 1 THEN curDesc^.typ := NodePtr(curDesc^.typ^.w2) END;
|
|
|
|
|
+END Proc6;
|
|
|
PROCEDURE NormalizeOperand(d: HeadPtr);
|
|
PROCEDURE NormalizeOperand(d: HeadPtr);
|
|
|
BEGIN HALT; END NormalizeOperand;
|
|
BEGIN HALT; END NormalizeOperand;
|
|
|
PROCEDURE LoadIndirect(d: HeadPtr);
|
|
PROCEDURE LoadIndirect(d: HeadPtr);
|
|
@@ -692,8 +704,8 @@ BEGIN HALT; END ParseTypeCast; (* TEMP-STUB: uplevel proc40 frame; audit later *
|
|
|
PROCEDURE ExpandStdProc43(code: CARDINAL);
|
|
PROCEDURE ExpandStdProc43(code: CARDINAL);
|
|
|
VAR buf: ARRAY [0..3] OF WORD; tmp: ARRAY [0..1] OF WORD; k, i: CARDINAL;
|
|
VAR buf: ARRAY [0..3] OF WORD; tmp: ARRAY [0..1] OF WORD; k, i: CARDINAL;
|
|
|
BEGIN
|
|
BEGIN
|
|
|
- k := TypeKindOf; (*{0adf} local proc27 *)
|
|
|
|
|
- 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 *)
|
|
IF k <= 1 THEN (*{088b-088d} short ordinal: bias into const *)
|
|
|
CodeGen.QueueConst(code-k*32768); RETURN; (*{088f-0896}*)
|
|
CodeGen.QueueConst(code-k*32768); RETURN; (*{088f-0896}*)
|
|
|
END;
|
|
END;
|
|
@@ -810,7 +822,7 @@ BEGIN
|
|
|
CASE t3 OF (*{0a9c,0b79} switch 90..105 *)
|
|
CASE t3 OF (*{0a9c,0b79} switch 90..105 *)
|
|
|
90..95:
|
|
90..95:
|
|
|
ParseExpression; Proc6; (*FIXME-PROC6*) (*{0aa1} proc12/6 *)
|
|
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 ~ MatchOpClass(388, t2) THEN (*{0aa4-0aa8}*) END;
|
|
|
IF t3 # 4 THEN CodeGen.EmitTypedOp(13+t3, k); (*{0aac-0ab2}*)
|
|
IF t3 # 4 THEN CodeGen.EmitTypedOp(13+t3, k); (*{0aac-0ab2}*)
|
|
|
ELSE
|
|
ELSE
|
|
@@ -1143,7 +1155,7 @@ BEGIN
|
|
|
EmitOp(); (* proc6 *) (*{0ed4}*)
|
|
EmitOp(); (* proc6 *) (*{0ed4}*)
|
|
|
MatchOpClass(rkind, op); (* proc9 *) (*{0ed5-0ed7}*)
|
|
MatchOpClass(rkind, op); (* proc9 *) (*{0ed5-0ed7}*)
|
|
|
FoldConstOp(buf); (* proc35 FIXME: kind result TBD *) (*{0ed8-0ed9}*)
|
|
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 op = 63 THEN op := 61 END; (*{0ede-0ee2}*)
|
|
|
IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{0ee7-0eef} both const *)
|
|
IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{0ee7-0eef} both const *)
|
|
|
CodeGen.DiscardPending; (*{0ef2}*)
|
|
CodeGen.DiscardPending; (*{0ef2}*)
|
|
@@ -1201,7 +1213,7 @@ BEGIN
|
|
|
EmitRangeCheck; (* nested proc49 *) (*{1038}*)
|
|
EmitRangeCheck; (* nested proc49 *) (*{1038}*)
|
|
|
EmitOp(); (* proc6 *) (*{103a}*)
|
|
EmitOp(); (* proc6 *) (*{103a}*)
|
|
|
MatchOpClass(388, 59); (* proc9 *) (*{103b-1040}*)
|
|
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 t = NIL THEN t := Compiler.CardType; ConstToCard(t, 59); END; (*{1044-104c} FIXME *)
|
|
|
IF curDesc^.mode = 0 THEN (* const negation *) (*{104d-1050}*)
|
|
IF curDesc^.mode = 0 THEN (* const negation *) (*{104d-1050}*)
|
|
|
CodeGen.DiscardPending; (*{1052}*)
|
|
CodeGen.DiscardPending; (*{1052}*)
|
|
@@ -1258,7 +1270,7 @@ BEGIN
|
|
|
EmitOp(); (* proc6 *) (*{1118}*)
|
|
EmitOp(); (* proc6 *) (*{1118}*)
|
|
|
MatchOpClass(404, op); (* proc9 *) (*{1119-111e}*)
|
|
MatchOpClass(404, op); (* proc9 *) (*{1119-111e}*)
|
|
|
FoldConstOp(buf); (* proc35 FIXME: kind result TBD *) (*{111f}*)
|
|
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}*)
|
|
IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{1124-112c}*)
|
|
|
CodeGen.DiscardPending; (*{112e}*)
|
|
CodeGen.DiscardPending; (*{112e}*)
|
|
|
CodeGen.DiscardPending; (*{1130}*)
|
|
CodeGen.DiscardPending; (*{1130}*)
|
|
@@ -1353,7 +1365,7 @@ BEGIN
|
|
|
EmitOp(); (* proc6 *) (*{12c8}*)
|
|
EmitOp(); (* proc6 *) (*{12c8}*)
|
|
|
MatchOpClass(cls, op); (* proc9 *) (*{12c9-12cb}*)
|
|
MatchOpClass(cls, op); (* proc9 *) (*{12c9-12cb}*)
|
|
|
FoldConstOp(buf); (* proc35 *) (*{12cc-12cd}*)
|
|
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}*)
|
|
IF (curDesc^.mode = 0) AND (buf.raw[1] = 0) THEN (*{12d2-12da}*)
|
|
|
CodeGen.DiscardPending; (*{12dc}*)
|
|
CodeGen.DiscardPending; (*{12dc}*)
|
|
|
CodeGen.DiscardPending; (*{12de}*)
|
|
CodeGen.DiscardPending; (*{12de}*)
|