--- THE LISP STEPPER --- (FOR MORE INFORMATION THAN PROVIDED HERE CONTACT THE AUTHOR: MATTHEW MORGENSTERN M.I.T. NE43-317 253-3546 OR :MAIL TO MM; @ML:) TO LOAD: FROM LISP EXECUTE (FASLOAD STEPMM FASL COM). NOTE: THE STEPPER HAS BEEN MODIFIED TO WORK IN BOTH OLDIO AND NEWIO LISP ENVIRONMENTS. AN ENDPAGEFN IS PROVIDED WITHIN THE STEPPER FOR NEWIO AND IT MAY BE CHANGED BY GIVING A DIFFERENT VALUE TO THE ATOM MMSTEP-ENDPAGEFN . THIS IS ALSO THE NAME OF THE INITIAL ENDPAGEFN, AND IT CAN BE USED OUTSIDE THE STEPPER TOO BY DOING (ENDPAGEFN T 'MMSTEP-ENDPAGEFN). TO CURRENT USERS: A NEW INTERESTING DISPLAY MODE IS NOW AVAILABLE, SEE THE S COMMAND. OTHER NEW COMMANDS INCLUDE (U -), PATTERN MATCHING FOR AN S-EXPRESSION IN A (COND ...), E(VAL), WTALL (WAIT-ALL), WTIF (WAIT-IF), AND VARIABLE LENGTH PAUSING WHILE IN A AND C MODES. I CAPABILITIES THE LISP STEPPER PACKAGE PROVIDES DEBUGGING CAPABILITIES FOR INTERPRETED LISP PROGRAMS THAT ARE COMPARABLE TO THE CAPABILITIES PROVIDED BY DDT FOR ASSEMBLER CODE. THESE CAPABILITIES INCLUDE: 1) SINGLE STEPPING THROUGH THE EVALUATION OF A FUNCTION AND OVER OR INTO OTHER INTERPRETED FUNCTIONS, WHEN CALLED, ON A SELECTIVE BASIS AS DETERMINED BY THE USER. EACH SUCH FORM AND ITS RESULTING VALUE MAY BE DISPLAYED. 2) DYNAMIC BREAKPOINTING ON ONE OR MORE OF THE FOLLOWING CONDITIONS: THE S-EXPRESSION OR ATOM ABOUT TO BE EVALUATED MATCHES A PATTERN YOU PROVIDE; A SPECIFIC FUNCTION IS EXPLICITLY EVAL'D; A GIVEN ATOM EVALUATES TO A GIVEN VALUE; A GIVEN ATOM IS TO BE BOUND IN A PROG, EITHER TYPE OF DO, OR AN EVAL'D LAMBDA; OR UPON AN ARBITRARY USER-SPECIFIED CONDITION. 3) RETURNING A DIFFERENT VALUE FOR A GIVEN S-EXPRESSION -- THIS ALLOWS FOR CHANGING THE ACTION THAT WOULD BE INITIATED BY CONDITIONALS IN THE PROGRAM AND/OR BY GO'S IN A PROG OR DO. YOU CAN ALSO "GO" TO ANY INSIDE THE CURRENT PROG. 4) THESE CAPABILITIES MAY BE REQUESTED WHEN THE INITIAL FUNCTION IS STARTED, OR THEY MAY BE INITIATED AT ANY OTHER POINT IN THE COURSE OF EXECUTION -- EITHER FROM THE CONSOLE WHILE IN A BREAKPOINT, OR DIRECTLY FROM THE PROGRAM. II HOW TO USE THE STEPPER MAY BE INVOKED INITIALLY BY USING THE FUNCTION MEV AS ONE WOULD USE EVAL OF ONE ARGUMENT; EG. (MEV '(FCN ARG1 ARG2)). FROM A BREAKPOINT OR IN A PROGRAM, THE STEPPER MAY BE TURNED ON BY INVOKING (HKSTART) WITH NO ARGUMENTS. IT MAY BE TURNED OFF BY THE Q COMMAND DESCRIBED BELOW, OR OF COURSE BY CONTROL-G. AFTER MEV EVALUATES ITS ARGUMENT, IT RETURNS THE VALUE AND TURNS OFF THE STEPPER. NOTE THAT IN THE ABOVE EXAMPLE THE FORM TO MEV WAS QUOTED. IF, SAY, THE VALUE OF F WAS THE S-EXPRESSION (FCN ARG1 ARG2), THEN ONE COULD USE (MEV F) INSTEAD. AT ANY POINT DURING THE STEPPING, ONE MAY INSPECT THE VALUES OF OTHER VARIABLES, AND EVEN REAPPLY MEV TO ANY FORM. THIS MAY BE DONE IN EITHER OF THREE WAYS. EACH COMMAND WILL BE PROMPTED FOR BY // , USUALLY FOLLOWING THE LAST FORM PRINTED OUT. ANY S-EXPRESSION THAT YOU TYPE WHICH IS NOT RECOGNIZED AS A COMMAND WILL BE EVAL'D (WITHIN AN ERRSET TO CATCH ERRORS). ALTERNATIVELY, YOU CAN USE THE E COMMAND TO EVAL ANY EXPRESSION, OR THE H COMMAND TO GET A NICE TYPE OF CONTROL-H BREAK. EACH COMMAND MUST BE FOLLOWED BY A SPACE (UNLESS THE COMMAND IS A LIST). EACH FORM AND RESULT WHICH IS PRINTED OUT WILL BE FOLLOWED BY # INDICATING THE RELATIVE LEVEL OF EVALUATION (IE. STACK DEPTH SINCE INVOCATION). THE PRIMARY COMMANDS ARE: D (MNEMONIC FOR DOWN) GO DOWN TO THE NEXT DEEPER LEVEL OF EVALUATION AND DISPLAY THE FIRST FORM THERE BEFORE EVALUATING IT. EG. IF THE FORM IS A FUNCTION CALL, WILL DISPLAY THE FIRST ARGUMENT OF THE FUNCTION IF IT HAS ARGUMENTS IN THE CALL; ELSE WILL DISPLAY THE FIRST S-EXP OF THE FUNCTION. THEN PROMPTS FOR THE NEXT COMMAND. E (EVAL) CAN BE USED TO EVAL AN ARBITRARY EXPRESSION. IT STARTS A NEW LINE, WAITS FOR YOU TO TYPE THE EXPRESSION, THEN EVAL'S IT WITHIN AN ERRSET, AND PRINTS THE RESULT. COMPARABLE TO JUST TYPING THE EXPRESSION OR ATOM AFTER THE //, BUT CANNOT BE CONFUSED WITH A COMMAND, AND THE FORMAT IS NICER. H (CONTROL-H) EXECUTES A CONTROL-H BREAK, AND WHEN $P'ED DISPLAYS THE CURRENT FORM. WITHIN THE BREAK, ONE CAN INSPECT THE VALUES OF VARIABLES, ETC., AND EVEN REAPPLY MEV TO ANY FORM. N (NEXT) DISPLAY THE NEXT FORM (IE. S-EXP) AT THIS LEVEL, WITHOUT SHOWING OR INSPECTING THE EVALUATION OF THE LOWER LEVELS OF THE CURRENT FORM. THE VALUE OF THE CURRENT FORM IS DISPLAYED FIRST. IF YOU WISH A CONDITION TO BE TESTED FOR AT LOWER LEVELS, USE NN INSTEAD. NN LIKE N BUT SLOWER SINCE IT INSPECTS THE LOWER LEVELS. USE INSTEAD OF N WHEN TESTING FOR A CONDITION. U (UP) GO UP TO THE NEXT HIGHER LEVEL OF EVALUATION AND SHOW THE NEXT FORM AT THAT LEVEL. THE FORM(S) AT THE CURRENT AND LOWER LEVELS ARE EVALUATED WITHOUT DISPLAY. AS AN EXAMPLE OF ITS USE, AFTER YOU HAVE SEEN THE EVALUATION OF THE ARGUMENTS TO A FUNCTION, THE NEXT FORM TO BE EVALUATED, IF THE FUNCTION IS BEING INTERPRETED, WILL BE THE FIRST S-EXPRESSION OF THE FUNCTION; TO AVOID SEEING HOW THE FUNCTION IS EVALUATED INTERNALLY, YOU CAN TYPE U . NOTE THAT THE LOWER LEVELS ARE NOT INSPECTED -- THUS IF A CONDITION IS TO BE TESTED FOR AT THESE LEVELS, USE UU. (U ) IF IS POSITIVE (INCL. 0), FORMS ARE NOT INSPECTED NOR DISPLAYED UNTIL THAT LEVEL NUMBER IS RETURNED TO. IF NEGATIVE, GOES UP THIS NUMBER (ABSOLUTE VALUE) OF LEVELS RELATIVE TO THE CURRENT LEVEL. THUS (U -1) IS EQUIVALENT TO U . UU LIKE U BUT SLOWER. USE IF TESTING FOR A CONDITION. (UU ) LIKE (U ) BUT SLOWER. USE IF TESTING FOR A CONDITION. Q (QUIT) EXIT FROM THE STEPPER. S (SHOW OR DISPLAY MODE) FOR DATAPOINTS AND OTHER DISPLAY CONSOLES, THIS GIVES A NICE EASY READING OUTPUT OF SELECTED LEVELS THAT CONSTITUTE THE CONTEXT OF THE CURRENT EVALUATION. SPECIFICALLY, IT SELECTS THE CURRENT LEVEL FOR SPRINTING AS A "HEADER", AND AS YOU GO DEEPER, THE LOCAL CONTEXT IS ABBREVIATE-PRINTED UNDER THIS HEADER, AND THE CURRENT OUTPUT WILL BE SPRINTED. S MAY BE USED AS OFTEN AS YOU LIKE. HEADERS WILL AUTOMATICALLY BE POPPED WHEN YOU RETURN . THE COMMAND (S ) SELECTS A PARTICULAR LEVEL AS A HEADER. IT AND THE COMMAND SN AND SEVERAL USER SETTABLE PARAMETERS ARE DESCRIBED IN THE MORE DETAILED SECTION BELOW. (= ) THE S-EXPRESSION IS SUBSTITUTED FOR THE CURRENT FORM AND ANOTHER COMMAND IS PROMPTED FOR (IE. YOU CAN STEP INTO OR OVER THE NEW FORM IF YOU WANT TO). WHEN THE RESULTING VALUE IS RETURNED IT WILL BE AS IF THE ORIGINAL FORM HAD YIELDED THAT VALUE. FOR EXAMPLE YOU CAN CHANGE THE APPARENT TRUTH OR FALSITY OF PREDICATES OR BYPASS A (GO