From 496fa408c219f1b0e32569a93815c19a01aac1b5 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Tue, 20 Feb 2024 15:16:55 -0800 Subject: [PATCH] Make macros that expand to fetch or replace note the record fields used. (#1548) --- library/MSANALYZE | 690 ++++++++++++++++++++-------------------- library/MSANALYZE.DFASL | Bin 23265 -> 23153 bytes 2 files changed, 337 insertions(+), 353 deletions(-) diff --git a/library/MSANALYZE b/library/MSANALYZE index a2e61491..bb3d2a74 100644 --- a/library/MSANALYZE +++ b/library/MSANALYZE @@ -1,20 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "26-Dec-2021 10:10:02" {DSK}larry>medley>library>MSANALYZE.;6 62468 +(FILECREATED "20-Feb-2024 09:28:38" {DSK}larry>il>medley>library>MSANALYZE.;2 61022 - :CHANGES-TO (FNS MSPRGTEMPLATE) + :EDIT-BY "lmm" - :PREVIOUS-DATE "18-Aug-2021 12:13:11" {DSK}larry>medley>library>MSANALYZE.;5) + :PREVIOUS-DATE "17-Feb-2024 22:10:56" {DSK}larry>il>medley>library>MSANALYZE.;3) -(* ; " -Copyright (c) 1982-1986, 1988, 1990, 2021 by Venue & Xerox Corporation. -The following program was created in 1982 but has not been published -within the meaning of the copyright law, is furnished under license, -and may not be used, copied and/or disclosed except in accordance -with the terms of said license. -") - (PRETTYCOMPRINT MSANALYZECOMS) (RPAQQ MSANALYZECOMS @@ -33,7 +25,7 @@ with the terms of said license. MSPRGTEMPLATE1 MSPRGTEMPLATE MSPRGLAMBDA MSPRGLST ADDTO NLAMBDAFNP MSPRGDWIM MSDWIMTRAN) (E (MAPC MSFNDATA (FUNCTION RPLACD))) - (VARS MSFNDATA MSERRORFN (MSRECORDTRANFLG)) + (VARS MSFNDATA MSERRORFN (MSRECORDTRANFLG T)) (ADDVARS (INVISIBLEVARS $$1 $$2 $$3 $$4 $$5 $$6 $$7 $$8 $$9 $$10 $$11 $$12 $$13 $$14 $$15 $$16 $$17)) (DECLARE%: DONTCOPY (MACROS INCLISP LTEMPLATE)) @@ -53,6 +45,7 @@ with the terms of said license. (COMS (VARS (MSTEMPLATES (HASHARRAY 160)) (USERTEMPLATES (HASHARRAY 10))) (FILEVARS INITIALTEMPLATES) + (GLOBALVARS MSTEMPLATES INITIALTEMPLATES) (* ;;; "INITIALTEMPLATES is not needed after loading up") @@ -71,19 +64,19 @@ with the terms of said license. (DEFINEQ (VARS - (LAMBDA (FN USEDATABASE) (* lmm%: 29-DEC-75 23 22) - (CDR (CALLS FN USEDATABASE T)))) + [LAMBDA (FN USEDATABASE) (* lmm%: 29-DEC-75 23 22) + (CDR (CALLS FN USEDATABASE T]) (FREEVARS - (LAMBDA (FN USEDATABASE) (* lmm%: 5-DEC-75 11 8) - (CADDR (CALLS FN USEDATABASE 'FREEVARS)))) + [LAMBDA (FN USEDATABASE) (* lmm%: 5-DEC-75 11 8) + (CADDR (CALLS FN USEDATABASE 'FREEVARS]) (CALLS - [LAMBDA (EXPR USEDATABASE VARSFLG) (* ; "Edited 12-Jun-90 17:25 by teruuchi") + [LAMBDA (EXPR USEDATABASE VARSFLG) (* ; "Edited 12-Jun-90 17:25 by teruuchi") (* ; - "This FNS is for the User Interface Function in MSANALYZE(MasterScope)") + "This FNS is for the User Interface Function in MSANALYZE(MasterScope)") (* ; - "Edited by Tomoru Teruuchi(12-June-90 : for AR#10020)") + "Edited by Tomoru Teruuchi(12-June-90 : for AR#10020)") (PROG (FREES (GLOBALS NIL) FNDEF FLG) [COND @@ -93,15 +86,13 @@ with the terms of said license. [SETQ FREES (GETRELATION EXPR '(USE FREELY] [SETQ FREES (SUBSET FREES (FUNCTION (LAMBDA (VAR) (* ; - "This Function is The Predicate whether the variable is global or not.") + "This Function is The Predicate whether the variable is global or not.") (if (OR (FMEMB VAR GLOBALVARS) - (EQ (GETPROP VAR 'GLOBALVAR) - T)) + (EQ (GETPROP VAR 'GLOBALVAR) + T)) then (pushnew GLOBALS VAR) - NIL - else T] - (* ; - "Edited by TT (Date : 8-May-1990)") + NIL + else T](* ; "Edited by TT (Date : 8-May-1990)") (RETURN (LIST [AND (NOT VARSFLG) (GETRELATION EXPR '(CALL NOTERROR] (AND (NEQ VARSFLG 'FREEVARS) @@ -124,9 +115,8 @@ with the terms of said license. NIL) ((CCODEP FNDEF) (SETQ FNDEF (CALLSCCODE FNDEF)) - [OR NOPACKCALLSFLG (for X on (CAR FNDEF) - do (FRPLACA X (PACK* '; (CAR X) - ';] + [OR NOPACKCALLSFLG (for X on (CAR FNDEF) do (FRPLACA X (PACK* '; (CAR X) + ';] (FRPLACA (CDR FNDEF) (NCONC (CADR FNDEF) (CAR FNDEF))) @@ -137,7 +127,7 @@ with the terms of said license. [(EXPRP FNDEF) (* Note that EXPR can be a piece of a function definition, and calls will still - work.) + work.) (RESETVARS ((MSRECORDTRANFLG T)) (RETURN @@ -161,51 +151,51 @@ with the terms of said license. FNDEF)) FNDEF] (SETQ CALLSDATA - (ALLCALLS - FNDEF LAMFLG - [UNION (CONSTANT (MSVBNOTICED 'USE 'FREELY)) - (AND (NEQ VARSFLG 'FREEVARS) - (UNION (CONSTANT (MSVBNOTICED 'BIND)) - (AND (NULL VARSFLG) - (CONSTANT (MSVBNOTICED 'CALL 'NOTERROR] - EXPR T)) - [SETQ FREES (NCONC FREES (COLLECTFNDATA - (CONSTANT (MSVBNOTICED 'USE 'FREELY] + (ALLCALLS FNDEF LAMFLG + [UNION (CONSTANT (MSVBNOTICED 'USE 'FREELY)) + (AND (NEQ VARSFLG 'FREEVARS) + (UNION (CONSTANT (MSVBNOTICED 'BIND)) + (AND (NULL VARSFLG) + (CONSTANT (MSVBNOTICED 'CALL + 'NOTERROR] + EXPR T)) + [SETQ FREES (NCONC FREES (COLLECTFNDATA (CONSTANT + (MSVBNOTICED 'USE + 'FREELY] [SETQ FREES (SUBSET FREES (FUNCTION (LAMBDA (VAR) (if (OR (FMEMB VAR GLOBALVARS) - (EQ (GETPROP VAR 'GLOBALVAR) - T)) + (EQ (GETPROP VAR 'GLOBALVAR) + T)) then (pushnew GLOBALS VAR) - NIL + NIL else T] - (* ; - "Edited by TT (Date : 8-May-1990)") + (* ; "Edited by TT (Date : 8-May-1990)") (RETURN (LIST [COLLECTFNDATA (CONSTANT (MSVBNOTICED 'CALL - 'NOTERROR] + 'NOTERROR] [COLLECTFNDATA (CONSTANT (MSVBNOTICED 'BIND] FREES GLOBALS] (T '?]) (COLLECTFNDATA - (LAMBDA (LST) (* lmm "21-DEC-78 22:56") + [LAMBDA (LST) (* lmm "21-DEC-78 22:56") (COND ((NLISTP LST) (CDR (FASSOC LST CALLSDATA))) (T (PROG (VAL) (for X in LST do (SETQ VAL (UNION (COLLECTFNDATA X) VAL))) - (RETURN VAL)))))) + (RETURN VAL]) (CALLS3 - (LAMBDA (LST) (* lmm " 6-JUL-78 00:23") + [LAMBDA (LST) (* lmm " 6-JUL-78 00:23") (* lmm%: 13-DEC-75 4 51) (PROG (FLG) - (for X on (CAR LST) do (OR (NOT (FMEMB (CAR X) + [for X on (CAR LST) do (OR (NOT (FMEMB (CAR X) INVISIBLEVARS)) - (SETQ FLG (FRPLACA X)))) + (SETQ FLG (FRPLACA X] (COND - (FLG (FRPLACA LST (DREMOVE NIL (CAR LST)))))))) + (FLG (FRPLACA LST (DREMOVE NIL (CAR LST]) ) (RPAQQ MSMACROPROPS (ALTOMACRO DMACRO BYTEMACRO MACRO MACRO-FN)) @@ -275,10 +265,9 @@ DONTCOPY (DEFINEQ (ALLCALLS - [LAMBDA (FNDEF LAMFLG ONLYRELS FNNAME INTERNALFLG EACHTIME) - (* ; "Edited 21-Apr-88 16:31 by jrb:") + [LAMBDA (FNDEF LAMFLG ONLYRELS FNNAME INTERNALFLG EACHTIME)(* ; "Edited 21-Apr-88 16:31 by jrb:") (LET (VARS TOPVARS INCLISP ERRORS (PARENT FNDEF) - (NOSPELLFLG T)) + (NOSPELLFLG T)) (DECLARE (CL:SPECIAL NOSPELLFLG)) (MSINITFNDATA) [COND @@ -287,38 +276,41 @@ DONTCOPY (COND (INTERNALFLG MSFNDATA) (T (for X in MSFNDATA when (CDR X) collect (CONS (CAR X) - (CDR X]) + (CDR X]) (MSINITFNDATA - (LAMBDA NIL - - (* MSFNDATA is an association list of the "noticed" types, e.g. - CALL, BIND, etc. -- the FRPLACD resets the pointer) + [LAMBDA NIL - (for Y in MSFNDATA do (FRPLACD Y NIL)))) + (* MSFNDATA is an association list of the "noticed" types, e.g. + CALL, BIND, etc. -- the FRPLACD resets the pointer) + + (for Y in MSFNDATA do (FRPLACD Y NIL]) (MSPRGE - (LAMBDA (EXPR SUPEXPR EVALCONTEXT) (* lmm "27-May-86 04:44") - (* ;; "analyzes EXPR; SUPEXPR is the parent expression and is used in the SHOWUSE case where we are printing occurrances of various things rather than updating data base; EVALCONTEXT is a type of reference for this expression from the template: SMASH etc") + [LAMBDA (EXPR SUPEXPR EVALCONTEXT) (* ; "Edited 17-Feb-2024 21:52 by lmm") + (* lmm "27-May-86 04:44") + + (* ;; "analyzes EXPR; SUPEXPR is the parent expression and is used in the SHOWUSE case where we are printing occurrances of various things rather than updating data base; EVALCONTEXT is a type of reference for this expression from the template: SMASH etc") + (PROG (TEM CALLED CLISP) - (COND + [COND ((NLISTP EXPR) (RETURN (COND ((AND (LITATOM EXPR) EXPR (NEQ EXPR T) - (NOT (FMEMB EXPR INVISIBLEVARS))) + (NOT (FMEMB EXPR INVISIBLEVARS))) (* ; "A variable reference") (COND - ((OR (FMEMB EXPR VARS) - (SOME TOPVARS (FUNCTION (LAMBDA (Z) - (* ; + ([OR (FMEMB EXPR VARS) + (SOME TOPVARS (FUNCTION (LAMBDA (Z) + (* ;  "bound higher up in the function but but used in a functional argument") (COND ((FMEMB EXPR Z) (ADDTO 'LOCALFREEVARS EXPR SUPEXPR) - T)))))) - (* ; + T] + (* ;  "Things were added to VARS only if they were 'noticeable'") (SELECTQ EVALCONTEXT ((SMASH TEST SET) @@ -330,9 +322,10 @@ DONTCOPY (TEST (ADDTO 'TESTFREE EXPR SUPEXPR)) ((SET CHANGE) (ADDTO 'SETFREE EXPR SUPEXPR)) - (ADDTO 'REFFREE EXPR SUPEXPR))))))))) + (ADDTO 'REFFREE EXPR SUPEXPR] (COND - ((EQ EVALCONTEXT 'SET) (* ; "in a 'SET' context, but not a variable") + ((EQ EVALCONTEXT 'SET) (* ; + "in a 'SET' context, but not a variable") (MSPRGERR PARENT))) (COND ((LISTP (SETQ CALLED (CAR EXPR))) @@ -345,35 +338,36 @@ DONTCOPY EXPR)) NIL) (RETURN))) - (COND + [COND ((SETQ TEM (LTEMPLATE CALLED)) - (RETURN (MSPRGTEMPLATE EXPR TEM EVALCONTEXT)))) - (COND + (RETURN (MSPRGTEMPLATE EXPR TEM EVALCONTEXT] + [COND ((NOT (FGETD (OR (GETP CALLED 'BROKEN) CALLED))) (COND - ((AND DWIMFLG (SETQ TEM (GETPROP CALLED 'CLISPWORD))) - (* E.G. IF, FOR, etc.) + [[AND DWIMFLG (SETQ TEM (GETPROP CALLED 'CLISPWORD] + (* ; "E.G. IF, FOR, etc.") (SETQ CLISP (MSDWIMTRAN EXPR)) (RETURN (COND - (CLISP (COND + (CLISP [COND (TEM (SELECTQ (CAR TEM) (RECORDTRAN (OR (MSPRGRECORD EXPR EVALCONTEXT) MSRECORDTRANFLG (RETURN)) - (* optionally also look at translation) + (* ; + "optionally also look at translation") ) (IFWORD) (CHANGETRAN (MSPRGE (CADR EXPR) EXPR 'CHANGE)) (for X in EXPR - when (AND (LITATOM X) + when [AND (LITATOM X) (EQ (CAR TEM) - (CAR (GETPROP X 'CLISPWORD)))) - do (ADDTO 'CLISP X EXPR))))) - (* Analyze the CLISP translation) + (CAR (GETPROP X 'CLISPWORD] + do (ADDTO 'CLISP X EXPR] + (* ; "Analyze the CLISP translation") (PROG ((INCLISP (INCLISP EXPR))) (MSPRGE CLISP EXPR EVALCONTEXT))) ((OR (NULL (GETPROP (CAR EXPR) @@ -388,13 +382,13 @@ DONTCOPY 'CHANGE) (MSPRGLST (CDDR EXPR) EXPR)) - (PROGN (* CLISP word wouldn't DWIMIFY) + (PROGN (* ; "CLISP word wouldn't DWIMIFY") (MSPRGCALL CALLED EXPR EVALCONTEXT) (MSPRGERR EXPR) (MSPRGLST (CDR EXPR) - EXPR))))))) + EXPR] ((SETQ TEM (CL:MACRO-FUNCTION CALLED)) - (LET ((ME (CL:MACROEXPAND EXPR))) + (LET ((ME (CL:MACROEXPAND-1 EXPR))) (COND ((AND (NOT (EQUAL ME EXPR)) (NOT (EQUAL ME INCLISP))) @@ -403,7 +397,7 @@ DONTCOPY (PROG ((INCLISP (INCLISP EXPR)) (EXPR EXPR)) (MSPRGE ME EXPR 'EVAL)) - (RETURN T)))))))) + (RETURN T] (COND ((NLAMBDAFNP CALLED) (ADDTO 'NLAMBDA CALLED EXPR) @@ -416,12 +410,13 @@ DONTCOPY (MSPRGCALL CALLED EXPR EVALCONTEXT) (MSPRGLST (CDR EXPR) EXPR - 'EVAL)))))) + 'EVAL]) (MSPRGMACRO - [LAMBDA (FORM MACDEF CONTEXT) (* ; "Edited 18-Aug-2021 11:23 by larry") + [LAMBDA (FORM MACDEF CONTEXT) (* ; "Edited 17-Feb-2024 21:43 by lmm") + (* ; "Edited 18-Aug-2021 11:23 by larry") (PROG [(ME (if (LITATOM MACDEF) - then (CL:MACROEXPAND FORM) + then (CL:MACROEXPAND-1 FORM) else (MACROEXPANSION FORM MACDEF] (COND ((AND (NOT (EQUAL ME FORM)) @@ -434,35 +429,35 @@ DONTCOPY (RETURN T]) (MSPRGCALL - (LAMBDA (FN PRNT CONTEXT) (* lmm "22-DEC-78 12:57") - (ADDTO (COND + [LAMBDA (FN PRNT CONTEXT) (* lmm "22-DEC-78 12:57") + (ADDTO [COND (TOPVARS 'APPLY) (T (SELECTQ CONTEXT (TEST 'PREDICATE) (EFFECT 'EFFECT) - 'CALL))) - FN PRNT))) + 'CALL] + FN PRNT]) (MSBINDVAR - (LAMBDA (VAR TYPE EXPR) (* lmm " 6-JUL-78 00:23") + [LAMBDA (VAR TYPE EXPR) (* lmm " 6-JUL-78 00:23") (COND ((AND VAR (LITATOM VAR) (NEQ VAR T)) - (COND + [COND ((NOT (FMEMB VAR INVISIBLEVARS)) (ADDTO (OR TYPE 'BIND) VAR - (OR EXPR PARENT)))) + (OR EXPR PARENT] (SETQ VARS (CONS VAR VARS))) (T (MSPRGERR (COND ((LITATOM VAR) (OR EXPR PARENT)) - (T VAR))))))) + (T VAR]) (MSPRGRECORD - [LAMBDA (PRNT CNTXT) (* ; "Edited 8-Apr-88 14:49 by jrb:") - (* ANALYZE RECORD EXPRESSION PRNT - - RETURN NIL IF ANALYZED SUCCESSFULLY) + [LAMBDA (PRNT CNTXT) (* ; "Edited 8-Apr-88 14:49 by jrb:") + (* ANALYZE RECORD EXPRESSION PRNT - + RETURN NIL IF ANALYZED SUCCESSFULLY) (PROG (Z) (MSPRGTEMPLATE PRNT @@ -472,35 +467,35 @@ DONTCOPY PRNT) (SETQ Z (CDDR PRNT)) [while Z do (COND - ([EQ 'RECORDTRAN (CAR (GETPROP (CAR Z) - 'CLISPWORD] + ([EQ 'RECORDTRAN (CAR (GETPROP (CAR Z) + 'CLISPWORD] (* e.g. USING or COPYING) - (MSPRGE (CADR Z) - PRNT - (SELECTQ (CAR Z) - ((smashing SMASHING) - 'SMASH) - NIL)) - (SETQ Z (CDDR Z))) - ((EQ (CADR Z) - '_) - (* If dwimified correctly, the fields should be separated by _'s) - (ADDTO 'REPLACE (CAR Z) - PRNT) - (MSPRGE (CADDR Z) - PRNT) - (SETQ Z (CDDDR Z))) - ((EQ (CAAR Z) - 'SETQ) (* partially dwimified) - (ADDTO 'REPLACE (CADAR Z) - PRNT) - (MSPRGE (CADDAR Z) - PRNT) - (SETQ Z (CDR Z))) - (T (* shouldn't happen, but) - (MSPRGE (CAR Z) - PRNT) - (SETQ Z (CDR Z] + (MSPRGE (CADR Z) + PRNT + (SELECTQ (CAR Z) + ((smashing SMASHING) + 'SMASH) + NIL)) + (SETQ Z (CDDR Z))) + ((EQ (CADR Z) + '_) (* If dwimified correctly, the fields + should be separated by _'s) + (ADDTO 'REPLACE (CAR Z) + PRNT) + (MSPRGE (CADDR Z) + PRNT) + (SETQ Z (CDDDR Z))) + ((EQ (CAAR Z) + 'SETQ) (* partially dwimified) + (ADDTO 'REPLACE (CADAR Z) + PRNT) + (MSPRGE (CADDAR Z) + PRNT) + (SETQ Z (CDR Z))) + (T (* shouldn't happen, but) + (MSPRGE (CAR Z) + PRNT) + (SETQ Z (CDR Z] (RETURN)) ((fetch FETCH ffetch FFETCH) [LET [(OF? (OR (EQ (CL:THIRD PRNT) @@ -510,13 +505,13 @@ DONTCOPY (COND [(EQ CNTXT 'CHANGE) `(NIL (IF LISTP (BOTH (NIL |..| FETCH (BOTH FETCH REPLACE)) - (|..| RECORD NIL)) - (BOTH FETCH REPLACE)) + (|..| RECORD NIL)) + (BOTH FETCH REPLACE)) ,@(if OF? then '(NIL EVAL |..| PPE) else '(EVAL |..| PPE] (T `(NIL (IF LISTP (BOTH (NIL |..| FETCH) - (|..| RECORD NIL)) FETCH) + (|..| RECORD NIL)) FETCH) ,@(if OF? then '(NIL EVAL |..| PPE) else '(EVAL |..| PPE]) @@ -531,12 +526,15 @@ DONTCOPY (WITH? (OR (EQ WITHSLOT 'WITH) (EQ WITHSLOT 'with] `(NIL (IF LISTP (BOTH (NIL |..| FETCH REPLACE) - (|..| RECORD NIL)) REPLACE) + (|..| RECORD NIL)) REPLACE) ,@(if OF? then '(NIL) - else NIL) SMASH ,@(if WITH? - then '(NIL) - else NIL) EVAL))) + else NIL) + SMASH + ,@(if WITH? + then '(NIL) + else NIL) + EVAL))) ((type? TYPE?) '(CLISP RECORD EVAL . PPE)) ((initrecord INITRECORD) @@ -550,53 +548,50 @@ DONTCOPY PRNT) (for X in - (PROG1 - [for X on MSFNDATA when (FMEMB (CAAR X) - '(SETFREE TESTFREE REFFREE)) - collect (LIST (CAR X) - (RPLACA X (LIST (CAAR X] - (PROG [ONLYRELS - (EACHTIME - (AND EACHTIME (for X inside (PROGN EACHTIME) - when [NOT (FMEMB X '(SETFREE TESTFREE - REFFREE] - collect X] - (MSPRGLST (CDDDR PRNT) - PRNT))) + (PROG1 [for X on MSFNDATA when (FMEMB (CAAR X) + '(SETFREE TESTFREE REFFREE)) + collect (LIST (CAR X) + (RPLACA X (LIST (CAAR X] + (PROG [ONLYRELS + (EACHTIME (AND EACHTIME + (for X inside (PROGN EACHTIME) + when [NOT (FMEMB X '(SETFREE TESTFREE REFFREE + ] collect X] + (MSPRGLST (CDDDR PRNT) + PRNT))) do (for Y in (PROG1 (CDR (CAADR X)) - (RPLACA (CADR X) - (CAR X))) - do (ADDTO (COND - ((FMEMB Y Z) - (SELECTQ (CAAR X) - (SETFREE 'REPLACE) - 'FETCH)) - (T (CAAR X))) - Y PRNT))) + (RPLACA (CADR X) + (CAR X))) + do (ADDTO (COND + ((FMEMB Y Z) + (SELECTQ (CAAR X) + (SETFREE 'REPLACE) + 'FETCH)) + (T (CAAR X))) + Y PRNT))) (RETURN)) (T '(RECORD |..| EVAL]) (RETURN T]) (MSPRGERR - (LAMBDA (EXPR) (* lmm "21-DEC-78 22:44") + [LAMBDA (EXPR) (* lmm "21-DEC-78 22:44") (SETQ ERRORS T) - (ADDTO 'ERROR MSERRORFN EXPR))) + (ADDTO 'ERROR MSERRORFN EXPR]) (MSPRGTEMPLATE1 - [LAMBDA (X TEMPLATE) (* ; "Edited 19-Feb-88 16:56 by jrb:") - + [LAMBDA (X TEMPLATE) (* ; "Edited 19-Feb-88 16:56 by jrb:") (COND ((NLISTP TEMPLATE) (SELECTQ TEMPLATE ((EVAL SMASH TEST EFFECT SET) (MSPRGE X PARENT TEMPLATE)) ((FUNCTION FUNCTIONAL) - - (* This is a functional arg to something - - the marker FUNCTIONAL means that it will be a separate function while - FUNCTION is reserved for those things which compile open - - e.g. MAPC is marked (EVAL FUNCTION FUNCTION . PPE) while SORT is marked - (EVAL FUNCTIONAL . PPE)) + + (* This is a functional arg to something - + the marker FUNCTIONAL means that it will be a separate function while FUNCTION is + reserved for those things which compile open - + e.g. MAPC is marked (EVAL FUNCTION FUNCTION . PPE) while SORT is marked + (EVAL FUNCTIONAL . PPE)) [OR (COND ((AND (LISTP X) @@ -623,12 +618,12 @@ DONTCOPY NIL))) (EQ X T) (NULL X) - (PROGN (* arbitrary expression as - functional argument) + (PROGN (* arbitrary expression as functional + argument) (ADDTO 'ERROR 'apply PARENT) (MSPRGE X PARENT 'FUNCTIONAL]) (STACK (* arg to stack fn, e.g. - RETFROM) + RETFROM) [OR (AND (LISTP X) (SELECTQ (CAR X) ((FUNCTION QUOTE) @@ -647,16 +642,16 @@ DONTCOPY (NIL (* not used) NIL) (RETURN (* this is sometimes the value of - PARENT expression) + PARENT expression) (MSPRGTEMPLATE1 X (SELECTQ PARENTCONTEXT - ((TEST EFFECT) - PARENTCONTEXT) - 'EVAL))) + ((TEST EFFECT) + PARENTCONTEXT) + 'EVAL))) (TESTRETURN (* if PARENT is tested, then so is - this) + this) (MSPRGTEMPLATE1 X (SELECTQ PARENTCONTEXT - (TEST PARENTCONTEXT) - 'EVAL))) + (TEST PARENTCONTEXT) + 'EVAL))) (BIND (MSBINDVAR X)) (LAMBDA (MSPRGLAMBDA X)) (PPE (* paren error if not NIL) @@ -668,25 +663,26 @@ DONTCOPY ((EQ (CAR X) 'QUOTE) (MSPRGTEMPLATE (CADR X) - '(REMOTE EVAL) PARENT)) + '(REMOTE EVAL) + PARENT)) (T (MSPRGE X PARENT 'EVAL]) (ADDTO TEMPLATE X PARENT T))) (T (SELECTQ (CAR TEMPLATE) (IF [PROG ((EXPR X)) (DECLARE (SPECVARS EXPR)) (MSPRGTEMPLATE1 X (COND - ((COND - ((LISTP (CADR TEMPLATE)) + ((COND + ((LISTP (CADR TEMPLATE)) (* ASSERT%: ((REMOTE EVAL) EXPR)) - (EVAL (CADR TEMPLATE))) - (T (APPLY* (CADR TEMPLATE) - X))) - (CADDR TEMPLATE)) - (T (CADDDR TEMPLATE]) + (EVAL (CADR TEMPLATE))) + (T (APPLY* (CADR TEMPLATE) + X))) + (CADDR TEMPLATE)) + (T (CADDDR TEMPLATE]) (|..| [COND [(AND (CADR TEMPLATE) - (NULL (CDDR TEMPLATE))) (* Special case to handle most - common cases) + (NULL (CDDR TEMPLATE))) (* Special case to handle most common + cases) (MAPC X (FUNCTION (LAMBDA (X) (MSPRGTEMPLATE1 X (CADR TEMPLATE] (T (FRPTQ (IDIFFERENCE (LENGTH X) @@ -707,43 +703,39 @@ DONTCOPY (REMOTE (PROG (VARS (TOPVARS (CONS VARS TOPVARS))) (MSPRGTEMPLATE1 X (CADR TEMPLATE)))) (KEYWORDS - - (* ;; "KEYWORDS list of keys...") - - (* ;; "Specifies list of legal keywords") - - (* ;; "(FOO (LAMBDA... (BAR :BAZ DREK))) is recorded in the database as") - - (* ;; "(ADDTO 'KEYCALLS '(BAR . :BAZ) '(BAR :BAZ DREK))") - - (* ;; - "i.e. there is a table for each keyword relating functions that call functions specifying them.") + (* ;; "KEYWORDS list of keys...") + + (* ;; "Specifies list of legal keywords") + + (* ;; "(FOO (LAMBDA... (BAR :BAZ DREK))) is recorded in the database as") + + (* ;; "(ADDTO 'KEYCALLS '(BAR . :BAZ) '(BAR :BAZ DREK))") + + (* ;; + "i.e. there is a table for each keyword relating functions that call functions specifying them.") [LET [(LEGAL-KEYS (OR (CDR TEMPLATE) (GETRELATION (CAR PARENT) 'KEYACCEPT] - (while X bind (ALLOW-OTHER-KEYS _ (MEMQ '&ALLOW-OTHER-KEYS - LEGAL-KEYS)) - KEYSUSED? + (while X bind (ALLOW-OTHER-KEYS _ (MEMQ '&ALLOW-OTHER-KEYS LEGAL-KEYS)) + KEYSUSED? do (if (AND (CL:KEYWORDP (CAR X)) - (OR ALLOW-OTHER-KEYS (MEMQ (CAR X) - LEGAL-KEYS))) - then (ADDTO 'KEYSPECIFY (CAR X) - PARENT) - (SETQ KEYSUSED? T) - else (* ; "log bogus keyword as ppe") - - (MSPRGERR PARENT)) - (pop X) - (if X - then (MSPRGTEMPLATE1 (CAR X) - 'EVAL) - (pop X) - else (MSPRGERR PARENT) - (* ; "log no value for keyword as ppe") -) finally (if KEYSUSED? - then (ADDTO 'KEYCALL (CAR PARENT) - PARENT]) + (OR ALLOW-OTHER-KEYS (MEMQ (CAR X) + LEGAL-KEYS))) + then (ADDTO 'KEYSPECIFY (CAR X) + PARENT) + (SETQ KEYSUSED? T) + else (* ; "log bogus keyword as ppe") + (MSPRGERR PARENT)) + (pop X) + (if X + then (MSPRGTEMPLATE1 (CAR X) + 'EVAL) + (pop X) + else (MSPRGERR PARENT) (* ; "log no value for keyword as ppe")) + finally (if KEYSUSED? + then (ADDTO 'KEYCALL (CAR PARENT) + PARENT]) (COND ((LISTP X) (MSPRGTEMPLATE1 (CAR X) @@ -752,7 +744,7 @@ DONTCOPY (CDR TEMPLATE]) (MSPRGTEMPLATE - [LAMBDA (PARENT TEMPLATE PARENTCONTEXT) (* ; "Edited 26-Dec-2021 10:09 by larry") + [LAMBDA (PARENT TEMPLATE PARENTCONTEXT) (* ; "Edited 26-Dec-2021 10:09 by larry") (* lmm "23-Jul-86 00:15") (PROG ((VARS VARS) TEM) @@ -766,142 +758,130 @@ DONTCOPY (T (MSPRGTEMPLATE1 PARENT TEMPLATE]) (MSPRGLAMBDA - [LAMBDA (EXPR FLG TYPE) (* ; "Edited 3-Jun-88 10:23 by jrb:") + [LAMBDA (EXPR FLG TYPE) (* ; "Edited 3-Jun-88 10:23 by jrb:") (SELECTQ (CAR (LISTP EXPR)) (CL:LAMBDA [LET ((PARENT EXPR) (PARENTCONTEXT TYPE) (VARS VARS)) [bind (ARGS _ (CADR EXPR)) - ARG - (EVALCOUNT _ 0) - KEYS? KEYLIST while ARGS + ARG + (EVALCOUNT _ 0) + KEYS? KEYLIST while ARGS do (SETQ ARG (pop ARGS)) - (* ;; "We can be in one of two states - keyword scanning or not") + (* ;; "We can be in one of two states - keyword scanning or not") - [COND - [(CL:SYMBOLP ARG) + [COND + [(CL:SYMBOLP ARG) - (* ;; "Check and see if it's a keyword thingy") + (* ;; "Check and see if it's a keyword thingy") - (COND - ((EQ ARG '&KEY) - (SETQ KEYS? T)) - [(FMEMB ARG CL:LAMBDA-LIST-KEYWORDS) - (SETQ KEYS? NIL) - (if (EQ ARG '&ALLOW-OTHER-KEYS) - then (ADDTO 'KEYACCEPT (CAR (push KEYLIST - - ' - &ALLOW-OTHER-KEYS - )) - (CADR EXPR] - (T (if KEYS? - then (ADDTO 'KEYACCEPT (CAR (push KEYLIST - (MAKE-KEYWORD - ARG))) - (CADR EXPR)) - else (CL:INCF EVALCOUNT)) - (MSBINDVAR ARG] - [(CL:CONSP ARG) (* ; - "Strangely enough they all EVAL their CADRs.") - (MSPRGTEMPLATE1 (CADR ARG) - 'EVAL) - (if KEYS? - then (if (CL:SYMBOLP (CAR ARG)) - then (MSBINDVAR (CAR ARG)) - (ADDTO 'KEYACCEPT - [CAR (push KEYLIST - (MAKE-KEYWORD (CAR ARG] - (CADR EXPR)) - else (ADDTO 'KEYACCEPT - [CAR (push KEYLIST - (MAKE-KEYWORD - (CAAR ARG] - (CADR EXPR)) - (MSBINDVAR (CADAR ARG))) - else (CL:IF (CL:SYMBOLP (CAR ARG)) - (MSBINDVAR (CAR ARG)) - (MSBINDVAR (CADAR ARG))) - (OR (NULL (CDDR ARG)) - (NOT (CL:SYMBOLP (CADDR ARG))) - (MSBINDVAR ARG] - (T (MSPRGTEMPLATE1 ARG 'PPE] + (COND + ((EQ ARG '&KEY) + (SETQ KEYS? T)) + [(FMEMB ARG CL:LAMBDA-LIST-KEYWORDS) + (SETQ KEYS? NIL) + (if (EQ ARG '&ALLOW-OTHER-KEYS) + then (ADDTO 'KEYACCEPT (CAR (push KEYLIST '&ALLOW-OTHER-KEYS)) + (CADR EXPR] + (T (if KEYS? + then (ADDTO 'KEYACCEPT (CAR (push KEYLIST (MAKE-KEYWORD + ARG))) + (CADR EXPR)) + else (CL:INCF EVALCOUNT)) + (MSBINDVAR ARG] + [(CL:CONSP ARG) (* ; + "Strangely enough they all EVAL their CADRs.") + (MSPRGTEMPLATE1 (CADR ARG) + 'EVAL) + (if KEYS? + then (if (CL:SYMBOLP (CAR ARG)) + then (MSBINDVAR (CAR ARG)) + (ADDTO 'KEYACCEPT [CAR (push KEYLIST + (MAKE-KEYWORD + (CAR ARG] + (CADR EXPR)) + else (ADDTO 'KEYACCEPT [CAR (push KEYLIST + (MAKE-KEYWORD (CAAR ARG] + (CADR EXPR)) + (MSBINDVAR (CADAR ARG))) + else (CL:IF (CL:SYMBOLP (CAR ARG)) + (MSBINDVAR (CAR ARG)) + (MSBINDVAR (CADAR ARG))) + (OR (NULL (CDDR ARG)) + (NOT (CL:SYMBOLP (CADDR ARG))) + (MSBINDVAR ARG] + (T (MSPRGTEMPLATE1 ARG 'PPE] finally (if KEYLIST then + (* ;; + "Look at old template; if there isn't one or it looks like one we put out") - (* ;; - "Look at old template; if there isn't one or it looks like one we put out") + (* ;; "(of the form (EVAL* KEYWORDS keys...))") - (* ;; "(of the form (EVAL* KEYWORDS keys...))") + (* ;; + "replace it with a new template (and somehow mark everything that calls FNNAME for reanalysis") - (* ;; - "replace it with a new template (and somehow mark everything that calls FNNAME for reanalysis") + [LET ((OLDTEMP (GETTEMPLATE FNNAME)) + (EC EVALCOUNT)) - [LET ((OLDTEMP (GETTEMPLATE FNNAME)) - (EC EVALCOUNT)) + (* ;; "First pop off all the EVALs at the front and count them") - (* ;; - "First pop off all the EVALs at the front and count them") - - (while (EQ (CAR OLDTEMP) - 'EVAL) do (CL:DECF EC) - (pop OLDTEMP)) - (if (OR (NULL OLDTEMP) - (EQ (CAR OLDTEMP) - 'KEYWORDS)) - then (pop OLDTEMP) - (if (AND (CL:ZEROP EC) - (NULL (CL:SET-DIFFERENCE OLDTEMP KEYLIST - )) - (NULL (CL:SET-DIFFERENCE KEYLIST OLDTEMP - ))) - then (* ; "it matches, don't replace it") - NIL - else (* ; - "It looks like one of ours; replace it") - (SETQ KEYLIST (CONS 'KEYWORDS (CL:NREVERSE - KEYLIST))) - (while (CL:PLUSP EVALCOUNT) - do (push KEYLIST 'EVAL) - (CL:DECF EVALCOUNT)) - (SETTEMPLATE FNNAME KEYLIST) + (while (EQ (CAR OLDTEMP) + 'EVAL) do (CL:DECF EC) + (pop OLDTEMP)) + (if (OR (NULL OLDTEMP) + (EQ (CAR OLDTEMP) + 'KEYWORDS)) + then (pop OLDTEMP) + (if (AND (CL:ZEROP EC) + (NULL (CL:SET-DIFFERENCE OLDTEMP KEYLIST)) + (NULL (CL:SET-DIFFERENCE KEYLIST OLDTEMP))) + then (* ; "it matches, don't replace it") + NIL + else (* ; + "It looks like one of ours; replace it") + (SETQ KEYLIST (CONS 'KEYWORDS (CL:NREVERSE + KEYLIST))) + (while (CL:PLUSP EVALCOUNT) + do (push KEYLIST 'EVAL) + (CL:DECF EVALCOUNT)) + (SETTEMPLATE FNNAME KEYLIST) (* ;; -"These templates shouldn't show up in FILES?, since they're solely for Masterscope internal use...") + "These templates shouldn't show up in FILES?, since they're solely for Masterscope internal use...") - (UNMARKASCHANGED FNNAME 'TEMPLATES) + (UNMARKASCHANGED FNNAME 'TEMPLATES) (* ;; "The SETTEMPLATE call marked everyone who calls FNNAME to be reanalyzed; it also marked FNNAME - this gets rid of that") - (PUTHASH FNNAME NIL MSCHANGEDARRAY] + (PUTHASH FNNAME NIL MSCHANGEDARRAY] else + (* ;; "It's possible that we created an old template for this function and it no longer has keywords, so we MAY need to delete it") - (* ;; "It's possible that we created an old template for this function and it no longer has keywords, so we MAY need to delete it") + (LET ((OLDTEMP (GETTEMPLATE FNNAME))) + (while (EQ (CAR OLDTEMP) + 'EVAL) do (pop OLDTEMP)) + (if (EQ (CAR OLDTEMP) + 'KEYWORDS) + then (SETTEMPLATE FNNAME NIL) - (LET ((OLDTEMP (GETTEMPLATE FNNAME))) - (while (EQ (CAR OLDTEMP) - 'EVAL) do (pop OLDTEMP)) - (if (EQ (CAR OLDTEMP) - 'KEYWORDS) - then (SETTEMPLATE FNNAME NIL) + (* ;; + "These templates shouldn't show up in FILES?, since they're solely for Masterscope internal use...") - (* ;; -"These templates shouldn't show up in FILES?, since they're solely for Masterscope internal use...") - - (UNMARKASCHANGED FNNAME 'TEMPLATES) + (UNMARKASCHANGED FNNAME 'TEMPLATES) (* ;; "The SETTEMPLATE call marked everyone who calls FNNAME to be reanalyzed; it also marked FNNAME - this gets rid of that") - (PUTHASH FNNAME NIL MSCHANGEDARRAY] + (PUTHASH FNNAME NIL MSCHANGEDARRAY] (MSPRGTEMPLATE1 (CDDR EXPR) '(|..| EVAL RETURN]) ([LAMBDA NLAMBDA OPENLAMBDA] (MSPRGTEMPLATE EXPR '(NIL (IF LISTP (|..| BIND) - (IF (PROGN EXPR) BIND)) - |..| EFFECT RETURN) + (IF (PROGN EXPR) BIND)) + |..| EFFECT RETURN) TYPE)) (PROG (CLISP TEM) (COND @@ -913,23 +893,23 @@ DONTCOPY (MSPRGLAMBDA CLISP FLG T))) ((AND DWIMFLG (SETQ CLISP (MSDWIMTRAN EXPR))) (* has a CLISP translation - (e.g. DLAMBDA)) + (e.g. DLAMBDA)) (PROG ((INCLISP (INCLISP EXPR))) (* rebind INCLISP, and try again on - the translation) + the translation) (MSPRGLAMBDA CLISP FLG TYPE))) (T (MSPRGERR EXPR) (MSPRGE EXPR]) (MSPRGLST - (LAMBDA (L PARNT CNTX) (* lmm "27-JUN-78 01:57") - (for X in L do (MSPRGE X PARNT CNTX)))) + [LAMBDA (L PARNT CNTX) (* lmm "27-JUN-78 01:57") + (for X in L do (MSPRGE X PARNT CNTX]) (ADDTO - (LAMBDA (RELATION WHAT PRNT FLG) (* lmm "24-DEC-78 11:51") + [LAMBDA (RELATION WHAT PRNT FLG) (* lmm "24-DEC-78 11:51") (PROG ((PTR (FASSOC RELATION MSFNDATA))) - (OR PTR (COND + [OR PTR (COND (FLG (RETURN)) - (T (SHOULDNT)))) + (T (SHOULDNT] (OR (NULL ONLYRELS) (FMEMB RELATION ONLYRELS) (RETURN)) @@ -945,18 +925,18 @@ DONTCOPY ((EQ (CAR (SETQ PTR (CDR PTR))) WHAT) (RETURN)) - (T (GO LP)))))) + (T (GO LP]) (NLAMBDAFNP - (LAMBDA (FN) (* lmm "26-Mar-85 12:37") - (AND (NOT (EQMEMB 'EVAL (GETPROP FN 'INFO))) + [LAMBDA (FN) (* lmm "26-Mar-85 12:37") + (AND [NOT (EQMEMB 'EVAL (GETPROP FN 'INFO] (COND - ((OR (FGETD (SETQ FN (OR (GETPROP FN 'BROKEN) + ([OR (FGETD (SETQ FN (OR (GETPROP FN 'BROKEN) FN))) - (SETQ FN (GETLIS FN '(EXPR CODE)))) - - (* if the function is defined, check its argtype to tell you whether it is - NLAMBDA or LAMBDA) + (SETQ FN (GETLIS FN '(EXPR CODE] + + (* if the function is defined, check its argtype to tell you whether it is + NLAMBDA or LAMBDA) (SELECTQ (ARGTYPE FN) ((1 3) @@ -964,25 +944,26 @@ DONTCOPY NIL)) (T (* otherwise, rely on NLAMA or NLAML) (OR (FMEMB FN NLAMA) - (FMEMB FN NLAML))))))) + (FMEMB FN NLAML]) (MSPRGDWIM - [LAMBDA (X FN DEF) (* ; "Edited 8-Apr-88 11:55 by jrb:") + [LAMBDA (X FN DEF) (* ; "Edited 8-Apr-88 11:55 by jrb:") (AND DWIMFLG (LET ((NOSPELLFLG T) FILEPKGFLG) (DECLARE (SPECVARS NOSPELLFLG)) (RESETVARS ((DWIMESSGAG T)) - (* ;; "JRB Made these RESETVARS to placate the PavCompiler") - (PROG (LISPXHIST) (* ASSERT%: ((REMOTE EVAL) - DWIMESSGAG FILEPKGFLG NOSPELLFLG)) + (* ;; "JRB Made these RESETVARS to placate the PavCompiler") + + (PROG (LISPXHIST) (* ASSERT%: ((REMOTE EVAL) DWIMESSGAG + FILEPKGFLG NOSPELLFLG)) (DWIMIFY0 X (OR (AND (LITATOM FN) FN) '?) VARS DEF]) (MSDWIMTRAN - (LAMBDA (EXPR) (* DD%: "28-DEC-81 13:46") + [LAMBDA (EXPR) (* DD%: "28-DEC-81 13:46") (AND DWIMFLG (COND ((AND CLISPARRAY (GETHASH EXPR CLISPARRAY))) ((AND CLISPTRANFLG (EQ (CAR (LISTP EXPR)) @@ -992,7 +973,7 @@ DONTCOPY (OR (AND CLISPARRAY (GETHASH EXPR CLISPARRAY)) (AND CLISPTRANFLG (EQ (CAR (LISTP EXPR)) CLISPTRANFLG) - (CADR EXPR)))))))) + (CADR EXPR]) ) (RPAQQ MSFNDATA @@ -1033,7 +1014,7 @@ DONTCOPY (RPAQQ MSERRORFN ppe) -(RPAQQ MSRECORDTRANFLG NIL) +(RPAQQ MSRECORDTRANFLG T) (ADDTOVAR INVISIBLEVARS $$1 $$2 $$3 $$4 $$5 $$6 $$7 $$8 $$9 $$10 $$11 $$12 $$13 $$14 $$15 $$16 $$17) (DECLARE%: DONTCOPY @@ -1249,6 +1230,10 @@ DONTCOPY RETFROM RETTO) ((NIL NIL RETURN) THE))) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS MSTEMPLATES INITIALTEMPLATES) +) @@ -1271,7 +1256,7 @@ DONTCOPY (DEFINEQ (MSFINDP - [LAMBDA (STRUC SUBL) (* ; "Edited 18-Aug-2021 10:56 by larry") + [LAMBDA (STRUC SUBL) (* ; "Edited 18-Aug-2021 10:56 by larry") (PROG NIL LP (RETURN (OR (EQ SUBL STRUC) (AND (LISTP STRUC) @@ -1284,13 +1269,12 @@ DONTCOPY (BLOCK%: MSFINDP MSFINDP) ) -(PUTPROPS MSANALYZE COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1988 1990 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3759 11278 (VARS 3769 . 3910) (FREEVARS 3912 . 4065) (CALLS 4067 . 10408) ( -COLLECTFNDATA 10410 . 10789) (CALLS3 10791 . 11276)) (13527 52635 (ALLCALLS 13537 . 14216) ( -MSINITFNDATA 14218 . 14462) (MSPRGE 14464 . 21538) (MSPRGMACRO 21540 . 22136) (MSPRGCALL 22138 . 22462 -) (MSBINDVAR 22464 . 22983) (MSPRGRECORD 22985 . 29898) (MSPRGERR 29900 . 30068) (MSPRGTEMPLATE1 30070 - . 39231) (MSPRGTEMPLATE 39233 . 39834) (MSPRGLAMBDA 39836 . 49431) (MSPRGLST 49433 . 49601) (ADDTO -49603 . 50394) (NLAMBDAFNP 50396 . 51148) (MSPRGDWIM 51150 . 51969) (MSDWIMTRAN 51971 . 52633)) (61832 - 62264 (MSFINDP 61842 . 62262))))) + (FILEMAP (NIL (3487 10938 (VARS 3497 . 3636) (FREEVARS 3638 . 3789) (CALLS 3791 . 10089) ( +COLLECTFNDATA 10091 . 10462) (CALLS3 10464 . 10936)) (13187 51210 (ALLCALLS 13197 . 13797) ( +MSINITFNDATA 13799 . 14029) (MSPRGE 14031 . 21284) (MSPRGMACRO 21286 . 21997) (MSPRGCALL 21999 . 22316 +) (MSBINDVAR 22318 . 22825) (MSPRGRECORD 22827 . 29604) (MSPRGERR 29606 . 29769) (MSPRGTEMPLATE1 29771 + . 38819) (MSPRGTEMPLATE 38821 . 39424) (MSPRGLAMBDA 39426 . 48039) (MSPRGLST 48041 . 48203) (ADDTO +48205 . 48985) (NLAMBDAFNP 48987 . 49713) (MSPRGDWIM 49715 . 50554) (MSDWIMTRAN 50556 . 51208)) (60485 + 60921 (MSFINDP 60495 . 60919))))) STOP diff --git a/library/MSANALYZE.DFASL b/library/MSANALYZE.DFASL index ea0c00f6dbb44c72bf12b4828f6d2743f3214661..9798dac712790e86d9bdb36a0961f25cbd47864f 100644 GIT binary patch delta 9641 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 wiXQbvYw_Y93I3k?T@Nm1;7+;O1s8e}vEkuK)l5 delta 9606 zcmcIq3viTGmcIA@`;ml167nJ-qzNkFrI26@5QI*r^Xzmw-JKWePzYgyg~Sa{7qEkr zfH6y8ZoqC!U0r9_Wgd$ynha`yMVp(-n%<{TqrXqF7(2S z12$8}N{`go7aP){b~(SJK6gGVf2bZyX)Zq&dr$~*Y+O{y=%5kp&$-sP2m9x2s|q#j zsOajxxAXROD|>qGKd@-BEK`-KJ0~5F_8ZmyX#cpDkhjVmc2~MXUQ#-A(za6=d@l!eZWU3T0y1(D) z@im27f?hNY{`DI*W$N|uzPXpcVp&N;{0ZSWf@g6a?-G0$;qM4uQVTN+<(H}>bBg>A zwI$P&_x-F`i4iMxpyZuVWf0qW^>${3{90vX)#uw#`Ugb*24NJTOjYZ%X3NjiV_B0X zoCGTN{6>pQp^j%Y$xAA4LfOJgCRiUcqYD19a&VC83x!GJ&`u+tz?WI{x&&$-Cv;jp zG@+vKv5%QYcWRTQPFbnK(hP|P1 zoxg_k7)-Obx_vDaMmQ@y3mO9F0zwW?(CZFEY#3~8X;j&w1O3h_ugB-cnCZ)LIm=09 zxq2ZdS5~Nh$SKOK(8}Zl>T;^Da;7?Y232ZmZhoW|eK^o>hP+|$5-}~KX9Yc>n{8)# zyVdkiZ-ccm(r&eJLF}PMcL*fERh=Um(dt=Wb6lT;^g-JO`fTVhYh*Sg#cHx(TU;=O z1fiWlAZrXO*xm`Te2gP*@R01A6jh(+iWJ9Yfp?$%C?4PSiF4 zj_U|`sdJt3=g*Z#)%N@|P@tAiEQSKLYobqHR&P(7pEqqj|`rrdTUtKhVmy=|OB zm^wFYs6`xCSFXp>cEc2p+@rdt{Kf2TKsLz=aSUN0jkX7&0}L3~==KDgyzK$Eze+i# zPLsP;@zfjhvEMjDth*7OB)Cnjo?7g|x@K%+0>V`YNx9)CY9CS;5|wz#G>L{ts)2Gq z{dVe%eC(4kV*7W50|Y-%8HI}?-$O!(wBh)YBYr!=Orq`sD83xl@SOyty+jhj zvkB^B3HT7h0KbYsllcTJvN~QkKK*NKRa1{r?-w=~tpI|tfC!HQlw6($5ndqbK^1nn z(hniwFte#%SFZe69dgZ%G$VO7ktIT2h&F^Afeiq~C1P+Q{D`0(;U5U%NaFVdiFb%# z3Q~VX5S59S2s#ixM-T@VPq7E95Gx{+ihhEFyqXR7QLAk=i`B(uO^wa7LT<0>owg}^ zuW5{mxRj#8i99OK(=MPYGlCh6FtmKGIE=$AffDNENLbx)Bydk^dnS4ZzJiYDJW zv{T+p{C$oY^cK_TB`5KV>x)5~tZbv)6IaxA)3-K1D@IudJ6)?g80AER7esmx)d<-4 zYDnKcJ(w|_=;!kja~?SIyXjAvD+kh~Fm#&naIk^e0zrQ`+Hd#x!|m2inhA={Eu{4T z!n+7!_?cYnFqVx?M8$M4?qLS?`xzyXBR~+piT8B zA|g=K^MbsL)O4c0qMn>tJPAh>XKkynfce%ZiOzn;%*`}EBh>0 z-lLpVhps1DDX(y;T0E;D(gn=M&AdhmR2d&x^_B}PS8PleV_?jlvgjZ!oLoTzbRFzB z0|76}OpXq6dD1=9uj2hO?E;+in5fRoT5{W4gyUN;Yh_{=Z!_eiCd(9FueVh5?A(aP zq+u8amzA)4QtJdgPg+8!0I)JWoYgU6Aat`Vx4K3tF9GGOM0Z6J1J53NU@ddiz^6!d zjA>gYj9}tJq}&%hB=gp;60dz%sMT`{7VLwhA9b8e&PrY1`;4^MU9`gDlOr$8Ib%yb zXV5x`bL!FgQzGY69iwwnwnzI@!rsP!4-R5zF=Y8Hc-j7%%*O<>4HCozvh5~_nQB{2 z5O+OW6G6;W8yA1vYHTG$#SO@Yb>a>op9O6GoXDunqE+$-1c~9%1htQO)uoc+$OUApLxT7t!s3Jk z7f=%BlL@AmxJ(QLhvU5BIKjQh@G3!^hWIOH_)ADphtKP;3D@=z<%>1ku`pJMW1gRh zP4QJBQPpkGu+e5Om3p;wMmm1F*yy|zMg#f;$jC6Pt{$4Me$!a1B$I6Gf@Wf=M$!LHZmbmWu}n zmm;_E1`*I;gNrgA5{$niZsQ5;6j&Jzo*s4XV6AG-ty7j0p`5vIB0BEEMgc*bjqeh}zgbie8QM7= z`FZY?ii=4h=8c)iW|Mr+M`NzV`_UKwNxYcu#%Y9nynT+SSTKwS2x6cbbZQbmM%W39 zGrq;&=nkqwi!1VpMw_IOgWYrpFmlz0i%a|yfgmY9jXZ>R#}&#Jf>>W9JB}b{F2Vc+ z1D`AU)Y^)|ddkW7vCk-ghv0gQ65@4|Kyw8L3{kmekl4d4wwd_))QO6jaQX0G6*D3f zm5Yc>QIboHm|gN>oGRZVD)LIIg9gC|6AX6|97Y2!5ibSkKPTWT#DGJHT}RXPUyM1?*(daTQp4LmHe!*~+if14|3!BkCv1b`^nP@(~ze)LscUTO>QAmMkl* z`NMo_oTV=aan`Ygn!DH0>mjOb;^WEKlKOj_K4NWk{^}-Kqmvu9)Mu7Gy^gQVND_|o ztq6>AAH5bXA@cubG?HH=>8x#3Xoq~Ro_G7?DRtSMe=~>N=eAMajP~PxPB(dGmA9HK z7*elz?o>}!=0!fGTP?6rd}dw8nKh;Jj56Z;q8KtUrK+v2v97vfoiJSJS@a5 zu&T}!kQJF+Y;aWxk+xnP9vMJ1W}`xxBSB&6oq=$$w#DDD;Bi&z@h>{X<F0CmVN$sje`9hk?27hhEp%<{zHjcj&dr_cTx+^}?%iNBU{&D$Pxjg=OvH~>xVlKD zsE4YTM67E#18(TJbf3Vz(N`CChnpJ7Mqbjvcs~*iKAfoDSUc7UW$*1J-VxakHzW2+ zUy}##&#dymk)qk61Ik@91r9JPY9>XX;Fus`c;PyXZgo8Fsvs&A=X8q6i)flV6!Hec zi|}Bs$Fy|E3mR20BYsnR*wTXfZN9q1E!#yl8udqTB&A2Z`pe^48U(@K=~%elE1bG{b9Xpb2}!aKQ(Q zWPJ`<6Vd)+GlA0?cGpxkRdo=vP0tr@eE)wYtgRi(7`Pf}!rFQxP3$ z1Rk-R%JHPs$+}q?BVtRX)lc*3UYa3$>TAOM90sNKMt7jZ14cv#DTVlYTrx91`Rij? zZK-!NsZB(-Wazag*KqVwLti}V4?84JPPW{o$D4RKa=H!RE@ z$*k8^z1pyJgnG-E@jh38B@%NwIbMvh>*RPAv>?My}V>qU(#-@g3tG{i8KYxG`KE?&XY0=LtkfS;V z89*h$8jl8zJ+-k0P9DbEJ>a)4NFnq!{H#RtRA7MJ3$0er1EaE6nE%TNvFw1%Gn#^< z``hB(CS2o>?&k|E`WiD_$=zBoE^gFSQ+J}=vKy9Dy%mQox3C-=r@HHq(fg14J>}#h4}}A9h`W~$Ueb|oBk%Mj%FJ6 z>))pYX<%)*FR~E3Q2#Va3nb}jdcc~Lkk{v_bqDEGF@~CCt%Q@-nx^CgCGd+X>=Ss_ zA(pF6f#3MXa4@=TbogF9goB45XN)*TB>4`~1};_octV2x%GBo{+E?VoQVi@GxHB!h zmfQ7-<}ihn+f4^6W6P1(LpGVgF4KXi-U;W$$ww9Z&I-5?enr0-yT5Mn;IkDtk*jDk+DzZGRk zl&+z)DDSV|s^A`QhQF20A*8}VcC(eEN7UJXE)0eF^a68^4vv;e%+N}|VdZL{rVj|C zH4m%h?bGBAwY@!@2Dc!bpF+LUJ}I&So0BaXoUOPMVv>Qw0z(&FV{zQQR z{KWu+E)B#d7Jxtb;I2{xP+7Uv26dT`xMGpu4+C@`0yy4tKl~L1lh;`QN+(eaVNt%Z zz-2Ymu}mIQqK@$Kd}H@cp0O4M3#g zBU42CGv{CR@rfP$?I|6xZ20*dV?7^MFV)i&=m^%;)ItWNMH~AIT07To>U7=YYVYjn y-s