HELP SHOWCODE Jonathan Laventhol, 30th January 1984
Updated Mark Rubinstein February 1986
lib showcode;
This library package makes the intermediate-code planting instructions
(such as sysSYNTAX) print tracing information. This is useful for
debugging compilers.
It alters the planting procedures to print information when the variable
POP_SHOW_CODE is true. The procedures run as normally apart from this.
Note that calls to the code-planting procedures compiled BEFORE the
loading of the library file will not be affected.
The tracing for these calls
sysSYNTAX("hello", "procedure", false);
sysLABEL(sysNEW_LABEL());
sysERASE("dummy");
sysERASE("dummy");
will print
SYNTAX hello procedure <false>
label_2
ERASE dummy
ERASE dummy
note that the leading "sys" isn't printed, and the special printing for
calls to sysLABEL.
false -> pop_show_code; ;;; switch printing off
true -> pop_show_code; ;;; switch it on
You can use LIB *SHOWCODE to do something other than print a trace of
the code planting procedures by redefining the variable procedure
-popshowcodepdr- (default: popshowcodesyspdr). The procedure should
take two arguments, the name of the code planting procedure and a vector
of arguments.
For example if you want to keep a list of the code for procedures in a
property called -vmcodefor- (see HELP * NEWPROPERTY) then:
vars
vmcodefor = newproperty([], 32, true, false),
current_codelist = [],
define popshowcodepdr(name, args);
lvars name args;
if name == "sysPASSIGN" then
;;; second argument will be the variable being assigned to
rev(current_codelist) -> vmcodefor(args(2))
else
if name == "sysPROCEDURE" then
[] -> current_codelist;
endif;
;;; strip off the "sys"
[% allbutfirst(3, name), args %] :: current_codelist
-> current_codelist;
endif;
enddefine;
(NOTE: the above procedure is a little simplified as it will not cope
with nested procedures).
See REF *VMCODE for more information on the code planting procedures
which are affected:
sysAND, sysCALL, sysCALLQ, sysCALLS, sysCOMPILE, sysCONSTANT, sysDUMMY,
sysDUMMY_PREOP, sysENDPROCEDURE, sysERASE, sysEXECUTE, sysGLOBAL,
sysGOTO, sysGO_ON, sysIFNOT, sysIFSO, sysLABEL, sysLCONSTANT, sysLOCAL,
sysLVARS, sysNEW_LVAR, sysOR, sysPASSIGN, sysPLOG_RESTORE, sysPLOG_SAVE,
sysPOP, sysPROCEDURE, sysPUSH, sysPUSHQ, sysPUSHS, sysSYNTAX, sysUCALL,
sysUCALLQ, sysUCALLS, sysUPASSIGN, sysVARS, sysNEW_LABEL.
--- C.all/help/showcode
--- Copyright University of Sussex 1992. All rights reserved. ----------Author: Jonathan Laventhol, 30th January 1984