Przeglądaj źródła

robustness: table-limit overflows are errors, not silent drops

The two-phase span table silently dropped a deferred body once full
(>1023 bodies in one module): its codegen was lost.  DeferSkip now
checks capacity up front, reports 230, and parses the body inline
instead (regression t_manyproc).  Also loud now: the label/GOTO tables,
the 32-actual AST buffer, and SymTab.MaxTypes (via TypesOverflow,
checked at unit end).

No corpus change (427/612, 0 crashes): no corpus file hits a limit.
Gates: suite 247/247, fixpoint OK (3,873,552 bytes).
Eric Streit 3 dni temu
rodzic
commit
3d58325303

+ 1 - 0
compiler/run_tests.sh

@@ -185,6 +185,7 @@ expect_fail t_bad_fwd.mod "incompatible assignment"
 expect_fail t_bad_nestfwd.mod "undeclared identifier"
 expect_fail t_fwdtype.mod "undeclared identifier"
 expect_fail t_fwdset.mod "undeclared identifier"
+expect_fail t_manyproc.mod "not supported yet"
 expect_fail t_bad_overlong.mod "invalid UTF-8"
 expect_fail t_bad_surrogate.mod "invalid UTF-8"
 expect_fail t_bad_utf8big.mod "invalid UTF-8"

+ 24 - 8
compiler/src/M2.atg

@@ -337,6 +337,7 @@ PROCEDURE NoteLabel (nm: ARRAY OF CHAR);
     END;
     IF nLab <= HIGH(labNm) THEN
       CopyNm(nm, labNm[nLab]); INC(nLab)
+    ELSE SemError(230)  (* label table full: implementation limit *)
     END
   END NoteLabel;
 
@@ -350,6 +351,7 @@ PROCEDURE NoteGoto (nm: ARRAY OF CHAR);
     END;
     IF nGot <= HIGH(gotNm) THEN
       CopyNm(nm, gotNm[nGot]); INC(nGot)
+    ELSE SemError(230)  (* GOTO table full: implementation limit *)
     END
   END NoteGoto;
 
@@ -494,17 +496,17 @@ PROCEDURE OrdClass (t: SymTab.TypeIndex): BOOLEAN;
         OR (c = SymTab.ClEnum) OR (c = SymTab.ClUChar)
   END OrdClass;
 
-PROCEDURE NoteSpan (pn: SymTab.Name; start: M2S.INT32);
+PROCEDURE NoteSpan (pn: SymTab.Name; start: M2S.INT32): BOOLEAN;
 (* Records an outermost body span for the re-parse pass (milestone 2).
-   Diagnostic only for now: nothing consumes the table yet.  Declared
-   before its caller: V3 resolves single-pass (declaration before use),
-   with no forward tolerance for procedure calls. *)
+   FALSE when the span table is full (an implementation limit): the
+   caller then parses the body inline instead of dropping it. *)
   BEGIN
-    IF nSpans > HIGH(spanName) THEN RETURN END;
+    IF nSpans > HIGH(spanName) THEN RETURN FALSE END;
     CopyNm(pn, spanName[nSpans]);
     spanStart[nSpans] := start;
     spanIdx[nSpans] := SymTab.DeferBody();
-    INC(nSpans)
+    INC(nSpans);
+    RETURN TRUE
   END NoteSpan;
 
 PROCEDURE Openers (): BOOLEAN;
@@ -531,6 +533,12 @@ PROCEDURE DeferSkip (pn: SymTab.Name): BOOLEAN;
     start, endPos: M2S.INT32;
   BEGIN
     deferredBody := FALSE;
+    (* table full (an implementation limit): parse the body inline now,
+       before touching the scanner, with a clear error. *)
+    IF nSpans > HIGH(spanName) THEN
+      SemError(230);
+      RETURN FALSE
+    END;
     start := M2S.nextPos;
     M2S.PushPos;
     depth := 0; guard := 0; ok := TRUE;
@@ -558,7 +566,11 @@ PROCEDURE DeferSkip (pn: SymTab.Name): BOOLEAN;
       END
     END;
     IF ok THEN
-      NoteSpan(pn, start);
+      IF NOT NoteSpan(pn, start) THEN
+        (* defensive: capacity is checked at entry, so this is unreachable *)
+        SemError(230);
+        RETURN FALSE
+      END;
       spanTy[nSpans - 1] := Lower.CurScopeProc();
       spanNode[nSpans - 1] := curProcNode;
       M2S.DropPos;   (* keep the scanner at END; discard the snapshot *)
@@ -607,7 +619,9 @@ PRODUCTIONS
                                            astImpTail := AST.NoNode;
                                            nSpans := 0;
                                            SymTab.DeferReset; .)
-      Unit "." .
+      Unit "."                          (. IF SymTab.TypesOverflow() THEN
+                                             SemError(230)  (* MaxTypes *)
+                                           END; .) .
   (* Units: program modules compile fully; DEFINITION and
      IMPLEMENTATION modules parse + check now but lower in step 4
      (each ends with one 230); same for nested local modules. *)
@@ -2432,6 +2446,8 @@ PRODUCTIONS
                                            IF astNArgs <= HIGH(astArgs) THEN
                                              astArgs[astNArgs] := astCur;
                                              INC(astNArgs)
+                                           ELSE SemError(230)
+                                             (* > 32 actuals: impl limit *)
                                            END;
                                            va := (NOT ind)
                                              AND (methCls =

Plik diff jest za duży
+ 3813 - 3797
compiler/src/M2.lst


+ 2 - 0
compiler/src/SymTab.def

@@ -514,6 +514,8 @@ PROCEDURE IsByteBuf (t: TypeIndex): BOOLEAN;
 (* TRUE for an `ARRAY OF BYTE` open-array formal. *)
 PROCEDURE ByteBufOk (at, ft: TypeIndex): BOOLEAN;
 (* gm2 ext: a scalar/pointer/string actual is accepted for `ARRAY OF BYTE`. *)
+PROCEDURE TypesOverflow (): BOOLEAN;
+(* TRUE once MaxTypes was exhausted (an implementation limit). *)
 PROCEDURE ArrayLo (t: TypeIndex): INTEGER;
 PROCEDURE ArrayHi (t: TypeIndex): INTEGER;
 (* Static bounds (open arrays: lo 0, hi undefined — backend reads

+ 11 - 1
compiler/src/SymTab.mod

@@ -135,6 +135,7 @@ VAR
   bhi : ARRAY [0 .. 7] OF INTEGER;
   nBounds : CARDINAL;
   nTypes : CARDINAL;
+  typeOverflow : BOOLEAN;  (* MaxTypes exhausted (implementation limit) *)
   curProc : SymPtr;   (* heading being declared *)
   curPTail : SymPtr;  (* positional param chain tail *)
   snapT : ARRAY [0 .. 15] OF TypeIndex;  (* signature snapshot scratch *)
@@ -708,7 +709,10 @@ PROCEDURE PopScope;
 
 PROCEDURE NewDesc (form: INTEGER; ref: TypeIndex): TypeIndex;
   BEGIN
-    IF nTypes >= MaxTypes THEN RETURN InvalidType END;
+    IF nTypes >= MaxTypes THEN
+      typeOverflow := TRUE;
+      RETURN InvalidType
+    END;
     tform[nTypes] := form;
     tref[nTypes] := ref;
     tbytebuf[nTypes] := FALSE;
@@ -1176,6 +1180,12 @@ PROCEDURE ByteBufOk (at, ft: TypeIndex): BOOLEAN;
         OR (c = ClPtr) OR (c = ClLong) OR (c = ClStr)
   END ByteBufOk;
 
+PROCEDURE TypesOverflow (): BOOLEAN;
+(* TRUE once MaxTypes was exhausted (an implementation limit). *)
+  BEGIN
+    RETURN typeOverflow
+  END TypesOverflow;
+
 PROCEDURE ArrayLo (t: TypeIndex): INTEGER;
   VAR r: TypeIndex;
   BEGIN

+ 1106 - 0
compiler/tests/t_manyproc.mod

@@ -0,0 +1,1106 @@
+MODULE TManyProc;
+(* Implementation limit: one module with more than 1023 deferred procedure
+   bodies overflows the two-phase span table.  This must be a loud error,
+   not a silently dropped body.  Expect 'not supported yet'. *)
+VAR ExitCode : INTEGER;
+PROCEDURE P1; BEGIN END P1;
+PROCEDURE P2; BEGIN END P2;
+PROCEDURE P3; BEGIN END P3;
+PROCEDURE P4; BEGIN END P4;
+PROCEDURE P5; BEGIN END P5;
+PROCEDURE P6; BEGIN END P6;
+PROCEDURE P7; BEGIN END P7;
+PROCEDURE P8; BEGIN END P8;
+PROCEDURE P9; BEGIN END P9;
+PROCEDURE P10; BEGIN END P10;
+PROCEDURE P11; BEGIN END P11;
+PROCEDURE P12; BEGIN END P12;
+PROCEDURE P13; BEGIN END P13;
+PROCEDURE P14; BEGIN END P14;
+PROCEDURE P15; BEGIN END P15;
+PROCEDURE P16; BEGIN END P16;
+PROCEDURE P17; BEGIN END P17;
+PROCEDURE P18; BEGIN END P18;
+PROCEDURE P19; BEGIN END P19;
+PROCEDURE P20; BEGIN END P20;
+PROCEDURE P21; BEGIN END P21;
+PROCEDURE P22; BEGIN END P22;
+PROCEDURE P23; BEGIN END P23;
+PROCEDURE P24; BEGIN END P24;
+PROCEDURE P25; BEGIN END P25;
+PROCEDURE P26; BEGIN END P26;
+PROCEDURE P27; BEGIN END P27;
+PROCEDURE P28; BEGIN END P28;
+PROCEDURE P29; BEGIN END P29;
+PROCEDURE P30; BEGIN END P30;
+PROCEDURE P31; BEGIN END P31;
+PROCEDURE P32; BEGIN END P32;
+PROCEDURE P33; BEGIN END P33;
+PROCEDURE P34; BEGIN END P34;
+PROCEDURE P35; BEGIN END P35;
+PROCEDURE P36; BEGIN END P36;
+PROCEDURE P37; BEGIN END P37;
+PROCEDURE P38; BEGIN END P38;
+PROCEDURE P39; BEGIN END P39;
+PROCEDURE P40; BEGIN END P40;
+PROCEDURE P41; BEGIN END P41;
+PROCEDURE P42; BEGIN END P42;
+PROCEDURE P43; BEGIN END P43;
+PROCEDURE P44; BEGIN END P44;
+PROCEDURE P45; BEGIN END P45;
+PROCEDURE P46; BEGIN END P46;
+PROCEDURE P47; BEGIN END P47;
+PROCEDURE P48; BEGIN END P48;
+PROCEDURE P49; BEGIN END P49;
+PROCEDURE P50; BEGIN END P50;
+PROCEDURE P51; BEGIN END P51;
+PROCEDURE P52; BEGIN END P52;
+PROCEDURE P53; BEGIN END P53;
+PROCEDURE P54; BEGIN END P54;
+PROCEDURE P55; BEGIN END P55;
+PROCEDURE P56; BEGIN END P56;
+PROCEDURE P57; BEGIN END P57;
+PROCEDURE P58; BEGIN END P58;
+PROCEDURE P59; BEGIN END P59;
+PROCEDURE P60; BEGIN END P60;
+PROCEDURE P61; BEGIN END P61;
+PROCEDURE P62; BEGIN END P62;
+PROCEDURE P63; BEGIN END P63;
+PROCEDURE P64; BEGIN END P64;
+PROCEDURE P65; BEGIN END P65;
+PROCEDURE P66; BEGIN END P66;
+PROCEDURE P67; BEGIN END P67;
+PROCEDURE P68; BEGIN END P68;
+PROCEDURE P69; BEGIN END P69;
+PROCEDURE P70; BEGIN END P70;
+PROCEDURE P71; BEGIN END P71;
+PROCEDURE P72; BEGIN END P72;
+PROCEDURE P73; BEGIN END P73;
+PROCEDURE P74; BEGIN END P74;
+PROCEDURE P75; BEGIN END P75;
+PROCEDURE P76; BEGIN END P76;
+PROCEDURE P77; BEGIN END P77;
+PROCEDURE P78; BEGIN END P78;
+PROCEDURE P79; BEGIN END P79;
+PROCEDURE P80; BEGIN END P80;
+PROCEDURE P81; BEGIN END P81;
+PROCEDURE P82; BEGIN END P82;
+PROCEDURE P83; BEGIN END P83;
+PROCEDURE P84; BEGIN END P84;
+PROCEDURE P85; BEGIN END P85;
+PROCEDURE P86; BEGIN END P86;
+PROCEDURE P87; BEGIN END P87;
+PROCEDURE P88; BEGIN END P88;
+PROCEDURE P89; BEGIN END P89;
+PROCEDURE P90; BEGIN END P90;
+PROCEDURE P91; BEGIN END P91;
+PROCEDURE P92; BEGIN END P92;
+PROCEDURE P93; BEGIN END P93;
+PROCEDURE P94; BEGIN END P94;
+PROCEDURE P95; BEGIN END P95;
+PROCEDURE P96; BEGIN END P96;
+PROCEDURE P97; BEGIN END P97;
+PROCEDURE P98; BEGIN END P98;
+PROCEDURE P99; BEGIN END P99;
+PROCEDURE P100; BEGIN END P100;
+PROCEDURE P101; BEGIN END P101;
+PROCEDURE P102; BEGIN END P102;
+PROCEDURE P103; BEGIN END P103;
+PROCEDURE P104; BEGIN END P104;
+PROCEDURE P105; BEGIN END P105;
+PROCEDURE P106; BEGIN END P106;
+PROCEDURE P107; BEGIN END P107;
+PROCEDURE P108; BEGIN END P108;
+PROCEDURE P109; BEGIN END P109;
+PROCEDURE P110; BEGIN END P110;
+PROCEDURE P111; BEGIN END P111;
+PROCEDURE P112; BEGIN END P112;
+PROCEDURE P113; BEGIN END P113;
+PROCEDURE P114; BEGIN END P114;
+PROCEDURE P115; BEGIN END P115;
+PROCEDURE P116; BEGIN END P116;
+PROCEDURE P117; BEGIN END P117;
+PROCEDURE P118; BEGIN END P118;
+PROCEDURE P119; BEGIN END P119;
+PROCEDURE P120; BEGIN END P120;
+PROCEDURE P121; BEGIN END P121;
+PROCEDURE P122; BEGIN END P122;
+PROCEDURE P123; BEGIN END P123;
+PROCEDURE P124; BEGIN END P124;
+PROCEDURE P125; BEGIN END P125;
+PROCEDURE P126; BEGIN END P126;
+PROCEDURE P127; BEGIN END P127;
+PROCEDURE P128; BEGIN END P128;
+PROCEDURE P129; BEGIN END P129;
+PROCEDURE P130; BEGIN END P130;
+PROCEDURE P131; BEGIN END P131;
+PROCEDURE P132; BEGIN END P132;
+PROCEDURE P133; BEGIN END P133;
+PROCEDURE P134; BEGIN END P134;
+PROCEDURE P135; BEGIN END P135;
+PROCEDURE P136; BEGIN END P136;
+PROCEDURE P137; BEGIN END P137;
+PROCEDURE P138; BEGIN END P138;
+PROCEDURE P139; BEGIN END P139;
+PROCEDURE P140; BEGIN END P140;
+PROCEDURE P141; BEGIN END P141;
+PROCEDURE P142; BEGIN END P142;
+PROCEDURE P143; BEGIN END P143;
+PROCEDURE P144; BEGIN END P144;
+PROCEDURE P145; BEGIN END P145;
+PROCEDURE P146; BEGIN END P146;
+PROCEDURE P147; BEGIN END P147;
+PROCEDURE P148; BEGIN END P148;
+PROCEDURE P149; BEGIN END P149;
+PROCEDURE P150; BEGIN END P150;
+PROCEDURE P151; BEGIN END P151;
+PROCEDURE P152; BEGIN END P152;
+PROCEDURE P153; BEGIN END P153;
+PROCEDURE P154; BEGIN END P154;
+PROCEDURE P155; BEGIN END P155;
+PROCEDURE P156; BEGIN END P156;
+PROCEDURE P157; BEGIN END P157;
+PROCEDURE P158; BEGIN END P158;
+PROCEDURE P159; BEGIN END P159;
+PROCEDURE P160; BEGIN END P160;
+PROCEDURE P161; BEGIN END P161;
+PROCEDURE P162; BEGIN END P162;
+PROCEDURE P163; BEGIN END P163;
+PROCEDURE P164; BEGIN END P164;
+PROCEDURE P165; BEGIN END P165;
+PROCEDURE P166; BEGIN END P166;
+PROCEDURE P167; BEGIN END P167;
+PROCEDURE P168; BEGIN END P168;
+PROCEDURE P169; BEGIN END P169;
+PROCEDURE P170; BEGIN END P170;
+PROCEDURE P171; BEGIN END P171;
+PROCEDURE P172; BEGIN END P172;
+PROCEDURE P173; BEGIN END P173;
+PROCEDURE P174; BEGIN END P174;
+PROCEDURE P175; BEGIN END P175;
+PROCEDURE P176; BEGIN END P176;
+PROCEDURE P177; BEGIN END P177;
+PROCEDURE P178; BEGIN END P178;
+PROCEDURE P179; BEGIN END P179;
+PROCEDURE P180; BEGIN END P180;
+PROCEDURE P181; BEGIN END P181;
+PROCEDURE P182; BEGIN END P182;
+PROCEDURE P183; BEGIN END P183;
+PROCEDURE P184; BEGIN END P184;
+PROCEDURE P185; BEGIN END P185;
+PROCEDURE P186; BEGIN END P186;
+PROCEDURE P187; BEGIN END P187;
+PROCEDURE P188; BEGIN END P188;
+PROCEDURE P189; BEGIN END P189;
+PROCEDURE P190; BEGIN END P190;
+PROCEDURE P191; BEGIN END P191;
+PROCEDURE P192; BEGIN END P192;
+PROCEDURE P193; BEGIN END P193;
+PROCEDURE P194; BEGIN END P194;
+PROCEDURE P195; BEGIN END P195;
+PROCEDURE P196; BEGIN END P196;
+PROCEDURE P197; BEGIN END P197;
+PROCEDURE P198; BEGIN END P198;
+PROCEDURE P199; BEGIN END P199;
+PROCEDURE P200; BEGIN END P200;
+PROCEDURE P201; BEGIN END P201;
+PROCEDURE P202; BEGIN END P202;
+PROCEDURE P203; BEGIN END P203;
+PROCEDURE P204; BEGIN END P204;
+PROCEDURE P205; BEGIN END P205;
+PROCEDURE P206; BEGIN END P206;
+PROCEDURE P207; BEGIN END P207;
+PROCEDURE P208; BEGIN END P208;
+PROCEDURE P209; BEGIN END P209;
+PROCEDURE P210; BEGIN END P210;
+PROCEDURE P211; BEGIN END P211;
+PROCEDURE P212; BEGIN END P212;
+PROCEDURE P213; BEGIN END P213;
+PROCEDURE P214; BEGIN END P214;
+PROCEDURE P215; BEGIN END P215;
+PROCEDURE P216; BEGIN END P216;
+PROCEDURE P217; BEGIN END P217;
+PROCEDURE P218; BEGIN END P218;
+PROCEDURE P219; BEGIN END P219;
+PROCEDURE P220; BEGIN END P220;
+PROCEDURE P221; BEGIN END P221;
+PROCEDURE P222; BEGIN END P222;
+PROCEDURE P223; BEGIN END P223;
+PROCEDURE P224; BEGIN END P224;
+PROCEDURE P225; BEGIN END P225;
+PROCEDURE P226; BEGIN END P226;
+PROCEDURE P227; BEGIN END P227;
+PROCEDURE P228; BEGIN END P228;
+PROCEDURE P229; BEGIN END P229;
+PROCEDURE P230; BEGIN END P230;
+PROCEDURE P231; BEGIN END P231;
+PROCEDURE P232; BEGIN END P232;
+PROCEDURE P233; BEGIN END P233;
+PROCEDURE P234; BEGIN END P234;
+PROCEDURE P235; BEGIN END P235;
+PROCEDURE P236; BEGIN END P236;
+PROCEDURE P237; BEGIN END P237;
+PROCEDURE P238; BEGIN END P238;
+PROCEDURE P239; BEGIN END P239;
+PROCEDURE P240; BEGIN END P240;
+PROCEDURE P241; BEGIN END P241;
+PROCEDURE P242; BEGIN END P242;
+PROCEDURE P243; BEGIN END P243;
+PROCEDURE P244; BEGIN END P244;
+PROCEDURE P245; BEGIN END P245;
+PROCEDURE P246; BEGIN END P246;
+PROCEDURE P247; BEGIN END P247;
+PROCEDURE P248; BEGIN END P248;
+PROCEDURE P249; BEGIN END P249;
+PROCEDURE P250; BEGIN END P250;
+PROCEDURE P251; BEGIN END P251;
+PROCEDURE P252; BEGIN END P252;
+PROCEDURE P253; BEGIN END P253;
+PROCEDURE P254; BEGIN END P254;
+PROCEDURE P255; BEGIN END P255;
+PROCEDURE P256; BEGIN END P256;
+PROCEDURE P257; BEGIN END P257;
+PROCEDURE P258; BEGIN END P258;
+PROCEDURE P259; BEGIN END P259;
+PROCEDURE P260; BEGIN END P260;
+PROCEDURE P261; BEGIN END P261;
+PROCEDURE P262; BEGIN END P262;
+PROCEDURE P263; BEGIN END P263;
+PROCEDURE P264; BEGIN END P264;
+PROCEDURE P265; BEGIN END P265;
+PROCEDURE P266; BEGIN END P266;
+PROCEDURE P267; BEGIN END P267;
+PROCEDURE P268; BEGIN END P268;
+PROCEDURE P269; BEGIN END P269;
+PROCEDURE P270; BEGIN END P270;
+PROCEDURE P271; BEGIN END P271;
+PROCEDURE P272; BEGIN END P272;
+PROCEDURE P273; BEGIN END P273;
+PROCEDURE P274; BEGIN END P274;
+PROCEDURE P275; BEGIN END P275;
+PROCEDURE P276; BEGIN END P276;
+PROCEDURE P277; BEGIN END P277;
+PROCEDURE P278; BEGIN END P278;
+PROCEDURE P279; BEGIN END P279;
+PROCEDURE P280; BEGIN END P280;
+PROCEDURE P281; BEGIN END P281;
+PROCEDURE P282; BEGIN END P282;
+PROCEDURE P283; BEGIN END P283;
+PROCEDURE P284; BEGIN END P284;
+PROCEDURE P285; BEGIN END P285;
+PROCEDURE P286; BEGIN END P286;
+PROCEDURE P287; BEGIN END P287;
+PROCEDURE P288; BEGIN END P288;
+PROCEDURE P289; BEGIN END P289;
+PROCEDURE P290; BEGIN END P290;
+PROCEDURE P291; BEGIN END P291;
+PROCEDURE P292; BEGIN END P292;
+PROCEDURE P293; BEGIN END P293;
+PROCEDURE P294; BEGIN END P294;
+PROCEDURE P295; BEGIN END P295;
+PROCEDURE P296; BEGIN END P296;
+PROCEDURE P297; BEGIN END P297;
+PROCEDURE P298; BEGIN END P298;
+PROCEDURE P299; BEGIN END P299;
+PROCEDURE P300; BEGIN END P300;
+PROCEDURE P301; BEGIN END P301;
+PROCEDURE P302; BEGIN END P302;
+PROCEDURE P303; BEGIN END P303;
+PROCEDURE P304; BEGIN END P304;
+PROCEDURE P305; BEGIN END P305;
+PROCEDURE P306; BEGIN END P306;
+PROCEDURE P307; BEGIN END P307;
+PROCEDURE P308; BEGIN END P308;
+PROCEDURE P309; BEGIN END P309;
+PROCEDURE P310; BEGIN END P310;
+PROCEDURE P311; BEGIN END P311;
+PROCEDURE P312; BEGIN END P312;
+PROCEDURE P313; BEGIN END P313;
+PROCEDURE P314; BEGIN END P314;
+PROCEDURE P315; BEGIN END P315;
+PROCEDURE P316; BEGIN END P316;
+PROCEDURE P317; BEGIN END P317;
+PROCEDURE P318; BEGIN END P318;
+PROCEDURE P319; BEGIN END P319;
+PROCEDURE P320; BEGIN END P320;
+PROCEDURE P321; BEGIN END P321;
+PROCEDURE P322; BEGIN END P322;
+PROCEDURE P323; BEGIN END P323;
+PROCEDURE P324; BEGIN END P324;
+PROCEDURE P325; BEGIN END P325;
+PROCEDURE P326; BEGIN END P326;
+PROCEDURE P327; BEGIN END P327;
+PROCEDURE P328; BEGIN END P328;
+PROCEDURE P329; BEGIN END P329;
+PROCEDURE P330; BEGIN END P330;
+PROCEDURE P331; BEGIN END P331;
+PROCEDURE P332; BEGIN END P332;
+PROCEDURE P333; BEGIN END P333;
+PROCEDURE P334; BEGIN END P334;
+PROCEDURE P335; BEGIN END P335;
+PROCEDURE P336; BEGIN END P336;
+PROCEDURE P337; BEGIN END P337;
+PROCEDURE P338; BEGIN END P338;
+PROCEDURE P339; BEGIN END P339;
+PROCEDURE P340; BEGIN END P340;
+PROCEDURE P341; BEGIN END P341;
+PROCEDURE P342; BEGIN END P342;
+PROCEDURE P343; BEGIN END P343;
+PROCEDURE P344; BEGIN END P344;
+PROCEDURE P345; BEGIN END P345;
+PROCEDURE P346; BEGIN END P346;
+PROCEDURE P347; BEGIN END P347;
+PROCEDURE P348; BEGIN END P348;
+PROCEDURE P349; BEGIN END P349;
+PROCEDURE P350; BEGIN END P350;
+PROCEDURE P351; BEGIN END P351;
+PROCEDURE P352; BEGIN END P352;
+PROCEDURE P353; BEGIN END P353;
+PROCEDURE P354; BEGIN END P354;
+PROCEDURE P355; BEGIN END P355;
+PROCEDURE P356; BEGIN END P356;
+PROCEDURE P357; BEGIN END P357;
+PROCEDURE P358; BEGIN END P358;
+PROCEDURE P359; BEGIN END P359;
+PROCEDURE P360; BEGIN END P360;
+PROCEDURE P361; BEGIN END P361;
+PROCEDURE P362; BEGIN END P362;
+PROCEDURE P363; BEGIN END P363;
+PROCEDURE P364; BEGIN END P364;
+PROCEDURE P365; BEGIN END P365;
+PROCEDURE P366; BEGIN END P366;
+PROCEDURE P367; BEGIN END P367;
+PROCEDURE P368; BEGIN END P368;
+PROCEDURE P369; BEGIN END P369;
+PROCEDURE P370; BEGIN END P370;
+PROCEDURE P371; BEGIN END P371;
+PROCEDURE P372; BEGIN END P372;
+PROCEDURE P373; BEGIN END P373;
+PROCEDURE P374; BEGIN END P374;
+PROCEDURE P375; BEGIN END P375;
+PROCEDURE P376; BEGIN END P376;
+PROCEDURE P377; BEGIN END P377;
+PROCEDURE P378; BEGIN END P378;
+PROCEDURE P379; BEGIN END P379;
+PROCEDURE P380; BEGIN END P380;
+PROCEDURE P381; BEGIN END P381;
+PROCEDURE P382; BEGIN END P382;
+PROCEDURE P383; BEGIN END P383;
+PROCEDURE P384; BEGIN END P384;
+PROCEDURE P385; BEGIN END P385;
+PROCEDURE P386; BEGIN END P386;
+PROCEDURE P387; BEGIN END P387;
+PROCEDURE P388; BEGIN END P388;
+PROCEDURE P389; BEGIN END P389;
+PROCEDURE P390; BEGIN END P390;
+PROCEDURE P391; BEGIN END P391;
+PROCEDURE P392; BEGIN END P392;
+PROCEDURE P393; BEGIN END P393;
+PROCEDURE P394; BEGIN END P394;
+PROCEDURE P395; BEGIN END P395;
+PROCEDURE P396; BEGIN END P396;
+PROCEDURE P397; BEGIN END P397;
+PROCEDURE P398; BEGIN END P398;
+PROCEDURE P399; BEGIN END P399;
+PROCEDURE P400; BEGIN END P400;
+PROCEDURE P401; BEGIN END P401;
+PROCEDURE P402; BEGIN END P402;
+PROCEDURE P403; BEGIN END P403;
+PROCEDURE P404; BEGIN END P404;
+PROCEDURE P405; BEGIN END P405;
+PROCEDURE P406; BEGIN END P406;
+PROCEDURE P407; BEGIN END P407;
+PROCEDURE P408; BEGIN END P408;
+PROCEDURE P409; BEGIN END P409;
+PROCEDURE P410; BEGIN END P410;
+PROCEDURE P411; BEGIN END P411;
+PROCEDURE P412; BEGIN END P412;
+PROCEDURE P413; BEGIN END P413;
+PROCEDURE P414; BEGIN END P414;
+PROCEDURE P415; BEGIN END P415;
+PROCEDURE P416; BEGIN END P416;
+PROCEDURE P417; BEGIN END P417;
+PROCEDURE P418; BEGIN END P418;
+PROCEDURE P419; BEGIN END P419;
+PROCEDURE P420; BEGIN END P420;
+PROCEDURE P421; BEGIN END P421;
+PROCEDURE P422; BEGIN END P422;
+PROCEDURE P423; BEGIN END P423;
+PROCEDURE P424; BEGIN END P424;
+PROCEDURE P425; BEGIN END P425;
+PROCEDURE P426; BEGIN END P426;
+PROCEDURE P427; BEGIN END P427;
+PROCEDURE P428; BEGIN END P428;
+PROCEDURE P429; BEGIN END P429;
+PROCEDURE P430; BEGIN END P430;
+PROCEDURE P431; BEGIN END P431;
+PROCEDURE P432; BEGIN END P432;
+PROCEDURE P433; BEGIN END P433;
+PROCEDURE P434; BEGIN END P434;
+PROCEDURE P435; BEGIN END P435;
+PROCEDURE P436; BEGIN END P436;
+PROCEDURE P437; BEGIN END P437;
+PROCEDURE P438; BEGIN END P438;
+PROCEDURE P439; BEGIN END P439;
+PROCEDURE P440; BEGIN END P440;
+PROCEDURE P441; BEGIN END P441;
+PROCEDURE P442; BEGIN END P442;
+PROCEDURE P443; BEGIN END P443;
+PROCEDURE P444; BEGIN END P444;
+PROCEDURE P445; BEGIN END P445;
+PROCEDURE P446; BEGIN END P446;
+PROCEDURE P447; BEGIN END P447;
+PROCEDURE P448; BEGIN END P448;
+PROCEDURE P449; BEGIN END P449;
+PROCEDURE P450; BEGIN END P450;
+PROCEDURE P451; BEGIN END P451;
+PROCEDURE P452; BEGIN END P452;
+PROCEDURE P453; BEGIN END P453;
+PROCEDURE P454; BEGIN END P454;
+PROCEDURE P455; BEGIN END P455;
+PROCEDURE P456; BEGIN END P456;
+PROCEDURE P457; BEGIN END P457;
+PROCEDURE P458; BEGIN END P458;
+PROCEDURE P459; BEGIN END P459;
+PROCEDURE P460; BEGIN END P460;
+PROCEDURE P461; BEGIN END P461;
+PROCEDURE P462; BEGIN END P462;
+PROCEDURE P463; BEGIN END P463;
+PROCEDURE P464; BEGIN END P464;
+PROCEDURE P465; BEGIN END P465;
+PROCEDURE P466; BEGIN END P466;
+PROCEDURE P467; BEGIN END P467;
+PROCEDURE P468; BEGIN END P468;
+PROCEDURE P469; BEGIN END P469;
+PROCEDURE P470; BEGIN END P470;
+PROCEDURE P471; BEGIN END P471;
+PROCEDURE P472; BEGIN END P472;
+PROCEDURE P473; BEGIN END P473;
+PROCEDURE P474; BEGIN END P474;
+PROCEDURE P475; BEGIN END P475;
+PROCEDURE P476; BEGIN END P476;
+PROCEDURE P477; BEGIN END P477;
+PROCEDURE P478; BEGIN END P478;
+PROCEDURE P479; BEGIN END P479;
+PROCEDURE P480; BEGIN END P480;
+PROCEDURE P481; BEGIN END P481;
+PROCEDURE P482; BEGIN END P482;
+PROCEDURE P483; BEGIN END P483;
+PROCEDURE P484; BEGIN END P484;
+PROCEDURE P485; BEGIN END P485;
+PROCEDURE P486; BEGIN END P486;
+PROCEDURE P487; BEGIN END P487;
+PROCEDURE P488; BEGIN END P488;
+PROCEDURE P489; BEGIN END P489;
+PROCEDURE P490; BEGIN END P490;
+PROCEDURE P491; BEGIN END P491;
+PROCEDURE P492; BEGIN END P492;
+PROCEDURE P493; BEGIN END P493;
+PROCEDURE P494; BEGIN END P494;
+PROCEDURE P495; BEGIN END P495;
+PROCEDURE P496; BEGIN END P496;
+PROCEDURE P497; BEGIN END P497;
+PROCEDURE P498; BEGIN END P498;
+PROCEDURE P499; BEGIN END P499;
+PROCEDURE P500; BEGIN END P500;
+PROCEDURE P501; BEGIN END P501;
+PROCEDURE P502; BEGIN END P502;
+PROCEDURE P503; BEGIN END P503;
+PROCEDURE P504; BEGIN END P504;
+PROCEDURE P505; BEGIN END P505;
+PROCEDURE P506; BEGIN END P506;
+PROCEDURE P507; BEGIN END P507;
+PROCEDURE P508; BEGIN END P508;
+PROCEDURE P509; BEGIN END P509;
+PROCEDURE P510; BEGIN END P510;
+PROCEDURE P511; BEGIN END P511;
+PROCEDURE P512; BEGIN END P512;
+PROCEDURE P513; BEGIN END P513;
+PROCEDURE P514; BEGIN END P514;
+PROCEDURE P515; BEGIN END P515;
+PROCEDURE P516; BEGIN END P516;
+PROCEDURE P517; BEGIN END P517;
+PROCEDURE P518; BEGIN END P518;
+PROCEDURE P519; BEGIN END P519;
+PROCEDURE P520; BEGIN END P520;
+PROCEDURE P521; BEGIN END P521;
+PROCEDURE P522; BEGIN END P522;
+PROCEDURE P523; BEGIN END P523;
+PROCEDURE P524; BEGIN END P524;
+PROCEDURE P525; BEGIN END P525;
+PROCEDURE P526; BEGIN END P526;
+PROCEDURE P527; BEGIN END P527;
+PROCEDURE P528; BEGIN END P528;
+PROCEDURE P529; BEGIN END P529;
+PROCEDURE P530; BEGIN END P530;
+PROCEDURE P531; BEGIN END P531;
+PROCEDURE P532; BEGIN END P532;
+PROCEDURE P533; BEGIN END P533;
+PROCEDURE P534; BEGIN END P534;
+PROCEDURE P535; BEGIN END P535;
+PROCEDURE P536; BEGIN END P536;
+PROCEDURE P537; BEGIN END P537;
+PROCEDURE P538; BEGIN END P538;
+PROCEDURE P539; BEGIN END P539;
+PROCEDURE P540; BEGIN END P540;
+PROCEDURE P541; BEGIN END P541;
+PROCEDURE P542; BEGIN END P542;
+PROCEDURE P543; BEGIN END P543;
+PROCEDURE P544; BEGIN END P544;
+PROCEDURE P545; BEGIN END P545;
+PROCEDURE P546; BEGIN END P546;
+PROCEDURE P547; BEGIN END P547;
+PROCEDURE P548; BEGIN END P548;
+PROCEDURE P549; BEGIN END P549;
+PROCEDURE P550; BEGIN END P550;
+PROCEDURE P551; BEGIN END P551;
+PROCEDURE P552; BEGIN END P552;
+PROCEDURE P553; BEGIN END P553;
+PROCEDURE P554; BEGIN END P554;
+PROCEDURE P555; BEGIN END P555;
+PROCEDURE P556; BEGIN END P556;
+PROCEDURE P557; BEGIN END P557;
+PROCEDURE P558; BEGIN END P558;
+PROCEDURE P559; BEGIN END P559;
+PROCEDURE P560; BEGIN END P560;
+PROCEDURE P561; BEGIN END P561;
+PROCEDURE P562; BEGIN END P562;
+PROCEDURE P563; BEGIN END P563;
+PROCEDURE P564; BEGIN END P564;
+PROCEDURE P565; BEGIN END P565;
+PROCEDURE P566; BEGIN END P566;
+PROCEDURE P567; BEGIN END P567;
+PROCEDURE P568; BEGIN END P568;
+PROCEDURE P569; BEGIN END P569;
+PROCEDURE P570; BEGIN END P570;
+PROCEDURE P571; BEGIN END P571;
+PROCEDURE P572; BEGIN END P572;
+PROCEDURE P573; BEGIN END P573;
+PROCEDURE P574; BEGIN END P574;
+PROCEDURE P575; BEGIN END P575;
+PROCEDURE P576; BEGIN END P576;
+PROCEDURE P577; BEGIN END P577;
+PROCEDURE P578; BEGIN END P578;
+PROCEDURE P579; BEGIN END P579;
+PROCEDURE P580; BEGIN END P580;
+PROCEDURE P581; BEGIN END P581;
+PROCEDURE P582; BEGIN END P582;
+PROCEDURE P583; BEGIN END P583;
+PROCEDURE P584; BEGIN END P584;
+PROCEDURE P585; BEGIN END P585;
+PROCEDURE P586; BEGIN END P586;
+PROCEDURE P587; BEGIN END P587;
+PROCEDURE P588; BEGIN END P588;
+PROCEDURE P589; BEGIN END P589;
+PROCEDURE P590; BEGIN END P590;
+PROCEDURE P591; BEGIN END P591;
+PROCEDURE P592; BEGIN END P592;
+PROCEDURE P593; BEGIN END P593;
+PROCEDURE P594; BEGIN END P594;
+PROCEDURE P595; BEGIN END P595;
+PROCEDURE P596; BEGIN END P596;
+PROCEDURE P597; BEGIN END P597;
+PROCEDURE P598; BEGIN END P598;
+PROCEDURE P599; BEGIN END P599;
+PROCEDURE P600; BEGIN END P600;
+PROCEDURE P601; BEGIN END P601;
+PROCEDURE P602; BEGIN END P602;
+PROCEDURE P603; BEGIN END P603;
+PROCEDURE P604; BEGIN END P604;
+PROCEDURE P605; BEGIN END P605;
+PROCEDURE P606; BEGIN END P606;
+PROCEDURE P607; BEGIN END P607;
+PROCEDURE P608; BEGIN END P608;
+PROCEDURE P609; BEGIN END P609;
+PROCEDURE P610; BEGIN END P610;
+PROCEDURE P611; BEGIN END P611;
+PROCEDURE P612; BEGIN END P612;
+PROCEDURE P613; BEGIN END P613;
+PROCEDURE P614; BEGIN END P614;
+PROCEDURE P615; BEGIN END P615;
+PROCEDURE P616; BEGIN END P616;
+PROCEDURE P617; BEGIN END P617;
+PROCEDURE P618; BEGIN END P618;
+PROCEDURE P619; BEGIN END P619;
+PROCEDURE P620; BEGIN END P620;
+PROCEDURE P621; BEGIN END P621;
+PROCEDURE P622; BEGIN END P622;
+PROCEDURE P623; BEGIN END P623;
+PROCEDURE P624; BEGIN END P624;
+PROCEDURE P625; BEGIN END P625;
+PROCEDURE P626; BEGIN END P626;
+PROCEDURE P627; BEGIN END P627;
+PROCEDURE P628; BEGIN END P628;
+PROCEDURE P629; BEGIN END P629;
+PROCEDURE P630; BEGIN END P630;
+PROCEDURE P631; BEGIN END P631;
+PROCEDURE P632; BEGIN END P632;
+PROCEDURE P633; BEGIN END P633;
+PROCEDURE P634; BEGIN END P634;
+PROCEDURE P635; BEGIN END P635;
+PROCEDURE P636; BEGIN END P636;
+PROCEDURE P637; BEGIN END P637;
+PROCEDURE P638; BEGIN END P638;
+PROCEDURE P639; BEGIN END P639;
+PROCEDURE P640; BEGIN END P640;
+PROCEDURE P641; BEGIN END P641;
+PROCEDURE P642; BEGIN END P642;
+PROCEDURE P643; BEGIN END P643;
+PROCEDURE P644; BEGIN END P644;
+PROCEDURE P645; BEGIN END P645;
+PROCEDURE P646; BEGIN END P646;
+PROCEDURE P647; BEGIN END P647;
+PROCEDURE P648; BEGIN END P648;
+PROCEDURE P649; BEGIN END P649;
+PROCEDURE P650; BEGIN END P650;
+PROCEDURE P651; BEGIN END P651;
+PROCEDURE P652; BEGIN END P652;
+PROCEDURE P653; BEGIN END P653;
+PROCEDURE P654; BEGIN END P654;
+PROCEDURE P655; BEGIN END P655;
+PROCEDURE P656; BEGIN END P656;
+PROCEDURE P657; BEGIN END P657;
+PROCEDURE P658; BEGIN END P658;
+PROCEDURE P659; BEGIN END P659;
+PROCEDURE P660; BEGIN END P660;
+PROCEDURE P661; BEGIN END P661;
+PROCEDURE P662; BEGIN END P662;
+PROCEDURE P663; BEGIN END P663;
+PROCEDURE P664; BEGIN END P664;
+PROCEDURE P665; BEGIN END P665;
+PROCEDURE P666; BEGIN END P666;
+PROCEDURE P667; BEGIN END P667;
+PROCEDURE P668; BEGIN END P668;
+PROCEDURE P669; BEGIN END P669;
+PROCEDURE P670; BEGIN END P670;
+PROCEDURE P671; BEGIN END P671;
+PROCEDURE P672; BEGIN END P672;
+PROCEDURE P673; BEGIN END P673;
+PROCEDURE P674; BEGIN END P674;
+PROCEDURE P675; BEGIN END P675;
+PROCEDURE P676; BEGIN END P676;
+PROCEDURE P677; BEGIN END P677;
+PROCEDURE P678; BEGIN END P678;
+PROCEDURE P679; BEGIN END P679;
+PROCEDURE P680; BEGIN END P680;
+PROCEDURE P681; BEGIN END P681;
+PROCEDURE P682; BEGIN END P682;
+PROCEDURE P683; BEGIN END P683;
+PROCEDURE P684; BEGIN END P684;
+PROCEDURE P685; BEGIN END P685;
+PROCEDURE P686; BEGIN END P686;
+PROCEDURE P687; BEGIN END P687;
+PROCEDURE P688; BEGIN END P688;
+PROCEDURE P689; BEGIN END P689;
+PROCEDURE P690; BEGIN END P690;
+PROCEDURE P691; BEGIN END P691;
+PROCEDURE P692; BEGIN END P692;
+PROCEDURE P693; BEGIN END P693;
+PROCEDURE P694; BEGIN END P694;
+PROCEDURE P695; BEGIN END P695;
+PROCEDURE P696; BEGIN END P696;
+PROCEDURE P697; BEGIN END P697;
+PROCEDURE P698; BEGIN END P698;
+PROCEDURE P699; BEGIN END P699;
+PROCEDURE P700; BEGIN END P700;
+PROCEDURE P701; BEGIN END P701;
+PROCEDURE P702; BEGIN END P702;
+PROCEDURE P703; BEGIN END P703;
+PROCEDURE P704; BEGIN END P704;
+PROCEDURE P705; BEGIN END P705;
+PROCEDURE P706; BEGIN END P706;
+PROCEDURE P707; BEGIN END P707;
+PROCEDURE P708; BEGIN END P708;
+PROCEDURE P709; BEGIN END P709;
+PROCEDURE P710; BEGIN END P710;
+PROCEDURE P711; BEGIN END P711;
+PROCEDURE P712; BEGIN END P712;
+PROCEDURE P713; BEGIN END P713;
+PROCEDURE P714; BEGIN END P714;
+PROCEDURE P715; BEGIN END P715;
+PROCEDURE P716; BEGIN END P716;
+PROCEDURE P717; BEGIN END P717;
+PROCEDURE P718; BEGIN END P718;
+PROCEDURE P719; BEGIN END P719;
+PROCEDURE P720; BEGIN END P720;
+PROCEDURE P721; BEGIN END P721;
+PROCEDURE P722; BEGIN END P722;
+PROCEDURE P723; BEGIN END P723;
+PROCEDURE P724; BEGIN END P724;
+PROCEDURE P725; BEGIN END P725;
+PROCEDURE P726; BEGIN END P726;
+PROCEDURE P727; BEGIN END P727;
+PROCEDURE P728; BEGIN END P728;
+PROCEDURE P729; BEGIN END P729;
+PROCEDURE P730; BEGIN END P730;
+PROCEDURE P731; BEGIN END P731;
+PROCEDURE P732; BEGIN END P732;
+PROCEDURE P733; BEGIN END P733;
+PROCEDURE P734; BEGIN END P734;
+PROCEDURE P735; BEGIN END P735;
+PROCEDURE P736; BEGIN END P736;
+PROCEDURE P737; BEGIN END P737;
+PROCEDURE P738; BEGIN END P738;
+PROCEDURE P739; BEGIN END P739;
+PROCEDURE P740; BEGIN END P740;
+PROCEDURE P741; BEGIN END P741;
+PROCEDURE P742; BEGIN END P742;
+PROCEDURE P743; BEGIN END P743;
+PROCEDURE P744; BEGIN END P744;
+PROCEDURE P745; BEGIN END P745;
+PROCEDURE P746; BEGIN END P746;
+PROCEDURE P747; BEGIN END P747;
+PROCEDURE P748; BEGIN END P748;
+PROCEDURE P749; BEGIN END P749;
+PROCEDURE P750; BEGIN END P750;
+PROCEDURE P751; BEGIN END P751;
+PROCEDURE P752; BEGIN END P752;
+PROCEDURE P753; BEGIN END P753;
+PROCEDURE P754; BEGIN END P754;
+PROCEDURE P755; BEGIN END P755;
+PROCEDURE P756; BEGIN END P756;
+PROCEDURE P757; BEGIN END P757;
+PROCEDURE P758; BEGIN END P758;
+PROCEDURE P759; BEGIN END P759;
+PROCEDURE P760; BEGIN END P760;
+PROCEDURE P761; BEGIN END P761;
+PROCEDURE P762; BEGIN END P762;
+PROCEDURE P763; BEGIN END P763;
+PROCEDURE P764; BEGIN END P764;
+PROCEDURE P765; BEGIN END P765;
+PROCEDURE P766; BEGIN END P766;
+PROCEDURE P767; BEGIN END P767;
+PROCEDURE P768; BEGIN END P768;
+PROCEDURE P769; BEGIN END P769;
+PROCEDURE P770; BEGIN END P770;
+PROCEDURE P771; BEGIN END P771;
+PROCEDURE P772; BEGIN END P772;
+PROCEDURE P773; BEGIN END P773;
+PROCEDURE P774; BEGIN END P774;
+PROCEDURE P775; BEGIN END P775;
+PROCEDURE P776; BEGIN END P776;
+PROCEDURE P777; BEGIN END P777;
+PROCEDURE P778; BEGIN END P778;
+PROCEDURE P779; BEGIN END P779;
+PROCEDURE P780; BEGIN END P780;
+PROCEDURE P781; BEGIN END P781;
+PROCEDURE P782; BEGIN END P782;
+PROCEDURE P783; BEGIN END P783;
+PROCEDURE P784; BEGIN END P784;
+PROCEDURE P785; BEGIN END P785;
+PROCEDURE P786; BEGIN END P786;
+PROCEDURE P787; BEGIN END P787;
+PROCEDURE P788; BEGIN END P788;
+PROCEDURE P789; BEGIN END P789;
+PROCEDURE P790; BEGIN END P790;
+PROCEDURE P791; BEGIN END P791;
+PROCEDURE P792; BEGIN END P792;
+PROCEDURE P793; BEGIN END P793;
+PROCEDURE P794; BEGIN END P794;
+PROCEDURE P795; BEGIN END P795;
+PROCEDURE P796; BEGIN END P796;
+PROCEDURE P797; BEGIN END P797;
+PROCEDURE P798; BEGIN END P798;
+PROCEDURE P799; BEGIN END P799;
+PROCEDURE P800; BEGIN END P800;
+PROCEDURE P801; BEGIN END P801;
+PROCEDURE P802; BEGIN END P802;
+PROCEDURE P803; BEGIN END P803;
+PROCEDURE P804; BEGIN END P804;
+PROCEDURE P805; BEGIN END P805;
+PROCEDURE P806; BEGIN END P806;
+PROCEDURE P807; BEGIN END P807;
+PROCEDURE P808; BEGIN END P808;
+PROCEDURE P809; BEGIN END P809;
+PROCEDURE P810; BEGIN END P810;
+PROCEDURE P811; BEGIN END P811;
+PROCEDURE P812; BEGIN END P812;
+PROCEDURE P813; BEGIN END P813;
+PROCEDURE P814; BEGIN END P814;
+PROCEDURE P815; BEGIN END P815;
+PROCEDURE P816; BEGIN END P816;
+PROCEDURE P817; BEGIN END P817;
+PROCEDURE P818; BEGIN END P818;
+PROCEDURE P819; BEGIN END P819;
+PROCEDURE P820; BEGIN END P820;
+PROCEDURE P821; BEGIN END P821;
+PROCEDURE P822; BEGIN END P822;
+PROCEDURE P823; BEGIN END P823;
+PROCEDURE P824; BEGIN END P824;
+PROCEDURE P825; BEGIN END P825;
+PROCEDURE P826; BEGIN END P826;
+PROCEDURE P827; BEGIN END P827;
+PROCEDURE P828; BEGIN END P828;
+PROCEDURE P829; BEGIN END P829;
+PROCEDURE P830; BEGIN END P830;
+PROCEDURE P831; BEGIN END P831;
+PROCEDURE P832; BEGIN END P832;
+PROCEDURE P833; BEGIN END P833;
+PROCEDURE P834; BEGIN END P834;
+PROCEDURE P835; BEGIN END P835;
+PROCEDURE P836; BEGIN END P836;
+PROCEDURE P837; BEGIN END P837;
+PROCEDURE P838; BEGIN END P838;
+PROCEDURE P839; BEGIN END P839;
+PROCEDURE P840; BEGIN END P840;
+PROCEDURE P841; BEGIN END P841;
+PROCEDURE P842; BEGIN END P842;
+PROCEDURE P843; BEGIN END P843;
+PROCEDURE P844; BEGIN END P844;
+PROCEDURE P845; BEGIN END P845;
+PROCEDURE P846; BEGIN END P846;
+PROCEDURE P847; BEGIN END P847;
+PROCEDURE P848; BEGIN END P848;
+PROCEDURE P849; BEGIN END P849;
+PROCEDURE P850; BEGIN END P850;
+PROCEDURE P851; BEGIN END P851;
+PROCEDURE P852; BEGIN END P852;
+PROCEDURE P853; BEGIN END P853;
+PROCEDURE P854; BEGIN END P854;
+PROCEDURE P855; BEGIN END P855;
+PROCEDURE P856; BEGIN END P856;
+PROCEDURE P857; BEGIN END P857;
+PROCEDURE P858; BEGIN END P858;
+PROCEDURE P859; BEGIN END P859;
+PROCEDURE P860; BEGIN END P860;
+PROCEDURE P861; BEGIN END P861;
+PROCEDURE P862; BEGIN END P862;
+PROCEDURE P863; BEGIN END P863;
+PROCEDURE P864; BEGIN END P864;
+PROCEDURE P865; BEGIN END P865;
+PROCEDURE P866; BEGIN END P866;
+PROCEDURE P867; BEGIN END P867;
+PROCEDURE P868; BEGIN END P868;
+PROCEDURE P869; BEGIN END P869;
+PROCEDURE P870; BEGIN END P870;
+PROCEDURE P871; BEGIN END P871;
+PROCEDURE P872; BEGIN END P872;
+PROCEDURE P873; BEGIN END P873;
+PROCEDURE P874; BEGIN END P874;
+PROCEDURE P875; BEGIN END P875;
+PROCEDURE P876; BEGIN END P876;
+PROCEDURE P877; BEGIN END P877;
+PROCEDURE P878; BEGIN END P878;
+PROCEDURE P879; BEGIN END P879;
+PROCEDURE P880; BEGIN END P880;
+PROCEDURE P881; BEGIN END P881;
+PROCEDURE P882; BEGIN END P882;
+PROCEDURE P883; BEGIN END P883;
+PROCEDURE P884; BEGIN END P884;
+PROCEDURE P885; BEGIN END P885;
+PROCEDURE P886; BEGIN END P886;
+PROCEDURE P887; BEGIN END P887;
+PROCEDURE P888; BEGIN END P888;
+PROCEDURE P889; BEGIN END P889;
+PROCEDURE P890; BEGIN END P890;
+PROCEDURE P891; BEGIN END P891;
+PROCEDURE P892; BEGIN END P892;
+PROCEDURE P893; BEGIN END P893;
+PROCEDURE P894; BEGIN END P894;
+PROCEDURE P895; BEGIN END P895;
+PROCEDURE P896; BEGIN END P896;
+PROCEDURE P897; BEGIN END P897;
+PROCEDURE P898; BEGIN END P898;
+PROCEDURE P899; BEGIN END P899;
+PROCEDURE P900; BEGIN END P900;
+PROCEDURE P901; BEGIN END P901;
+PROCEDURE P902; BEGIN END P902;
+PROCEDURE P903; BEGIN END P903;
+PROCEDURE P904; BEGIN END P904;
+PROCEDURE P905; BEGIN END P905;
+PROCEDURE P906; BEGIN END P906;
+PROCEDURE P907; BEGIN END P907;
+PROCEDURE P908; BEGIN END P908;
+PROCEDURE P909; BEGIN END P909;
+PROCEDURE P910; BEGIN END P910;
+PROCEDURE P911; BEGIN END P911;
+PROCEDURE P912; BEGIN END P912;
+PROCEDURE P913; BEGIN END P913;
+PROCEDURE P914; BEGIN END P914;
+PROCEDURE P915; BEGIN END P915;
+PROCEDURE P916; BEGIN END P916;
+PROCEDURE P917; BEGIN END P917;
+PROCEDURE P918; BEGIN END P918;
+PROCEDURE P919; BEGIN END P919;
+PROCEDURE P920; BEGIN END P920;
+PROCEDURE P921; BEGIN END P921;
+PROCEDURE P922; BEGIN END P922;
+PROCEDURE P923; BEGIN END P923;
+PROCEDURE P924; BEGIN END P924;
+PROCEDURE P925; BEGIN END P925;
+PROCEDURE P926; BEGIN END P926;
+PROCEDURE P927; BEGIN END P927;
+PROCEDURE P928; BEGIN END P928;
+PROCEDURE P929; BEGIN END P929;
+PROCEDURE P930; BEGIN END P930;
+PROCEDURE P931; BEGIN END P931;
+PROCEDURE P932; BEGIN END P932;
+PROCEDURE P933; BEGIN END P933;
+PROCEDURE P934; BEGIN END P934;
+PROCEDURE P935; BEGIN END P935;
+PROCEDURE P936; BEGIN END P936;
+PROCEDURE P937; BEGIN END P937;
+PROCEDURE P938; BEGIN END P938;
+PROCEDURE P939; BEGIN END P939;
+PROCEDURE P940; BEGIN END P940;
+PROCEDURE P941; BEGIN END P941;
+PROCEDURE P942; BEGIN END P942;
+PROCEDURE P943; BEGIN END P943;
+PROCEDURE P944; BEGIN END P944;
+PROCEDURE P945; BEGIN END P945;
+PROCEDURE P946; BEGIN END P946;
+PROCEDURE P947; BEGIN END P947;
+PROCEDURE P948; BEGIN END P948;
+PROCEDURE P949; BEGIN END P949;
+PROCEDURE P950; BEGIN END P950;
+PROCEDURE P951; BEGIN END P951;
+PROCEDURE P952; BEGIN END P952;
+PROCEDURE P953; BEGIN END P953;
+PROCEDURE P954; BEGIN END P954;
+PROCEDURE P955; BEGIN END P955;
+PROCEDURE P956; BEGIN END P956;
+PROCEDURE P957; BEGIN END P957;
+PROCEDURE P958; BEGIN END P958;
+PROCEDURE P959; BEGIN END P959;
+PROCEDURE P960; BEGIN END P960;
+PROCEDURE P961; BEGIN END P961;
+PROCEDURE P962; BEGIN END P962;
+PROCEDURE P963; BEGIN END P963;
+PROCEDURE P964; BEGIN END P964;
+PROCEDURE P965; BEGIN END P965;
+PROCEDURE P966; BEGIN END P966;
+PROCEDURE P967; BEGIN END P967;
+PROCEDURE P968; BEGIN END P968;
+PROCEDURE P969; BEGIN END P969;
+PROCEDURE P970; BEGIN END P970;
+PROCEDURE P971; BEGIN END P971;
+PROCEDURE P972; BEGIN END P972;
+PROCEDURE P973; BEGIN END P973;
+PROCEDURE P974; BEGIN END P974;
+PROCEDURE P975; BEGIN END P975;
+PROCEDURE P976; BEGIN END P976;
+PROCEDURE P977; BEGIN END P977;
+PROCEDURE P978; BEGIN END P978;
+PROCEDURE P979; BEGIN END P979;
+PROCEDURE P980; BEGIN END P980;
+PROCEDURE P981; BEGIN END P981;
+PROCEDURE P982; BEGIN END P982;
+PROCEDURE P983; BEGIN END P983;
+PROCEDURE P984; BEGIN END P984;
+PROCEDURE P985; BEGIN END P985;
+PROCEDURE P986; BEGIN END P986;
+PROCEDURE P987; BEGIN END P987;
+PROCEDURE P988; BEGIN END P988;
+PROCEDURE P989; BEGIN END P989;
+PROCEDURE P990; BEGIN END P990;
+PROCEDURE P991; BEGIN END P991;
+PROCEDURE P992; BEGIN END P992;
+PROCEDURE P993; BEGIN END P993;
+PROCEDURE P994; BEGIN END P994;
+PROCEDURE P995; BEGIN END P995;
+PROCEDURE P996; BEGIN END P996;
+PROCEDURE P997; BEGIN END P997;
+PROCEDURE P998; BEGIN END P998;
+PROCEDURE P999; BEGIN END P999;
+PROCEDURE P1000; BEGIN END P1000;
+PROCEDURE P1001; BEGIN END P1001;
+PROCEDURE P1002; BEGIN END P1002;
+PROCEDURE P1003; BEGIN END P1003;
+PROCEDURE P1004; BEGIN END P1004;
+PROCEDURE P1005; BEGIN END P1005;
+PROCEDURE P1006; BEGIN END P1006;
+PROCEDURE P1007; BEGIN END P1007;
+PROCEDURE P1008; BEGIN END P1008;
+PROCEDURE P1009; BEGIN END P1009;
+PROCEDURE P1010; BEGIN END P1010;
+PROCEDURE P1011; BEGIN END P1011;
+PROCEDURE P1012; BEGIN END P1012;
+PROCEDURE P1013; BEGIN END P1013;
+PROCEDURE P1014; BEGIN END P1014;
+PROCEDURE P1015; BEGIN END P1015;
+PROCEDURE P1016; BEGIN END P1016;
+PROCEDURE P1017; BEGIN END P1017;
+PROCEDURE P1018; BEGIN END P1018;
+PROCEDURE P1019; BEGIN END P1019;
+PROCEDURE P1020; BEGIN END P1020;
+PROCEDURE P1021; BEGIN END P1021;
+PROCEDURE P1022; BEGIN END P1022;
+PROCEDURE P1023; BEGIN END P1023;
+PROCEDURE P1024; BEGIN END P1024;
+PROCEDURE P1025; BEGIN END P1025;
+PROCEDURE P1026; BEGIN END P1026;
+PROCEDURE P1027; BEGIN END P1027;
+PROCEDURE P1028; BEGIN END P1028;
+PROCEDURE P1029; BEGIN END P1029;
+PROCEDURE P1030; BEGIN END P1030;
+PROCEDURE P1031; BEGIN END P1031;
+PROCEDURE P1032; BEGIN END P1032;
+PROCEDURE P1033; BEGIN END P1033;
+PROCEDURE P1034; BEGIN END P1034;
+PROCEDURE P1035; BEGIN END P1035;
+PROCEDURE P1036; BEGIN END P1036;
+PROCEDURE P1037; BEGIN END P1037;
+PROCEDURE P1038; BEGIN END P1038;
+PROCEDURE P1039; BEGIN END P1039;
+PROCEDURE P1040; BEGIN END P1040;
+PROCEDURE P1041; BEGIN END P1041;
+PROCEDURE P1042; BEGIN END P1042;
+PROCEDURE P1043; BEGIN END P1043;
+PROCEDURE P1044; BEGIN END P1044;
+PROCEDURE P1045; BEGIN END P1045;
+PROCEDURE P1046; BEGIN END P1046;
+PROCEDURE P1047; BEGIN END P1047;
+PROCEDURE P1048; BEGIN END P1048;
+PROCEDURE P1049; BEGIN END P1049;
+PROCEDURE P1050; BEGIN END P1050;
+PROCEDURE P1051; BEGIN END P1051;
+PROCEDURE P1052; BEGIN END P1052;
+PROCEDURE P1053; BEGIN END P1053;
+PROCEDURE P1054; BEGIN END P1054;
+PROCEDURE P1055; BEGIN END P1055;
+PROCEDURE P1056; BEGIN END P1056;
+PROCEDURE P1057; BEGIN END P1057;
+PROCEDURE P1058; BEGIN END P1058;
+PROCEDURE P1059; BEGIN END P1059;
+PROCEDURE P1060; BEGIN END P1060;
+PROCEDURE P1061; BEGIN END P1061;
+PROCEDURE P1062; BEGIN END P1062;
+PROCEDURE P1063; BEGIN END P1063;
+PROCEDURE P1064; BEGIN END P1064;
+PROCEDURE P1065; BEGIN END P1065;
+PROCEDURE P1066; BEGIN END P1066;
+PROCEDURE P1067; BEGIN END P1067;
+PROCEDURE P1068; BEGIN END P1068;
+PROCEDURE P1069; BEGIN END P1069;
+PROCEDURE P1070; BEGIN END P1070;
+PROCEDURE P1071; BEGIN END P1071;
+PROCEDURE P1072; BEGIN END P1072;
+PROCEDURE P1073; BEGIN END P1073;
+PROCEDURE P1074; BEGIN END P1074;
+PROCEDURE P1075; BEGIN END P1075;
+PROCEDURE P1076; BEGIN END P1076;
+PROCEDURE P1077; BEGIN END P1077;
+PROCEDURE P1078; BEGIN END P1078;
+PROCEDURE P1079; BEGIN END P1079;
+PROCEDURE P1080; BEGIN END P1080;
+PROCEDURE P1081; BEGIN END P1081;
+PROCEDURE P1082; BEGIN END P1082;
+PROCEDURE P1083; BEGIN END P1083;
+PROCEDURE P1084; BEGIN END P1084;
+PROCEDURE P1085; BEGIN END P1085;
+PROCEDURE P1086; BEGIN END P1086;
+PROCEDURE P1087; BEGIN END P1087;
+PROCEDURE P1088; BEGIN END P1088;
+PROCEDURE P1089; BEGIN END P1089;
+PROCEDURE P1090; BEGIN END P1090;
+PROCEDURE P1091; BEGIN END P1091;
+PROCEDURE P1092; BEGIN END P1092;
+PROCEDURE P1093; BEGIN END P1093;
+PROCEDURE P1094; BEGIN END P1094;
+PROCEDURE P1095; BEGIN END P1095;
+PROCEDURE P1096; BEGIN END P1096;
+PROCEDURE P1097; BEGIN END P1097;
+PROCEDURE P1098; BEGIN END P1098;
+PROCEDURE P1099; BEGIN END P1099;
+PROCEDURE P1100; BEGIN END P1100;
+BEGIN ExitCode := 0 END TManyProc.

+ 8 - 5
docs/STATUS.md

@@ -4,9 +4,9 @@ This answers "where are we now?".
 
 ## Numbers
 
-- Suite **246/246** (`compiler/run_tests.sh`).
+- Suite **247/247** (`compiler/run_tests.sh`).
 - Self-hosting **FIXPOINT OK** — stage2 and stage3 images are
-  byte-identical (3,872,467 bytes).
+  byte-identical (3,873,552 bytes).
 - Corpus **427 / 612** sources compile with 0 errors, **0 crashes**
   (`tools/v3-corpus/corpus.sh` over the gm2 testsuite); the rest are
   genuine language gaps, **gm2 leniencies V3 deliberately rejects**, or
@@ -128,8 +128,11 @@ declarations still work (`t_fwdproc`, `t_fwdok`).
    (remove ASTDUMP; gate on `Parsed correctly`; declare Lower's walkers
    in `Lower.def`).  The gate now fails on errors (verified with
    `t_fwdvar`), and self-hosting stays byte-identical.
-3. **Robustness** — fixed table limits resolve silently when exceeded;
-   weak error recovery; error-message polish.
+3. **Robustness** — *table-limit overflows are now loud* (2026-10-19):
+   the two-phase span table (which silently dropped a body's codegen,
+   `t_manyproc`), the label/`GOTO` tables, the 32-actual AST buffer and
+   `SymTab`'s `MaxTypes` all report `230` (implementation limit) instead
+   of truncating silently.  Still weak: error recovery and message polish.
 4. **Library holes** — channel/device framework (`docs/wip/`).
 5. **Housekeeping** — `docs/INDEX.md` is the entry point; the
    unreferenced historical records are under `docs/archive/` (2026-10-19).
@@ -140,7 +143,7 @@ declarations still work (`t_fwdproc`, `t_fwdok`).
 ```sh
 cd compiler
 ./build.sh          # M2.atg -> scanner/parser/driver -> ./M2
-./run_tests.sh      # 246/246
+./run_tests.sh      # 247/247
 cd ..
 ./bootstrap/fixpoint.sh   # FIXPOINT OK (byte-identical stage2/stage3)
 ```

+ 20 - 8
docs/handoff-2026-10-19-next.md

@@ -2,8 +2,8 @@
 
 **Branch state (2026-10-19):** work is on `master`, tree clean.
 
-**Baseline:** suite **246/246**, fixpoint **OK (3,869,013 bytes)**,
-corpus **421/612, 0 crashes**.
+**Baseline:** suite **247/247**, fixpoint **OK (3,873,552 bytes)**,
+corpus **427/612, 0 crashes**.
 
 **Policy:** follow **Modula-2**, not gm2 degradation — declaration
 before use (only a `POINTER`'s base may forward-reference).  In
@@ -91,10 +91,22 @@ reporting `Incorrect source`.  Removing the dump unmasked *real* errors
 (Lower's forward procedure calls).  Already fixed in `a3ef897`; verified
 the gate now fails on errors.  See `docs/summary_l3_selfhost_fix.md`.
 
-**New remaining latent item:** the *record array field as an open-array
-actual* bug (inline length word lost in static array-of-record data) —
-worked around by flattening; the general codegen fix and
-`docs/wip/nested-array-field-bug.mod` are still open.
+**Latent item — fixed:** the *record array field as an open-array
+actual* bug (inline length word lost in static array-of-record data) was
+resolved by the hybrid `QbeGen.ArrBodyItems`/`InitRecArray` fix; covered
+by `t_arrrecfld`/`t_arrrecbig`/`t_nestarr` (all green).  No open codegen
+case remains.
+
+## Next: robustness  ✅ first pass (2026-10-19)
+
+Table-limit overflows are now loud (`SemError(230)`) instead of silent:
+the two-phase span table (silently dropped a body's codegen — regression
+`t_manyproc`), the label/`GOTO` tables, the 32-actual AST buffer, and
+`SymTab.MaxTypes` (`TypesOverflow`).  Remaining: error recovery and
+message polish, and the library holes (`docs/wip/`).
+
+**Baseline:** suite **247/247**, fixpoint **OK (3,873,552 bytes)**,
+corpus **427/612, 0 crashes**.
 
 ## P5 — housekeeping  ✅ DONE (2026-10-19)
 
@@ -130,9 +142,9 @@ commit with a `v3-*` tag.
 ```sh
 cd .../m2compiler-V3
 git checkout master
-cd compiler && ./build.sh && ./run_tests.sh   # 246/246
+cd compiler && ./build.sh && ./run_tests.sh   # 247/247
 cd .. && TMP="$PWD/.scratch/fixpoint" ./bootstrap/fixpoint.sh
-tools/v3-corpus/corpus.sh                     # 421 OK, 0 crash
+tools/v3-corpus/corpus.sh                     # 427 OK, 0 crash
 ```
 
 **Recommendation:** P1 (two bounded wins) next, then reserve a separate

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików