Search Top Index
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. ----------