(FILECREATED "20-Jul-86 23:46:00" {ERIS}<LISPCORE>EVAL>CMLWALK.;1 25123 changes to: (VARS CMLWALKCOMS) (VARIABLES *WALK-FUNCTION* *WALK-FORM* *DECLARATIONS* *LEXICAL-VARIABLES* *ENVIRONMENT* *WALK-COPY*) previous date: " 2-Jul-86 18:40:53" {ERIS}<LISPCORE>LIBRARY>CMLWALK.;27) (* Copyright (c) 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT CMLWALKCOMS) (RPAQQ CMLWALKCOMS [(VARIABLES *WALK-FUNCTION* *WALK-FORM* *DECLARATIONS* *LEXICAL-VARIABLES* *ENVIRONMENT* *WALK-COPY*) (FUNCTIONS WITH-NEW-CONTOUR NOTE-LEXICAL-BINDING NOTE-DECLARATION) (FUNCTIONS VARIABLE-SPECIAL-P VARIABLE-LEXICAL-P GET-WALKER-TEMPLATE) (FUNCTIONS WALK-FORM) (FNS WALK-FORM-INTERNAL WALK-TEMPLATE WALK-TEMPLATE-HANDLE-REPEAT WALK-TEMPLATE-HANDLE-REPEAT-1 WALK-LIST WALK-RECONS) (FUNCTIONS WALK-RELIST*) (FNS WALK-DECLARATIONS WALK-ARGLIST WALK-LAMBDA) (COMS (PROP WALKER-TEMPLATE COMPILER-LET) (FNS WALK-COMPILER-LET) (PROP WALKER-TEMPLATE DECLARE) (FNS WALK-UNEXPECTED-DECLARE) (PROP WALKER-TEMPLATE LET PROG LET* PROG*) (FNS WALK-LET WALK-LET* WALK-LET/LET*) (PROP WALKER-TEMPLATE TAGBODY) (FNS WALK-TAGBODY) (PROP WALKER-TEMPLATE FLET LABELS) (FNS WALK-FLET/LABELS) (PROP WALKER-TEMPLATE FUNCTION CL:FUNCTION GO CL:IF MULTIPLE-VALUE-CALL MULTIPLE-VALUE-PROG1 PROGN PROGV QUOTE RETURN-FROM RETURN CL:SETQ CL:BLOCK CATCH EVAL-WHEN THE THROW UNWIND-PROTECT LOAD-TIME-EVAL COND UNWIND-PROTECT SETQ AND OR )) (COMS (* for Interlisp) (PROP WALKER-TEMPLATE RPAQ? RPAQ XNLSETQ ERSETQ NLSETQ RESETVARS)) (PROP FILETYPE CMLWALK) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA WALK-FLET/LABELS WALK-TAGBODY WALK-LET/LET* WALK-LET* WALK-LET WALK-UNEXPECTED-DECLARE WALK-COMPILER-LET WALK-LAMBDA WALK-ARGLIST WALK-DECLARATIONS WALK-RECONS WALK-TEMPLATE-HANDLE-REPEAT-1 WALK-TEMPLATE-HANDLE-REPEAT WALK-TEMPLATE WALK-FORM-INTERNAL]) (DEFVAR *WALK-FUNCTION* NIL "the function being called on each sub-form in the code-walker") (DEFVAR *WALK-FORM* "When the first argument to the IF template in the code-walker is a list, it will be evaluated with *walk-form* bound to the form currently being walked." ) (DEFVAR *DECLARATIONS* "a list of the declarations currently in effect while codewalking" ) (DEFVAR *LEXICAL-VARIABLES* "a list of the variables bound in the current contour while walking." ) (DEFVAR *ENVIRONMENT* "while codewalking, this is the lexical environment as far as macros are concerned" ) (DEFVAR *WALK-COPY* "while walking, this is true if we are making a copy of the expresion being walked" ) (DEFMACRO WITH-NEW-CONTOUR (&BODY BODY) (* WITH-NEW-CONTOUR is used to enter a new lexical binding contour which inherits from the exisiting one. Using WITH-NEW-CONTOUR is often overkill: It would suffice for the the walker to rebind *LEXICAL-VARIABLES* and *DECLARATIONS* when walking LET and rebind *ENVIRONMENT* and *DECLARATIONS* when walking MACROLET etc. WITH-NEW-CONTOUR is much more convenient and just as correct. *) (BQUOTE (LET ((*DECLARATIONS* NIL) (*LEXICAL-VARIABLES* *LEXICAL-VARIABLES*) (*ENVIRONMENT* *ENVIRONMENT*)) \, BODY))) (DEFMACRO NOTE-LEXICAL-BINDING (THING) (BQUOTE (CL:PUSH (\, THING) *LEXICAL-VARIABLES*))) (DEFMACRO NOTE-DECLARATION (DECLARATION) (BQUOTE (CL:PUSH (\, DECLARATION) *DECLARATIONS*))) (DEFUN VARIABLE-SPECIAL-P (VAR) (* lmm "27-May-86 15:42") (OR (for DECL in *DECLARATIONS* do (AND (EQ (CAR DECL) (QUOTE SPECIAL)) (FMEMB VAR (CDR DECL)) (RETURN T))) (VARIABLE-GLOBALLY-SPECIAL-P VAR))) (DEFUN VARIABLE-LEXICAL-P (VAR) (* lmm "11-Apr-86 10:59") (AND (NOT (VARIABLE-SPECIAL-P VAR)) (CL:MEMBER VAR *LEXICAL-VARIABLES* :TEST (FUNCTION EQ)))) (DEFUN GET-WALKER-TEMPLATE (X) (* lmm "24-May-86 14:48") (CL:IF (NOT (SYMBOLP X)) (QUOTE (CL:LAMBDA REPEAT (EVAL))) (GET X (QUOTE WALKER-TEMPLATE)))) (DEFUN WALK-FORM (FORM &KEY ((:DECLARATIONS *DECLARATIONS*) NIL) ((:LEXICAL-VARIABLES *LEXICAL-VARIABLES*) NIL) ((:ENVIRONMENT *ENVIRONMENT*) NIL) ((:WALK-FUNCTION *WALK-FUNCTION*) (FUNCTION (CL:LAMBDA (X IGNORE) IGNORE X))) ((:COPY *WALK-COPY*) T)) "Walk FORM, expanding all macros, calling :WALK-FUNCTION on each subfof :COPY is true (default), will return the expansion" (WALK-FORM-INTERNAL FORM (QUOTE EVAL))) (DEFINEQ (WALK-FORM-INTERNAL [CL:LAMBDA (FORM CONTEXT &AUX FN TEMPLATE WALK-NO-MORE-P NEWFORM) (* lmm "24-May-86 20:28") (* WALK-FORM-INTERNAL is the main driving function for the code walker. It takes a form and the current context and walks the form calling itself or the appropriate template recursively.) (MULTIPLE-VALUE-SETQ (NEWFORM WALK-NO-MORE-P) (FUNCALL *WALK-FUNCTION* FORM CONTEXT)) (COND (WALK-NO-MORE-P NEWFORM) ((NOT (EQ FORM NEWFORM)) (WALK-FORM-INTERNAL NEWFORM CONTEXT)) ((NOT (CONSP FORM)) FORM) ((NOT (SYMBOLP (CAR FORM))) (WALK-TEMPLATE FORM (QUOTE (CALL REPEAT (EVAL))) CONTEXT)) ((SETQ TEMPLATE (GET-WALKER-TEMPLATE (CAR FORM))) (CL:IF (SYMBOLP TEMPLATE) (FUNCALL TEMPLATE FORM CONTEXT) (WALK-TEMPLATE FORM TEMPLATE CONTEXT))) ((NEQ FORM (SETQ FORM (MACROEXPAND-1 FORM *ENVIRONMENT*))) (WALK-FORM-INTERNAL FORM CONTEXT)) (T (* Otherwise, walk the form as if its just a standard function call using a template for standard function call.) (WALK-TEMPLATE FORM (QUOTE (CALL REPEAT (EVAL))) CONTEXT]) (WALK-TEMPLATE [CL:LAMBDA (FORM TEMPLATE CONTEXT) (* lmm "24-May-86 16:43") (CL:IF (CL:ATOM TEMPLATE) (ECASE TEMPLATE (CALL (if (CONSP FORM) then (WALK-LAMBDA FORM NIL) else FORM)) ((QUOTE CALL NIL PPE) FORM) ((EVAL FUNCTION TEST EFFECT RETURN) (WALK-FORM-INTERNAL FORM (QUOTE EVAL))) (SET (WALK-FORM-INTERNAL FORM (QUOTE SET))) (CL:LAMBDA (WALK-LAMBDA FORM CONTEXT))) (CASE (CAR TEMPLATE) (CL:IF (LET ((*WALK-FORM* FORM)) (WALK-TEMPLATE FORM (COND ((CL:IF (LISTP (SECOND TEMPLATE)) (EVAL (SECOND TEMPLATE)) (FUNCALL (SECOND TEMPLATE) FORM)) (THIRD TEMPLATE)) (T (FOURTH TEMPLATE))) CONTEXT))) (REPEAT (WALK-TEMPLATE-HANDLE-REPEAT FORM (CDR TEMPLATE) (NTHCDR (- (CL:LENGTH FORM) (CL:LENGTH (CDDR TEMPLATE))) FORM) CONTEXT)) (OTHERWISE (COND ((CL:ATOM FORM) FORM) (T (WALK-RECONS FORM (WALK-TEMPLATE (CAR FORM) (CAR TEMPLATE) CONTEXT) (WALK-TEMPLATE (CDR FORM) (CDR TEMPLATE) CONTEXT]) (WALK-TEMPLATE-HANDLE-REPEAT (CL:LAMBDA (FORM TEMPLATE STOP-FORM CONTEXT) (* lmm "11-Apr-86 12:05") (CL:IF (EQ FORM STOP-FORM) (WALK-TEMPLATE FORM (CDR TEMPLATE) CONTEXT) (WALK-TEMPLATE-HANDLE-REPEAT-1 FORM TEMPLATE (CAR TEMPLATE) STOP-FORM CONTEXT)))) (WALK-TEMPLATE-HANDLE-REPEAT-1 [CL:LAMBDA (FORM TEMPLATE REPEAT-TEMPLATE STOP-FORM CONTEXT) (* lmm "24-May-86 16:43") (COND ((NULL FORM) NIL) ((EQ FORM STOP-FORM) (CL:IF (NULL REPEAT-TEMPLATE) (WALK-TEMPLATE STOP-FORM (CDR TEMPLATE) CONTEXT) (CL:ERROR "While handling repeat: ~%%~Ran into stop while still in repeat template."))) ((NULL REPEAT-TEMPLATE) (WALK-TEMPLATE-HANDLE-REPEAT-1 FORM TEMPLATE (CAR TEMPLATE) STOP-FORM CONTEXT)) (T (WALK-RECONS FORM (WALK-TEMPLATE (CAR FORM) (CAR REPEAT-TEMPLATE) CONTEXT) (WALK-TEMPLATE-HANDLE-REPEAT-1 (CDR FORM) TEMPLATE (CDR REPEAT-TEMPLATE) STOP-FORM CONTEXT]) (WALK-LIST [LAMBDA (LIST FN) (* lmm "24-May-86 16:43") (* copy list walking each element) (CL:IF LIST (WALK-RECONS LIST (FUNCALL FN (CAR LIST)) (WALK-LIST (CDR LIST) FN]) (WALK-RECONS (CL:LAMBDA (X CAR CDR) (* lmm "24-May-86 16:43") (CL:IF *WALK-COPY* (CL:IF (OR (NOT (EQ (CAR X) CAR)) (NOT (EQ (CDR X) CDR))) (CONS CAR CDR) X) NIL))) ) (DEFMACRO WALK-RELIST* (X FIRST &REST REST) (CL:IF REST (BQUOTE (WALK-RECONS (\, X) (\, FIRST) (WALK-RELIST* (CDR (\, X)) (\,@ REST)))) FIRST)) (DEFINEQ (WALK-DECLARATIONS [CL:LAMBDA (BODY FN &OPTIONAL DOC-STRING-P DECLARATIONS &AUX (FORM (CAR BODY))) (* lmm "18-Jun-86 14:35") (* skips over declarations) (COND ((AND (STRINGP FORM) (* might be a doc string *) (CDR BODY) (* isn't the returned value *) (NULL DOC-STRING-P) (* no doc string yet *) (NULL DECLARATIONS)) (* no declarations yet *) (WALK-RECONS BODY FORM (WALK-DECLARATIONS (CDR BODY) FN T))) ((AND (LISTP FORM) (EQ (CAR FORM) (QUOTE DECLARE))) (* Got a real declaration. Record it, look for more. *) (DOLIST (DECLARATION (CDR FORM)) (NOTE-DECLARATION DECLARATION) (CL:PUSH DECLARATION DECLARATIONS)) (WALK-RECONS BODY FORM (WALK-DECLARATIONS (CDR BODY) FN DOC-STRING-P DECLARATIONS))) ([AND (CONSP FORM) (NULL (GET-WALKER-TEMPLATE (CAR FORM))) (NOT (EQ FORM (SETQ FORM (MACROEXPAND-1 FORM *ENVIRONMENT*] (* * When we macroexpanded this form we got something else back. Maybe this is a macro which expanded into a declare? Recurse to find out.) (WALK-DECLARATIONS (CONS FORM (CDR BODY)) FN DOC-STRING-P DECLARATIONS)) (T (* Now that we have walked and recorded the declarations, call the function our caller provided to expand the body. We call that function rather than passing the real-body back, because we are RECONSING up the new body.) (FUNCALL FN BODY]) (WALK-ARGLIST [CL:LAMBDA (ARGLIST CONTEXT &OPTIONAL DESTRUCTURINGP &AUX ARG) (* lmm "24-May-86 16:44") (COND ((NULL ARGLIST) NIL) [(SYMBOLP (CL:SETQ ARG (CAR ARGLIST))) (OR (CL:MEMBER ARG LAMBDA-LIST-KEYWORDS :TEST (FUNCTION EQ)) (NOTE-LEXICAL-BINDING ARG)) (WALK-RECONS ARGLIST ARG (WALK-ARGLIST (CDR ARGLIST) CONTEXT (AND DESTRUCTURINGP (NOT (CL:MEMBER ARG LAMBDA-LIST-KEYWORDS :TEST (FUNCTION EQ] [(CONSP ARG) (PROG1 (CL:IF DESTRUCTURINGP (WALK-ARGLIST ARG CONTEXT DESTRUCTURINGP) (WALK-RECONS ARGLIST (WALK-RELIST* ARG (CAR ARG) (WALK-FORM-INTERNAL (CADR ARG) (QUOTE EVAL)) (CDDR ARG)) (WALK-ARGLIST (CDR ARGLIST) CONTEXT NIL))) (CL:IF (SYMBOLP (CAR ARG)) (NOTE-LEXICAL-BINDING (CAR ARG)) (NOTE-LEXICAL-BINDING (CADAR ARG))) (OR (NULL (CDDR ARG)) (NOT (SYMBOLP (CADDR ARG))) (NOTE-LEXICAL-BINDING ARG] (T (CL:ERROR "Can't understand something in the arglist ~S" ARGLIST]) (WALK-LAMBDA [CL:LAMBDA (FORM CONTEXT) (* lmm "24-May-86 16:44") (WITH-NEW-CONTOUR (LET* [(ARGLIST (CADR FORM)) (BODY (CDDR FORM)) (WALKED-ARGLIST NIL) (WALKED-BODY (WALK-DECLARATIONS BODY (FUNCTION (CL:LAMBDA (REAL-BODY) (CL:SETQ WALKED-ARGLIST (WALK-ARGLIST ARGLIST CONTEXT )) (WALK-TEMPLATE REAL-BODY (QUOTE (REPEAT (EVAL))) CONTEXT] (WALK-RELIST* FORM (CAR FORM) WALKED-ARGLIST WALKED-BODY]) ) (PUTPROPS COMPILER-LET WALKER-TEMPLATE WALK-COMPILER-LET) (DEFINEQ (WALK-COMPILER-LET [CL:LAMBDA (FORM CONTEXT) (* lmm "24-May-86 20:57") (* bind the variables, but then return the COMPILER-LET) (LET [(VARS (CL:MAPCAR [FUNCTION (LAMBDA (X) (CL:IF (CONSP X) (CAR X) X] (CADR FORM))) (VALS (CL:MAPCAR (FUNCTION (CL:LAMBDA (X) (CL:IF (CONSP X) (EVAL (CADR X)) NIL))) (CADR FORM] (PROGV (CL:MAPCAR (FUNCTION CAR) (CADR FORM)) (CL:MAPCAR [FUNCTION (CL:LAMBDA (X) (EVAL (CADR X] (CADR FORM)) (WALK-TEMPLATE FORM (QUOTE (NIL NIL REPEAT (EVAL) RETURN)) CONTEXT]) ) (PUTPROPS DECLARE WALKER-TEMPLATE WALK-UNEXPECTED-DECLARE) (DEFINEQ (WALK-UNEXPECTED-DECLARE (CL:LAMBDA (FORM CONTEXT) (* lmm "24-May-86 22:27") (DECLARE (IGNORE CONTEXT)) (WARN "Encountered declare ~S in a place where a declare was not expected." FORM) FORM)) ) (PUTPROPS LET WALKER-TEMPLATE WALK-LET) (PUTPROPS PROG WALKER-TEMPLATE WALK-LET) (PUTPROPS LET* WALKER-TEMPLATE WALK-LET*) (PUTPROPS PROG* WALKER-TEMPLATE WALK-LET*) (DEFINEQ (WALK-LET (CL:LAMBDA (FORM CONTEXT) (WALK-LET/LET* FORM CONTEXT NIL))) (WALK-LET* (CL:LAMBDA (FORM CONTEXT) (WALK-LET/LET* FORM CONTEXT T))) (WALK-LET/LET* [CL:LAMBDA (FORM CONTEXT SEQUENTIALP) (* lmm "24-May-86 16:44") (LET ((OLD-DECLARATIONS *DECLARATIONS*) (OLD-LEXICAL-VARIABLES *LEXICAL-VARIABLES*)) (WITH-NEW-CONTOUR (LET* [(LET/LET* (CAR FORM)) (BINDINGS (CADR FORM)) (BODY (CDDR FORM)) WALKED-BINDINGS (WALKED-BODY (WALK-DECLARATIONS BODY (FUNCTION (CL:LAMBDA (REAL-BODY) [CL:SETQ WALKED-BINDINGS (WALK-LIST BINDINGS (FUNCTION (LAMBDA (BINDING) (CL:IF (SYMBOLP BINDING) (PROG1 BINDING (NOTE-LEXICAL-BINDING BINDING)) (PROG1 (LET ((*DECLARATIONS* OLD-DECLARATIONS) (*LEXICAL-VARIABLES* (CL:IF SEQUENTIALP *LEXICAL-VARIABLES* OLD-LEXICAL-VARIABLES) )) (WALK-RELIST* BINDING (CAR BINDING) (WALK-FORM-INTERNAL (CADR BINDING) CONTEXT) (CDDR BINDING))) (NOTE-LEXICAL-BINDING (CAR BINDING] (WALK-TEMPLATE REAL-BODY (QUOTE (REPEAT (EVAL))) CONTEXT] (WALK-RELIST* FORM LET/LET* WALKED-BINDINGS WALKED-BODY]) ) (PUTPROPS TAGBODY WALKER-TEMPLATE WALK-TAGBODY) (DEFINEQ (WALK-TAGBODY [CL:LAMBDA (FORM CONTEXT) (* lmm "24-May-86 16:44") (WALK-RECONS FORM (CAR FORM) (WALK-LIST (CDR FORM) (FUNCTION (LAMBDA (X) (WALK-FORM-INTERNAL X (CL:IF (SYMBOLP X) (QUOTE QUOTE) CONTEXT]) ) (PUTPROPS FLET WALKER-TEMPLATE WALK-FLET/LABELS) (PUTPROPS LABELS WALKER-TEMPLATE WALK-FLET/LABELS) (DEFINEQ (WALK-FLET/LABELS [CL:LAMBDA (FORM CONTEXT) (* lmm "24-May-86 16:45") (WITH-NEW-CONTOUR (WALK-RELIST* FORM (CAR FORM) [WALK-LIST (CADR FORM) (FUNCTION (LAMBDA (X) (WALK-LAMBDA X CONTEXT] (WALK-DECLARATIONS (CDDR FORM) (FUNCTION (CL:LAMBDA (REAL-BODY) (WALK-TEMPLATE REAL-BODY (QUOTE (REPEAT (EVAL))) CONTEXT]) ) (PUTPROPS FUNCTION WALKER-TEMPLATE (NIL CALL)) (PUTPROPS CL:FUNCTION WALKER-TEMPLATE (NIL CALL)) (PUTPROPS GO WALKER-TEMPLATE (NIL QUOTE)) (PUTPROPS CL:IF WALKER-TEMPLATE (NIL TEST RETURN RETURN)) (PUTPROPS MULTIPLE-VALUE-CALL WALKER-TEMPLATE (NIL EVAL REPEAT (EVAL))) (PUTPROPS MULTIPLE-VALUE-PROG1 WALKER-TEMPLATE (NIL RETURN REPEAT (EVAL))) (PUTPROPS PROGN WALKER-TEMPLATE (NIL REPEAT (EVAL))) (PUTPROPS PROGV WALKER-TEMPLATE (NIL EVAL EVAL REPEAT (EVAL))) (PUTPROPS QUOTE WALKER-TEMPLATE (NIL QUOTE)) (PUTPROPS RETURN-FROM WALKER-TEMPLATE (NIL QUOTE EVAL)) (PUTPROPS RETURN WALKER-TEMPLATE (NIL EVAL)) (PUTPROPS CL:SETQ WALKER-TEMPLATE (NIL REPEAT (SET EVAL))) (PUTPROPS CL:BLOCK WALKER-TEMPLATE (NIL NIL REPEAT (EVAL))) (PUTPROPS CATCH WALKER-TEMPLATE (NIL EVAL REPEAT (EVAL))) (PUTPROPS EVAL-WHEN WALKER-TEMPLATE (NIL QUOTE REPEAT (EVAL))) (PUTPROPS THE WALKER-TEMPLATE (NIL QUOTE EVAL)) (PUTPROPS THROW WALKER-TEMPLATE (NIL EVAL EVAL)) (PUTPROPS UNWIND-PROTECT WALKER-TEMPLATE (NIL EVAL REPEAT (EVAL))) (PUTPROPS LOAD-TIME-EVAL WALKER-TEMPLATE (NIL QUOTE)) (PUTPROPS COND WALKER-TEMPLATE [NIL REPEAT ((REPEAT (EVAL]) (PUTPROPS UNWIND-PROTECT WALKER-TEMPLATE (NIL EVAL REPEAT (EVAL))) (PUTPROPS SETQ WALKER-TEMPLATE (NIL SET EVAL)) (PUTPROPS AND WALKER-TEMPLATE (NIL REPEAT (EVAL))) (PUTPROPS OR WALKER-TEMPLATE (NIL REPEAT (EVAL))) (* for Interlisp) (PUTPROPS RPAQ? WALKER-TEMPLATE (NIL SET EVAL)) (PUTPROPS RPAQ WALKER-TEMPLATE (NIL SET EVAL)) (PUTPROPS XNLSETQ WALKER-TEMPLATE (NIL EVAL)) (PUTPROPS ERSETQ WALKER-TEMPLATE (NIL EVAL)) (PUTPROPS NLSETQ WALKER-TEMPLATE (NIL EVAL)) (PUTPROPS RESETVARS WALKER-TEMPLATE WALK-LET) (PUTPROPS CMLWALK FILETYPE COMPILE-FILE) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA WALK-FLET/LABELS WALK-TAGBODY WALK-LET/LET* WALK-LET* WALK-LET WALK-UNEXPECTED-DECLARE WALK-COMPILER-LET WALK-LAMBDA WALK-ARGLIST WALK-DECLARATIONS WALK-RECONS WALK-TEMPLATE-HANDLE-REPEAT-1 WALK-TEMPLATE-HANDLE-REPEAT WALK-TEMPLATE WALK-FORM-INTERNAL) ) (PUTPROPS CMLWALK COPYRIGHT ("Xerox Corporation" 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (5676 11511 (WALK-FORM-INTERNAL 5686 . 7217) (WALK-TEMPLATE 7219 . 9379) ( WALK-TEMPLATE-HANDLE-REPEAT 9381 . 9731) (WALK-TEMPLATE-HANDLE-REPEAT-1 9733 . 10742) (WALK-LIST 10744 . 11099) (WALK-RECONS 11101 . 11509)) (11979 16879 (WALK-DECLARATIONS 11989 . 14191) (WALK-ARGLIST 14193 . 15780) (WALK-LAMBDA 15782 . 16877)) (16943 18143 (WALK-COMPILER-LET 16953 . 18141)) (18208 18471 (WALK-UNEXPECTED-DECLARE 18218 . 18469)) (18658 21462 (WALK-LET 18668 . 18752) (WALK-LET* 18754 . 18837) (WALK-LET/LET* 18839 . 21460)) (21516 21971 (WALK-TAGBODY 21526 . 21969)) (22082 22759 ( WALK-FLET/LABELS 22092 . 22757))))) STOP