This patch adds support for inline procedure names, a non-intrusive debug method supported by GSBug and NiftyList. See IIgs technote #103 for more information.
Setting bit 15 ($8000) of the {$debug} directive enables inline
names.
Unified Diff:
==== cgi.pas (text) ====
@@ -170,6 +170,7 @@
codeGeneration: boolean; {is code generation on?}
commonSubexpression: boolean; {do common subexpression removal?}
debugFlag: boolean; {generate debugger calls?}
+ debugStrFlag: boolean; {gsbug/niftylist debug names?}
floatCard: integer; {0 -> SANE; 1 -> FPE}
floatSlot: integer; {FPE slot}
isDynamic: boolean; {are segments dynamic?}
@@ -686,6 +687,7 @@
rangeCheck := false; {don't generate range checks}
profileFlag := false; {don't generate profiling code}
debugFlag := false; {don't generate debug code}
+debugStrFlag := false; {don't generate gsbug debug strings}
traceBack := false; {don't generate traceback code}
registers := cLineOptimize; {don't do register optimizations}
==== gen.pas (text) ====
@@ -4089,11 +4089,28 @@
end; {GenDviMod}
- procedure GenEnt;
+ procedure GenEnt (op: icptr);
{ Generate code for a pc_ent }
+ var
+ i: integer;
+ len: integer;
+
+
begin {GenEnt}
+
+ if debugStrFlag then begin {gsbug/niftylist debug string}
+ len := length(op^.lab^);
+ CnOut(m_brl);
+ CnOut2(len + 3);
+ CnOut2($7771);
+ CnOut(len);
+ for i := 1 to len do
+ CnOut(ord(op^.lab^[i]));
+ end;
+
+
if rangeCheck then begin {if range checking is on, check for a stack overflow}
GenNative(m_pea, immediate, localSize - returnSize - 1, nil, 0);
GenCall(129);
@@ -5644,7 +5661,7 @@
pc_dec,pc_inc: GenIncDec(op, nil);
pc_dif,pc_int,pc_uni: GenDifIntUni(op);
pc_dvi,pc_mod,pc_udi,pc_uim: GenDviMod(op);
- pc_ent: GenEnt;
+ pc_ent: GenEnt(op);
pc_equ,pc_neq: GenEquNeq(op, op^.opcode, 0);
pc_fix: GenFix(op);
pc_fjp,pc_tjp: GenFjpTjp(op);
==== scanner.pas (text) ====
@@ -691,6 +691,7 @@
val := GetInteger;
debugFlag := odd(val);
profileFlag := (val & $0002) <> 0;
+ debugStrFlag := (val & $8000) <> 0;
end; {DoDebug}
==== parser.pas (text) ====
@@ -4411,7 +4411,9 @@
Gen0(dc_pin)
else {imbeded procedure}
Gen1(dc_lab, fprocp^.pfname);
- Gen0(pc_ent); {create a stack frame}
+ {Gen0(pc_ent); {create a stack frame}
+ Gen1Nam(pc_ent, 0, fprocp^.name);
+
ResetTemp; {forget old temporary variables}
lcp := fprocp^.pfparms; {generate code for passed parameters}