From 92fd33eaad9d9cb3ee639a212ae548a244596114 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Wed, 17 Apr 2024 16:21:22 -0700 Subject: [PATCH] Add support for cl: loop for hash tables (#1605) * Add support for cl: loop for hash tables * fix subtle package problems setting up LISP package & conflicts with CLOS * include fix for 'repeat n' clause * remake in lower-case p make diffs legible, dfasl for defuns --- clos/clos-env.DFASL | Bin 42337 -> 42963 bytes clos/clos-env.lisp | 2 +- clos/pkg.dfasl | Bin 1975 -> 1913 bytes clos/pkg.lisp | 6 +- internal/loadups/LOADUP-LISP | 15 +- internal/loadups/LOADUP-LISP.LCOM | Bin 3562 -> 3577 bytes sources/PACKAGE-STARTUP | 51 +-- sources/PACKAGE-STARTUP.LCOM | Bin 27447 -> 27604 bytes sources/XCL-HASH-LOOP | 102 +++++ sources/XCL-HASH-LOOP.DFASL | Bin 0 -> 2554 bytes sources/XCL-LOOP | 145 +++--- sources/XCL-LOOP.DFASL | Bin 40392 -> 40725 bytes sources/XCLC-ALPHA | 718 +++++++++++++++--------------- sources/XCLC-ALPHA.DFASL | Bin 0 -> 33392 bytes sources/XCLC-ALPHA.LCOM | Bin 38903 -> 0 bytes 15 files changed, 578 insertions(+), 461 deletions(-) create mode 100644 sources/XCL-HASH-LOOP create mode 100644 sources/XCL-HASH-LOOP.DFASL create mode 100644 sources/XCLC-ALPHA.DFASL delete mode 100644 sources/XCLC-ALPHA.LCOM diff --git a/clos/clos-env.DFASL b/clos/clos-env.DFASL index c0562b23c01292b7cedd00ca73174bf3c99acb47..dd9c96f15913dbdddfcfa362d560e8f3c071c6ef 100644 GIT binary patch delta 6493 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 diff --git a/clos/clos-env.lisp b/clos/clos-env.lisp index be366810..ba1ec3f1 100644 --- a/clos/clos-env.lisp +++ b/clos/clos-env.lisp @@ -1505,7 +1505,7 @@ window" (setf (sedit:get-format 'call-next-method) '(:indent (1) :args (:keyword nil))) -(setf (sedit:get-format 'symbol-macrolet) 'let) +(setf (sedit:get-format 'cl:symbol-macrolet) 'let) (setf (sedit:get-format 'with-accessors) '(:indent ((1) 1) diff --git a/clos/pkg.dfasl b/clos/pkg.dfasl index b67004b27af00db6c8cb93c20fac5be364396091..854aef96d05815b378b08a12776e7b67cd10dcbb 100644 GIT binary patch delta 190 zcmdna|C4Wmu69O#ZmL~QVo_10U1pA5ZfZ(SYNcIrPJXdnL3X-cPG)g|wINqckCV5=NE^zKKQ2845-QMkYE6hNf0VCRV0KToczwVaScNZnGuXkGb0%o JX2t#g4*=&ZTA}~| diff --git a/clos/pkg.lisp b/clos/pkg.lisp index 7491df0d..0ba5ec32 100644 --- a/clos/pkg.lisp +++ b/clos/pkg.lisp @@ -1,16 +1,12 @@ ;;;-*- Package: CLOS; Syntax: Common-Lisp; Base: 10 -*- - ;;; File converted on 26-Mar-91 10:23:29 from source pkg ;;;. Original source {dsk}local>users>welch>lisp>clos>rev4>il-format>pkg.;4 created 1-Mar-91 10:10:26 ;;;. Copyright (c) 1991 by Venue - (in-package "CLOS") - - ;;; Some CommonLisps have more symbols in the Lisp package than the ones that are explicitly ;;; specified in CLtL. This causes trouble. Any Lisp that has extra symbols in the Lisp package ;;; should shadow those symbols in the CLOS package. @@ -31,7 +27,7 @@ no-applicable-method no-next-method print-object reinitialize-instance remove-method shared-initialize slot-boundp slot-exists-p slot-makunbound slot-missing slot-unbound slot-value standard standard-class standard-generic-function standard-method - standard-object structure-class symbol-macrolet update-instance-for-different-class + standard-object structure-class update-instance-for-different-class update-instance-for-redefined-class with-accessors with-added-methods with-slots)) (import '(xcl:false xcl:destructuring-bind xcl:true) *the-clos-package*) diff --git a/internal/loadups/LOADUP-LISP b/internal/loadups/LOADUP-LISP index 006b3fc7..5000cbff 100644 --- a/internal/loadups/LOADUP-LISP +++ b/internal/loadups/LOADUP-LISP @@ -1,13 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "14-Mar-2024 12:16:33" |{DSK}larry>il>medley>internal>loadups>LOADUP-LISP.;2| 5426 +(FILECREATED "21-Mar-2024 10:56:13" |{DSK}larry>il>medley>internal>loadups>LOADUP-LISP.;4| 5586 :EDIT-BY "lmm" :CHANGES-TO (FNS LOADUP-LISP) - :PREVIOUS-DATE "31-Jul-2023 18:22:53" -|{DSK}larry>il>medley>internal>loadups>LOADUP-LISP.;1|) + :PREVIOUS-DATE "14-Mar-2024 12:16:33" +|{DSK}larry>il>medley>internal>loadups>LOADUP-LISP.;3|) (PRETTYCOMPRINT LOADUP-LISPCOMS) @@ -20,7 +20,8 @@ (DEFINEQ (LOADUP-LISP - (LAMBDA (DRIBBLEFILE) (* \; "Edited 14-Mar-2024 12:16 by lmm") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 21-Mar-2024 10:55 by lmm") + (* \; "Edited 14-Mar-2024 12:16 by lmm") (* \; "Edited 26-Feb-2023 12:17 by lmm") (* \; "Edited 13-Jul-2022 14:09 by rmk") (* \; "Edited 4-Mar-2022 19:13 by larry") @@ -110,9 +111,9 @@ (PACKAGE-ENABLE) - (* |;;| " Added late") + (* |;;| " Added late, LOAD late to avoid any dependencies") - (LOADUP '(XCL-LOOP)) + (LOADUP '(XCL-LOOP XCL-HASH-LOOP)) (* |;;| " networking code -- should make it optional but too many cross dependencies") @@ -130,5 +131,5 @@ (GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (673 5220 (LOADUP-LISP 683 . 5218))))) + (FILEMAP (NIL (673 5380 (LOADUP-LISP 683 . 5378))))) STOP diff --git a/internal/loadups/LOADUP-LISP.LCOM b/internal/loadups/LOADUP-LISP.LCOM index b76af649cb541a66fdc64936f1ff4be6f9337c10..d83abfd5d655316f6bf8bf14242c730131455a68 100644 GIT binary patch delta 227 zcmaDQ{Zo2Epso>0N7$XPXGV_ diff --git a/sources/PACKAGE-STARTUP b/sources/PACKAGE-STARTUP index 24d8e66c..dad817d4 100644 --- a/sources/PACKAGE-STARTUP +++ b/sources/PACKAGE-STARTUP @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "16-Mar-2024 08:28:55" |{DSK}larry>il>medley>sources>PACKAGE-STARTUP.;2| 36546 +(FILECREATED "21-Mar-2024 10:21:14" |{DSK}larry>il>medley>sources>PACKAGE-STARTUP.;9| 36658 :EDIT-BY "lmm" - :CHANGES-TO (VARIABLES CMLSYMBOLS.MACROS) + :CHANGES-TO (VARIABLES CMLSYMBOLS.DECLARATORS CMLSYMBOLS.SHARED) - :PREVIOUS-DATE " 1-Aug-2021 18:08:23" |{DSK}larry>il>medley>sources>PACKAGE-STARTUP.;1| + :PREVIOUS-DATE "20-Mar-2024 23:34:56" |{DSK}larry>il>medley>sources>PACKAGE-STARTUP.;8| ) @@ -311,8 +311,8 @@ "VECTOR-PUSH-EXTEND" "VECTORP" "WARN" "WRITE" "WRITE-BYTE" "WRITE-CHAR" "WRITE-LINE" "WRITE-STRING" "WRITE-TO-STRING" "Y-OR-N-P" "YES-OR-NO-P" "ZEROP")) -(CL:DEFPARAMETER CMLSYMBOLS.DECLARATORS '("DECLARATION" "FTYPE" "FUNCTION" "IGNORE" "INLINE" - "NOTINLINE" "OPTIMIZE" "SPECIAL" "TYPE")) +(CL:DEFPARAMETER CMLSYMBOLS.DECLARATORS '("DECLARATION" "FTYPE" "FUNCTION" "IGNORE" "IGNORABLE" + "INLINE" "NOTINLINE" "OPTIMIZE" "SPECIAL" "TYPE")) (CL:DEFPARAMETER CMLSYMBOLS.TYPENAMES '("ARRAY" "ATOM" "BIGNUM" "BIT" "BIT-VECTOR" "CHARACTER" "COMMON" "COMPILED-FUNCTION" "COMPLEX" @@ -327,10 +327,11 @@ "DEFINE-MODIFY-MACRO" "DEFINE-SETF-METHOD" "DEFMACRO" "DEFPARAMETER" "DEFSETF" "DEFSTRUCT" "DEFTYPE" "DEFUN" "DEFVAR" "DO" "DO*" "DO-ALL-SYMBOLS" "DO-EXTERNAL-SYMBOLS" "DO-SYMBOLS" "DOLIST" "DOTIMES" "ECASE" "ETYPECASE" "INCF" "LOCALLY" "LOOP" "LOOP-FINISH" - "MULTIPLE-VALUE-BIND" "MULTIPLE-VALUE-LIST" "MULTIPLE-VALUE-SETQ" "OR" "POP" "PROG" - "PROG*" "PROG1" "PROG2" "PSETF" "PSETQ" "PUSH" "PUSHNEW" "REMF" "RETURN" "ROTATEF" "SETF" - "SHIFTF" "STEP" "TIME" "TRACE" "TYPECASE" "UNLESS" "UNTRACE" "WHEN" - "WITH-INPUT-FROM-STRING" "WITH-OPEN-FILE" "WITH-OPEN-STREAM" "WITH-OUTPUT-TO-STRING")) + "WITH-HASH-TABLE-ITERATOR" "WITH-PACKAGE-ITERATOR" "MULTIPLE-VALUE-BIND" + "MULTIPLE-VALUE-LIST" "MULTIPLE-VALUE-SETQ" "OR" "POP" "PROG" "PROG*" "PROG1" "PROG2" + "PSETF" "PSETQ" "PUSH" "PUSHNEW" "REMF" "RETURN" "ROTATEF" "SETF" "SHIFTF" "STEP" "TIME" + "TRACE" "TYPECASE" "UNLESS" "UNTRACE" "WHEN" "WITH-INPUT-FROM-STRING" "WITH-OPEN-FILE" + "WITH-OPEN-STREAM" "WITH-OUTPUT-TO-STRING")) (CL:DEFPARAMETER CMLSYMBOLS.SPECIALFORMS '("BLOCK" "CATCH" "COMPILER-LET" "DECLARE" "EVAL-WHEN" "FLET" "FUNCTION" "GO" "IF" "LABELS" @@ -353,12 +354,12 @@ "CADADR" "CADAR" "CADDAR" "CADDDR" "CADDR" "CADR" "CAR" "CASE" "CDAAAR" "CDAADR" "CDAAR" "CDADAR" "CDADDR" "CDADR" "CDAR" "CDDAAR" "CDDADR" "CDDAR" "CDDDAR" "CDDDDR" "CDDDR" "CDDR" "CDR" "CLRHASH" "COERCE" "COMPLEX" "COND" "CONS" "DECLARE" "DEFMACRO" "DPB" "DRIBBLE" "ED" - "EQ" "EQL" "EVENP" "EXPORT" "FLOAT" "GET" "GO" "IGNORE" "IMPORT" "INSPECT" "INTEGER" "LAST" - "LDB" "LET" "LET*" "LIST" "LIST*" "LOGAND" "LOGNOT" "LOGXOR" "MAX" "MIN" "MINUSP" "NCONC" - "NIL" "NOT" "NULL" "ODDP" "OPEN" "OR" "PACKAGE" "PATHNAME" "PROG" "PROG*" "PROG1" "PROG2" - "PROGN" "QUOTE" "RANDOM-STATE" "RATIO" "READTABLEP" "REMHASH" "REMPROP" "RETURN" "ROUND" - "RPLACA" "RPLACD" "SATISFIES" "SEQUENCE" "SET" "STRING" "STRING-EQUAL" "STREAM" "STREAMP" - "T" "TAILP" "THE" "TIME" "TRACE" "TYPE" "TYPEP" "UNTRACE" "WRITE") + "EQ" "EQL" "EVENP" "EXPORT" "FLOAT" "GET" "GO" "IGNORE" "IGNORABLE" "IMPORT" "INSPECT" + "INTEGER" "LAST" "LDB" "LET" "LET*" "LIST" "LIST*" "LOGAND" "LOGNOT" "LOGXOR" "MAX" "MIN" + "MINUSP" "NCONC" "NIL" "NOT" "NULL" "ODDP" "OPEN" "OR" "PACKAGE" "PATHNAME" "PROG" "PROG*" + "PROG1" "PROG2" "PROGN" "QUOTE" "RANDOM-STATE" "RATIO" "READTABLEP" "REMHASH" "REMPROP" + "RETURN" "ROUND" "RPLACA" "RPLACD" "SATISFIES" "SEQUENCE" "SET" "STRING" "STRING-EQUAL" + "STREAM" "STREAMP" "T" "TAILP" "THE" "TIME" "TRACE" "TYPE" "TYPEP" "UNTRACE" "WRITE") (* |;;;| "Symbols shared by the Interlisp and Lisp packages.") @@ -643,14 +644,14 @@ (PACKAGE-INIT) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (3015 3110 (RETURN-FIRST-OF-THREE 3015 . 3110)) (3112 3250 ( -ERROR-MISSING-EXTERNAL-SYMBOL 3112 . 3250)) (3857 4825 (CHECK-SYMBOL-NAMESTRING 3857 . 4825)) (4827 -7985 (\\NEW.READ.SYMBOL 4827 . 7985)) (7987 9697 (\\NEW.MKATOM 7987 . 9697)) (23437 23519 ( -LITATOM.EXISTS 23437 . 23519)) (24199 25205 (NAMESTRING-CONVERSION-CLAUSE 24199 . 25205)) (25207 26462 - (CONVERT-LITATOM 25207 . 26462)) (26464 28537 (CONCOCT-SYMBOL 26464 . 28537)) (28539 28833 ( -TRANSFER-SYMBOL 28539 . 28833)) (28835 29543 (INTERN-LITATOM 28835 . 29543)) (29545 30224 ( -\\LITATOM.EATCHARS 29545 . 30224)) (30226 30503 (PACKAGE-INIT 30226 . 30503)) (30505 31078 ( -PACKAGE-CLEAR 30505 . 31078)) (31080 32471 (PACKAGE-MAKE 31080 . 32471)) (32473 33785 ( -PACKAGE-HIERARCHY-INIT 32473 . 33785)) (33787 35396 (PACKAGE-ENABLE 33787 . 35396)) (35398 36041 ( -PACKAGE-DISABLE 35398 . 36041)) (36088 36114 (ID 36088 . 36114))))) + (FILEMAP (NIL (3038 3133 (RETURN-FIRST-OF-THREE 3038 . 3133)) (3135 3273 ( +ERROR-MISSING-EXTERNAL-SYMBOL 3135 . 3273)) (3880 4848 (CHECK-SYMBOL-NAMESTRING 3880 . 4848)) (4850 +8008 (\\NEW.READ.SYMBOL 4850 . 8008)) (8010 9720 (\\NEW.MKATOM 8010 . 9720)) (23549 23631 ( +LITATOM.EXISTS 23549 . 23631)) (24311 25317 (NAMESTRING-CONVERSION-CLAUSE 24311 . 25317)) (25319 26574 + (CONVERT-LITATOM 25319 . 26574)) (26576 28649 (CONCOCT-SYMBOL 26576 . 28649)) (28651 28945 ( +TRANSFER-SYMBOL 28651 . 28945)) (28947 29655 (INTERN-LITATOM 28947 . 29655)) (29657 30336 ( +\\LITATOM.EATCHARS 29657 . 30336)) (30338 30615 (PACKAGE-INIT 30338 . 30615)) (30617 31190 ( +PACKAGE-CLEAR 30617 . 31190)) (31192 32583 (PACKAGE-MAKE 31192 . 32583)) (32585 33897 ( +PACKAGE-HIERARCHY-INIT 32585 . 33897)) (33899 35508 (PACKAGE-ENABLE 33899 . 35508)) (35510 36153 ( +PACKAGE-DISABLE 35510 . 36153)) (36200 36226 (ID 36200 . 36226))))) STOP diff --git a/sources/PACKAGE-STARTUP.LCOM b/sources/PACKAGE-STARTUP.LCOM index 65dd880dc64d11dac92567e4167de6269222d9f9..49f479dce9161b37122a31df15a7c1fb634eca5b 100644 GIT binary patch delta 1638 zcmZux&2Jk;6wjt<3MP~$xM}Ex*C{GZ%33?S>s_w}NjAGD88h(QPy zgv5bJQ8{oxLVU~tt`*{nC{~38m)^J`At4YF;=&n;KY=&?NNu-1tml3I-n`$NAAVPU z`$PF`yQovOb>m%C*K`x8R@G^hnxF4Cj-10)AiDOzs2f$ou9}np@#0nzgiNjBXOF<) z8*d*%fzLbNmdJ&WfCuCE@wVEjnF(X21hg%`!VMb49hB4 z#K(#uUYkFsW(_xG{wh?Hl(mC6&r~0CAdYbe60}(@TQY@G>51w7I)8FY*M&( zt&1Sqw{tBdDL)?_YQMhy#DQ#P{<;=6?v@zdh6Mj>&%rdwyAmnl@)RSDD$ zftD>;YqFhAocij}WeprnC`-#{G+4t9l4E_(T>A5Qs7GSA7Yp7hhs{xjDd7NTg-!!attQVW>D@D@ELmnjP-gd*BsqzNJ?aimf z(fZ~RN%E|L;qotH9jq&UUFSThXBB{1Fa`DBBCGpqBLht8|ujen1gKi~p z%KPZEgn4)>U?ZH>8A1~u)pkx}J6;@l=n@4X5&zcm#R5svxQ@BWb{=yqC9-;Ywm{M( zbUh!{nahK$7O;$nAM5eC0^vbRA{rs%I|+(CXf)5yApyO?0kt$p6L)(9X;cAR zCcl5>2pNfE3~6z!28zqoXXKcQ8q;yenUT}ugM3hN#4iWr=%Iw=>3q1?IxS0THgV)F zq`Za#&a5<2Xi_2Tmj-JA)RF$uWkPFPvQM_1OR^%{tDK$0rJ`kVXKzKrr5V!5!{-1W zFl$0a|8cXaBdyP_;Bv|mELB<54$?Sku?W}H=^OEC9$}<1vN(@z0j&sae?zgvt^KcF zGANL%UPy2~o#Dx`87fF+;8klg97kGJ#K7fZ*nsGFq0`1zzieWb%RbUICvO%AcD2Gk+w&G z=w{lX%tMy_$*CL}K0E!wgF*qg-t5fOnc7!XYtcSCh0mRt_il6L?$_6yJFju~TjRZUJYo2Q-U>L{I%PG_( zwRXa%=7(xtR&%R{ydC^qSGFNhpr5>f<1X4Uq>Q!*5>o$$~u zYhVXhijypQLv{Yw=kmVi`V>Xt2Z=jbXNM*8=~?#vl?C>FHJ3>T!UMZ?C7jRlVJB{2 zbo%jW56$zH1kD{ki7Y$C={2a2=C>;yF3a9EO6IgHsK!9jUK@*$FT zGMjoTnQ}50UOh?FQ|UCVBxr$zsaIBzm(s*QjMR`ODUF2;=ZT&kNMnwgi7vD6u3cCK zqM<@OleRmlwlo4}f|msd<}QXPVY)#On*dT~xBC@NW%v7^zJynwU$Q;?7l_7WrE4%!PL!&d2fQvvw<;bO zJ7j}h-MY-~zxErq!G74d#Qxr>J&Kp@V9X;Pb)5z4{4?c4R>q{Llarry>il>medley>sources>XCL-HASH-LOOP.;9 4865 + + :EDIT-BY "lmm" + + :CHANGES-TO (FUNCTIONS TEST-HASH-LOOP) + + :PREVIOUS-DATE "21-Mar-2024 11:19:24" {DSK}larry>il>medley>sources>XCL-HASH-LOOP.;8) + + +(PRETTYCOMPRINT XCL-HASH-LOOPCOMS) + +(RPAQQ XCL-HASH-LOOPCOMS ((FUNCTIONS HASH-TABLE-ITERATOR HASH-TABLE-ITERATOR-1 TEST-HASH-LOOP + CL:WITH-HASH-TABLE-ITERATOR) + (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) + LLARRAYELT)) + (PROP FILETYPE XCL-HASH-LOOP))) + +(CL:DEFUN HASH-TABLE-ITERATOR (HASH-TABLE-LIST) (* ; "Edited 21-Mar-2024 09:49 by lmm") + [LET ((TABLES (MKLIST HASH-TABLE-LIST))) + (COND + ((NULL TABLES) + NIL) + ((NULL (CDR TABLES)) + (HASH-TABLE-ITERATOR-1 (CAR TABLES))) + (T (LET [(ITERATOR (HASH-TABLE-ITERATOR-1 (CL:POP TABLES] + #'(CL:LAMBDA NIL (CL:LOOP (CL:MULTIPLE-VALUE-BIND + (MORE KEY VALUE) + (CL:FUNCALL ITERATOR) + (COND + (MORE (RETURN (CL:VALUES MORE KEY VALUE))) + [TABLES (CL:SETQ ITERATOR (HASH-TABLE-ITERATOR-1 + (CL:POP TABLES] + (T (RETURN NIL]) + +(CL:DEFUN HASH-TABLE-ITERATOR-1 (TABLE) (* ; "Edited 19-Mar-2024 12:31 by lmm") + [LET* ((SLOT (fetch HARRAYPBASE of TABLE)) + [LASTSLOT (fetch (HASHSLOT NEXTSLOT) of (\HASHSLOT SLOT (fetch (HARRAYP LASTINDEX) + of TABLE] + (NULLVALUE \HASH.NULL.VALUE) + K V) + #'(CL:LAMBDA NIL (CL:BLOCK ITERATOR + (CL:LOOP (SETQ K (fetch (HASHSLOT KEY) of SLOT)) + (SETQ V (fetch (HASHSLOT VALUE) of SLOT)) + (CL:WHEN V + + (* ;; "first non-empty slot") + + (RETURN)) + (SETQ SLOT (fetch (HASHSLOT NEXTSLOT) of SLOT)) + (CL:WHEN (EQ SLOT LASTSLOT) + + (* ;; "Out of slots to scan") + + (CL:RETURN-FROM ITERATOR NIL))) + + (* ;; "SLOT is set and not at end") + + [CL:RETURN-FROM ITERATOR (CL:MULTIPLE-VALUE-PROG1 + (CL:VALUES T K (AND (NEQ NULLVALUE V) + V)) + (SETQ SLOT (fetch (HASHSLOT NEXTSLOT) + of SLOT])]) + +(CL:DEFUN TEST-HASH-LOOP (&OPTIONAL HA) (* ; "Edited 21-Mar-2024 10:39 by lmm") + [IF (NOT HA) + THEN (SETQ HA (HARRAY 7)) + (LET [(TRIALDATA '(1 2 A B "C" "D" 'EEEE 'FFFF (G) + (H] + (CL:LOOP FOR X ON TRIALDATA BY #'CDDR DO (CL:SETF (GETHASH (CL:FIRST X) + HA) + (CL:SECOND X] + (LET (RESULT LOOPRESULT) + [MAPHASH HA #'(LAMBDA (V K) + (PUSH RESULT (LIST K V] + (SETQ RESULT (REVERSE RESULT)) + (SETQ LOOPRESULT (CL:LOOP FOR X BEING EACH HASH-KEY OF HA USING (HASH-VALUE V) + COLLECT + (LIST X V))) + (OR (EQUAL RESULT LOOPRESULT) + (COMPARELISTS RESULT LOOPRESULT)))) + +(DEFMACRO CL:WITH-HASH-TABLE-ITERATOR ((NAME HASH-TABLE-FORM) + &BODY BODY) (* ; "Edited 18-Mar-2024 09:38 by larry") + [LET ((ITERATOR (CL:GENSYM))) + `(LET [(,ITERATOR (HASH-TABLE-ITERATOR ,HASH-TABLE-FORM] + (DECLARE (IGNORABLE ,ITERATOR)) + (CL:MACROLET [(,NAME NIL '(CL:FUNCALL ,ITERATOR] + ,@BODY]) +(DECLARE%: EVAL@COMPILE DONTCOPY + +(FILESLOAD (LOADCOMP) + LLARRAYELT) +) + +(PUTPROPS XCL-HASH-LOOP FILETYPE CL:COMPILE-FILE) +(DECLARE%: DONTCOPY + (FILEMAP (NIL (755 1731 (HASH-TABLE-ITERATOR 755 . 1731)) (1733 3354 (HASH-TABLE-ITERATOR-1 1733 . +3354)) (3356 4284 (TEST-HASH-LOOP 3356 . 4284)) (4286 4705 (CL:WITH-HASH-TABLE-ITERATOR 4286 . 4705))) +)) +STOP diff --git a/sources/XCL-HASH-LOOP.DFASL b/sources/XCL-HASH-LOOP.DFASL new file mode 100644 index 0000000000000000000000000000000000000000..4773c1f020536d4d737bc4471a50a917735e5514 GIT binary patch literal 2554 zcmbVOPj4Gl5a0Lg*v=nPr%BVqq3R-{K&v{6O$yY7;LYwj-gv!hcGn@Mm5N)tY$~UT zoCFb76>Se3&`J=QR=X%j@C~9OAtj_WM{?^0i4VXB;J_7?nYT`zq%8+5`|ZrUnc11& z%$w&8E;28wytuTuyilvw`K7hh<+WA*`cj==Sz4=KtMb=D&fk*E-0k=5rN!!0tz56K zPc77@7ORz7b$!ZLTbTkk@vLBGGIf43HF2Tq>G$pf`uY+FpHH7H z-AMKI5hm_LCdyIb-gkO4iYkkSELgIn>LTUbubt>w(-JgEFr>Jm6^hnb*NGHDh7c@LaN&OAL^4H9v=m))8{`f>1rDQ;huj8A!UaLh2{W?mbSj!98>(U!P!YnDEMZzbx)GcfOu37=PUx1lR;%6S zAa(AwcGfIgmU@$sC;h}-r!RRVofX{i0+v^AUX7rVr6~F z5jTw>7(^slR0Ts$0o^0d32GX`EkK}bPuDC_FO)F0`%VYOZ$ienrRsu&nm~7{;J^?{ zvTFH?K?DMo(7-AcWN)w=&Az3sGw`Cez3;sBKTZX==?y{o=5BJ_>G@_lP})$wOgGYY z?2cW@{xiTeAEvT<9DR5eR?1Nb~KS~1V`QfYR{xK|m7+O1w zyLNQzSI%`#)yj)kD`kG+CV${%`(+RN2PiD6x>+=2>^wT@4P$48FX!hlCeWZ4fseLo zD8*aKShCK`18T%U~G5cip$t7HB!6yu@Pf!u4VAF;* z#Ma1B3^{K&cnG%+)^%I}yEA$j^BUKRsyYs>R+LX-@LAS9g^2e)$w6H60MQ=4C)7lW z1r}*;Y@GxSLh<7Sxc}M!*nVHg?uD{@!R%fH_q$hH#racjih zQAiqEgUtH##c#vytv?Y=u4!+l4|ii1xa1Il{XPMm9ovpw+D$XbBm1#^rMGz_-^{)>6PQ;v3{Hq*wLfphp$vk@3mvGvE8jdaum;i^7qFZv)GRcdja%$42b_#oB&``TVhbI}7hGJ=8NCrH~b;un2ayaXs4gR}` z*nr#UA{1Ul1YD*;ON5`~HZZr24~x2mqb(@I2V`CenGAgJkb}WY>zSnjl-he|6Rb{G zKVL52ti)eBNgr_KG@U2x=#yWvbT@*bJYx4so~=2^lzkcJZ}=ic&)Uz)VHYe^W)_P< zohooLX=@(AAnh3)%?qNT$1}Q-cb)!yR@UYeL)Y@MW|3nMd}v12%u+s_0XmGAuK?rP zE2V&qFb6QA$ARfoW;ETvJM#=`wyuQ{Z|DTD0Z`)DWjWRk)bG$X-@ZJtlA~~~GylA( zre1~|!sK6~l=u3(p#c4+Y-QrD%vu*=a1b^kf-$2BdD-mqMnYbNcq3#4+rb%p6U7H7 zCL)4Kbc{{wQpt6K_+ZiZuo&5a!5E+WlhTfd;9QNgE_IV51p98#djs6Eg8(-h`^Un4 J_r=qv{{jfwlarry>il>medley>sources>XCL-LOOP.;23| 61443 +(il:filecreated " 8-Apr-2024 19:38:27" il:|{DSK}larry>il>medley>sources>XCL-LOOP.;13| 61862 :edit-by "lmm" - :changes-to (il:functions with-temporaries) + :changes-to (il:vars il:xcl-loopcoms) + (il:functions cl::symbol-macrolet with-list-accumulator) - :previous-date "16-Mar-2024 11:13:11" il:|{DSK}larry>il>medley>sources>XCL-LOOP.;22|) + :previous-date " 2-Apr-2024 15:08:27" il:|{DSK}larry>il>medley>sources>XCL-LOOP.;12|) (il:prettycomprint il:xcl-loopcoms) @@ -39,8 +40,8 @@ multiple-value-list-argument-form multiple-value-list-form-p name-clause? one ordinary-bindings preposition1 preposition? psetq-forms quoted-form-p quoted-object reduce-redundant-code repeat-clause return-clause selectable-clause simple-loop - simple-var-p simple-var1 stray-of-type-error type-spec? until-clause - using-other-var variable-clause* while-clause with with-accumulators + simple-var-p simple-var1 stray-of-type-error cl::symbol-macrolet type-spec? + until-clause using-other-var variable-clause* while-clause with with-accumulators with-binding-forms with-clause with-iterator-forms with-list-accumulator with-loop-context with-numeric-accumulator with-temporaries zero) (il:functions loop) @@ -1152,15 +1153,11 @@ (getf *loop-components* :tail) (nreverse rtail))))) -(defun repeat-clause () - (let* ((form (form1)) - (type (typecase (if (quoted-form-p form) - (quoted-object form) - form) - (fixnum 'fixnum) - (t 'real)))) - (lp :for (gensym) - :of-type type :downfrom form :to 1))) +(defun repeat-clause () (il:* il:\; "Edited 2-Apr-2024 12:55 by lmm") + (let ((form (form1))) + (lp :for (gensym) + :downfrom form :to 1) + (clause*))) (defun return-clause () (lp :do `(return-from ,*loop-name* ,(form-or-it)))) @@ -1196,6 +1193,14 @@ (defun stray-of-type-error () (loop-error "OF-TYPE keyword should be followed by a type spec.")) +(defmacro cl::symbol-macrolet (vardefs &body body) (il:* il:\; "Edited 24-Mar-2024 21:46 by lmm") + + (il:* il:|;;| "") + + `(progn ,@(il:subpair (cons 'setq (mapcar vardefs #'car)) + (cons 'setf (mapcar vardefs #'cadr)) + body))) + (defun type-spec? () (let ((type t) (supplied-p nil)) @@ -1288,7 +1293,7 @@ iterator-forms `(,iterator-macro ,spec ,(with-iterator-forms rest form))))) -(defun with-list-accumulator (accumulator-spec form) +(defun with-list-accumulator (accumulator-spec form) (il:* il:\; "Edited 8-Apr-2024 19:28 by lmm") (destructuring-bind (name &key var splice &allow-other-keys) accumulator-spec (let* ((anonymous-p (null name)) @@ -1301,7 +1306,7 @@ '(list nil))) (form (if (and (not anonymous-p) (not (globally-special-p var))) - `(symbol-macrolet ((,var (cdr ,list-var))) + `(cl::symbol-macrolet ((,var (cdr ,list-var))) ,form) form))) `(let ((,list-var ,value-form)) @@ -1347,8 +1352,9 @@ (declare (type ,type ,var)) ,form)))))) -(defun with-temporaries (temporary-specs form) (il:* il:\; "Edited 16-Mar-2024 14:22 by lmm") - (destructuring-bind (temporaries &key ((:ignorable ignorable-vars))) +(defun with-temporaries (temporary-specs form) (il:* il:\; "Edited 21-Mar-2024 11:50 by lmm") + (il:* il:\; "Edited 16-Mar-2024 14:22 by lmm") + (destructuring-bind (temporaries &key ((:ignorable ignorable))) temporary-specs (if temporaries `(let ,temporaries ,@(when ignorable @@ -1411,55 +1417,56 @@ ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.") (il:declare\: il:dontcopy - (il:filemap (nil (6736 6821 (%keyword 6736 . 6821)) (6823 7006 (%list 6823 . 7006)) (7008 8265 ( -accumulate-in-list 7008 . 8265)) (8267 9947 (accumulation-clause 8267 . 9947)) (9949 10183 ( -accumulator-kind 9949 . 10183)) (10185 12074 (accumulator-spec 10185 . 12074)) (12076 12545 ( -along-with 12076 . 12545)) (12547 13039 (always-never-thereis-clause 12547 . 13039)) (13041 13400 ( -ambiguous-loop-result-error 13041 . 13400)) (13402 13617 (append-context 13402 . 13617)) (13696 14073 -(bindings 13696 . 14073)) (14075 14415 (bound-variables 14075 . 14415)) (14417 14507 (by-step-fun -14417 . 14507)) (14509 14615 (car-type 14509 . 14615)) (14617 14723 (cdr-type 14617 . 14723)) (14725 -15122 (check-multiple-bindings 14725 . 15122)) (15124 15344 (cl-external-p 15124 . 15344)) (15346 -15475 (clause* 15346 . 15475)) (15477 15877 (clause1 15477 . 15877)) (15879 16036 (compound-forms* -15879 . 16036)) (16038 16162 (compound-forms+ 16038 . 16162)) (16164 17422 (conditional-clause 16164 - . 17422)) (17424 18135 (constant-bindings 17424 . 18135)) (18137 18508 (constant-function-p 18137 . -18508)) (18510 18704 (constant-vector 18510 . 18704)) (18706 18797 (constant-vector-p 18706 . 18797)) -(18799 18991 (d-var-spec-p 18799 . 18991)) (18993 19223 (d-var-spec1 18993 . 19223)) (19225 19550 ( -d-var-type-spec 19225 . 19550)) (19552 20112 (declarations 19552 . 20112)) (20114 20224 ( -default-binding 20114 . 20224)) (20226 20839 (default-bindings 20226 . 20839)) (20841 21302 ( -default-type 20841 . 21302)) (21304 21825 (default-value 21304 . 21825)) (21827 23317 ( -destructuring-multiple-value-bind 21827 . 23317)) (23319 24604 (destructuring-multiple-value-setq -23319 . 24604)) (24606 25133 (dispatch-for-as-subclause 24606 . 25133)) (25135 25204 (do-clause 25135 - . 25204)) (25206 25382 (empty-p 25206 . 25382)) (25384 25658 (enumerate 25384 . 25658)) (25660 27386 -(extended-loop 25660 . 27386)) (27388 27559 (fill-in 27388 . 27559)) (27561 27638 (finally-clause -27561 . 27638)) (27640 27758 (for 27640 . 27758)) (27760 29116 (for-as-across-subclause 27760 . 29116) -) (29118 30040 (for-as-arithmetic-possible-prepositions 29118 . 30040)) (30042 30758 ( -for-as-arithmetic-step-and-test-functions 30042 . 30758)) (30760 32705 (for-as-arithmetic-subclause -30760 . 32705)) (32707 33157 (for-as-being-subclause 32707 . 33157)) (33159 34375 (for-as-clause 33159 - . 34375)) (34377 35905 (for-as-equals-then-subclause 34377 . 35905)) (35907 36185 (for-as-fill-in -35907 . 36185)) (36187 38153 (for-as-hash-subclause 36187 . 38153)) (38155 38401 ( -for-as-in-list-subclause 38155 . 38401)) (38403 39896 (for-as-on-list-subclause 38403 . 39896)) (39898 - 41600 (for-as-package-subclause 39898 . 41600)) (41602 41833 (for-as-parallel-p 41602 . 41833)) ( -41835 41983 (form-or-it 41835 . 41983)) (41985 42104 (form1 41985 . 42104)) (42106 42206 ( -gensym-ignorable 42106 . 42206)) (42208 42319 (globally-special-p 42208 . 42319)) (42321 42500 ( -hash-d-var-spec 42321 . 42500)) (42502 42583 (initially-clause 42502 . 42583)) (42585 42742 ( -invalid-accumulator-combination-error 42585 . 42742)) (42744 43361 (keyword1 42744 . 43361)) (43363 -43833 (keyword? 43363 . 43833)) (43835 43944 (let-form 43835 . 43944)) (43946 44100 (loop-error 43946 - . 44100)) (44102 44293 (loop-finish-test-forms 44102 . 44293)) (44295 44447 (loop-warn 44295 . 44447) -) (44449 44653 (lp 44449 . 44653)) (44655 45092 (main-clause* 44655 . 45092)) (45094 45190 (mapappend -45094 . 45190)) (45192 45722 (multiple-value-list-argument-form 45192 . 45722)) (45724 46117 ( -multiple-value-list-form-p 45724 . 46117)) (46119 46457 (name-clause? 46119 . 46457)) (46459 46738 ( -one 46459 . 46738)) (46740 48385 (ordinary-bindings 46740 . 48385)) (48387 48604 (preposition1 48387 - . 48604)) (48606 48807 (preposition? 48606 . 48807)) (48809 48969 (psetq-forms 48809 . 48969)) (48971 - 49151 (quoted-form-p 48971 . 49151)) (49153 49408 (quoted-object 49153 . 49408)) (49410 50214 ( -reduce-redundant-code 49410 . 50214)) (50216 50570 (repeat-clause 50216 . 50570)) (50572 50662 ( -return-clause 50572 . 50662)) (50664 51499 (selectable-clause 50664 . 51499)) (51501 51652 ( -simple-loop 51501 . 51652)) (51654 51732 (simple-var-p 51654 . 51732)) (51734 51918 (simple-var1 51734 - . 51918)) (51920 52027 (stray-of-type-error 51920 . 52027)) (52029 52463 (type-spec? 52029 . 52463)) -(52465 52531 (until-clause 52465 . 52531)) (52533 53114 (using-other-var 52533 . 53114)) (53116 53310 -(variable-clause* 53116 . 53310)) (53312 53416 (while-clause 53312 . 53416)) (53418 53597 (with 53418 - . 53597)) (53599 54044 (with-accumulators 53599 . 54044)) (54046 54296 (with-binding-forms 54046 . -54296)) (54298 55529 (with-clause 54298 . 55529)) (55531 55790 (with-iterator-forms 55531 . 55790)) ( -55792 56875 (with-list-accumulator 55792 . 56875)) (56877 57314 (with-loop-context 56877 . 57314)) ( -57316 58554 (with-numeric-accumulator 57316 . 58554)) (58556 58973 (with-temporaries 58556 . 58973)) ( -58975 59255 (zero 58975 . 59255)) (59257 59390 (loop 59257 . 59390))))) + (il:filemap (nil (6825 6910 (%keyword 6825 . 6910)) (6912 7095 (%list 6912 . 7095)) (7097 8354 ( +accumulate-in-list 7097 . 8354)) (8356 10036 (accumulation-clause 8356 . 10036)) (10038 10272 ( +accumulator-kind 10038 . 10272)) (10274 12163 (accumulator-spec 10274 . 12163)) (12165 12634 ( +along-with 12165 . 12634)) (12636 13128 (always-never-thereis-clause 12636 . 13128)) (13130 13489 ( +ambiguous-loop-result-error 13130 . 13489)) (13491 13706 (append-context 13491 . 13706)) (13785 14162 +(bindings 13785 . 14162)) (14164 14504 (bound-variables 14164 . 14504)) (14506 14596 (by-step-fun +14506 . 14596)) (14598 14704 (car-type 14598 . 14704)) (14706 14812 (cdr-type 14706 . 14812)) (14814 +15211 (check-multiple-bindings 14814 . 15211)) (15213 15433 (cl-external-p 15213 . 15433)) (15435 +15564 (clause* 15435 . 15564)) (15566 15966 (clause1 15566 . 15966)) (15968 16125 (compound-forms* +15968 . 16125)) (16127 16251 (compound-forms+ 16127 . 16251)) (16253 17511 (conditional-clause 16253 + . 17511)) (17513 18224 (constant-bindings 17513 . 18224)) (18226 18597 (constant-function-p 18226 . +18597)) (18599 18793 (constant-vector 18599 . 18793)) (18795 18886 (constant-vector-p 18795 . 18886)) +(18888 19080 (d-var-spec-p 18888 . 19080)) (19082 19312 (d-var-spec1 19082 . 19312)) (19314 19639 ( +d-var-type-spec 19314 . 19639)) (19641 20201 (declarations 19641 . 20201)) (20203 20313 ( +default-binding 20203 . 20313)) (20315 20928 (default-bindings 20315 . 20928)) (20930 21391 ( +default-type 20930 . 21391)) (21393 21914 (default-value 21393 . 21914)) (21916 23406 ( +destructuring-multiple-value-bind 21916 . 23406)) (23408 24693 (destructuring-multiple-value-setq +23408 . 24693)) (24695 25222 (dispatch-for-as-subclause 24695 . 25222)) (25224 25293 (do-clause 25224 + . 25293)) (25295 25471 (empty-p 25295 . 25471)) (25473 25747 (enumerate 25473 . 25747)) (25749 27475 +(extended-loop 25749 . 27475)) (27477 27648 (fill-in 27477 . 27648)) (27650 27727 (finally-clause +27650 . 27727)) (27729 27847 (for 27729 . 27847)) (27849 29205 (for-as-across-subclause 27849 . 29205) +) (29207 30129 (for-as-arithmetic-possible-prepositions 29207 . 30129)) (30131 30847 ( +for-as-arithmetic-step-and-test-functions 30131 . 30847)) (30849 32794 (for-as-arithmetic-subclause +30849 . 32794)) (32796 33246 (for-as-being-subclause 32796 . 33246)) (33248 34464 (for-as-clause 33248 + . 34464)) (34466 35994 (for-as-equals-then-subclause 34466 . 35994)) (35996 36274 (for-as-fill-in +35996 . 36274)) (36276 38242 (for-as-hash-subclause 36276 . 38242)) (38244 38490 ( +for-as-in-list-subclause 38244 . 38490)) (38492 39985 (for-as-on-list-subclause 38492 . 39985)) (39987 + 41689 (for-as-package-subclause 39987 . 41689)) (41691 41922 (for-as-parallel-p 41691 . 41922)) ( +41924 42072 (form-or-it 41924 . 42072)) (42074 42193 (form1 42074 . 42193)) (42195 42295 ( +gensym-ignorable 42195 . 42295)) (42297 42408 (globally-special-p 42297 . 42408)) (42410 42589 ( +hash-d-var-spec 42410 . 42589)) (42591 42672 (initially-clause 42591 . 42672)) (42674 42831 ( +invalid-accumulator-combination-error 42674 . 42831)) (42833 43450 (keyword1 42833 . 43450)) (43452 +43922 (keyword? 43452 . 43922)) (43924 44033 (let-form 43924 . 44033)) (44035 44189 (loop-error 44035 + . 44189)) (44191 44382 (loop-finish-test-forms 44191 . 44382)) (44384 44536 (loop-warn 44384 . 44536) +) (44538 44742 (lp 44538 . 44742)) (44744 45181 (main-clause* 44744 . 45181)) (45183 45279 (mapappend +45183 . 45279)) (45281 45811 (multiple-value-list-argument-form 45281 . 45811)) (45813 46206 ( +multiple-value-list-form-p 45813 . 46206)) (46208 46546 (name-clause? 46208 . 46546)) (46548 46827 ( +one 46548 . 46827)) (46829 48474 (ordinary-bindings 46829 . 48474)) (48476 48693 (preposition1 48476 + . 48693)) (48695 48896 (preposition? 48695 . 48896)) (48898 49058 (psetq-forms 48898 . 49058)) (49060 + 49240 (quoted-form-p 49060 . 49240)) (49242 49497 (quoted-object 49242 . 49497)) (49499 50303 ( +reduce-redundant-code 49499 . 50303)) (50305 50534 (repeat-clause 50305 . 50534)) (50536 50626 ( +return-clause 50536 . 50626)) (50628 51463 (selectable-clause 50628 . 51463)) (51465 51616 ( +simple-loop 51465 . 51616)) (51618 51696 (simple-var-p 51618 . 51696)) (51698 51882 (simple-var1 51698 + . 51882)) (51884 51991 (stray-of-type-error 51884 . 51991)) (51993 52278 (cl::symbol-macrolet 51993 + . 52278)) (52280 52714 (type-spec? 52280 . 52714)) (52716 52782 (until-clause 52716 . 52782)) (52784 +53365 (using-other-var 52784 . 53365)) (53367 53561 (variable-clause* 53367 . 53561)) (53563 53667 ( +while-clause 53563 . 53667)) (53669 53848 (with 53669 . 53848)) (53850 54295 (with-accumulators 53850 + . 54295)) (54297 54547 (with-binding-forms 54297 . 54547)) (54549 55780 (with-clause 54549 . 55780)) +(55782 56041 (with-iterator-forms 55782 . 56041)) (56043 57190 (with-list-accumulator 56043 . 57190)) +(57192 57629 (with-loop-context 57192 . 57629)) (57631 58869 (with-numeric-accumulator 57631 . 58869)) + (58871 59392 (with-temporaries 58871 . 59392)) (59394 59674 (zero 59394 . 59674)) (59676 59809 (loop +59676 . 59809))))) il:stop diff --git a/sources/XCL-LOOP.DFASL b/sources/XCL-LOOP.DFASL index b2bb4c40c6fa2922f23c05bac340665b2660a055..ff0bfa60ab391800c765d0aa4ebe5ca9eb027ec3 100644 GIT binary patch delta 9155 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 delta 8900 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.;3| 84829 +(DEFINE-FILE-INFO PACKAGE (DEFPACKAGE "COMPILER" (USE "LISP" "XCL")) READTABLE "XCL" BASE 10) - il:|changes| il:|to:| (il:functions alpha-form) +(il:filecreated "10-Apr-2024 19:21:49" il:|{DSK}larry>il>medley>sources>XCLC-ALPHA.;2| 84407 - il:|previous| il:|date:| "18-May-90 01:20:54" il:|{PELE:MV:ENVOS}SOURCES>XCLC-ALPHA.;2| -) + :edit-by "lmm" + :changes-to (il:functions alpha-compiler-let alpha-flet alpha-lambda alpha-let alpha-let* + alpha-macrolet alpha-progn alpha-setq alpha-tagbody completely-expand + expand-openlambda-call print-node) + + :previous-date "21-Mar-2024 10:27:05" il:|{DSK}larry>il>medley>sources>XCLC-ALPHA.;1|) -; Copyright (c) 1986, 1987, 1988, 1990 by Venue & Xerox Corporation. All rights reserved. (il:prettycomprint il:xclc-alphacoms) -(il:rpaqq il:xclc-alphacoms +(il:rpaqq il:xclc-alphacoms ( (il:* il:|;;;| "Alphatization") @@ -60,17 +62,17 @@ (il:specvars il:specvars) (il:localvars il:localvars) (il:globalvars il:globalvars)) - (declare (special *new-specials* *new-globals* *new-inlines* *new-notinlines* - il:specvars il:localvars il:globalvars)) - (process-declarations ,declarations) + (declare (special *new-specials* *new-globals* *new-inlines* *new-notinlines* il:specvars + il:localvars il:globalvars)) + (process-declarations ,declarations) ,@body)) -(defun process-declarations (decls) +(defun process-declarations (decls) (il:* il:\; "Edited 21-Mar-2024 10:26 by lmm") (il:* il:|;;;| "Step through the given declarations, storing the information found therein into various special variables.") (declare (special *new-specials* *new-globals* *new-inlines* *new-notinlines* il:specvars - il:localvars il:globalvars)) + il:localvars il:globalvars)) (flet ((check-var-1 (var) (cond ((symbolp var) @@ -124,7 +126,7 @@ "Illegal GLOBALVARS declaration: ~S" spec ))) ((type ftype function) (il:* il:\; - "We don't handle type declarations yet.") + "We don't handle type declarations yet.") nil) ((inline) (dolist (var (cdr spec)) (check-var var) @@ -132,13 +134,13 @@ ((notinline) (dolist (var (cdr spec)) (check-var var) (push var *new-notinlines*))) - ((ignore optimize) (il:* il:\; - "We don't handle IGNORE or OPTIMIZE declarations yet.") + ((ignore optimize ignorable) (il:* il:\; + "We don't handle IGNORE or OPTIMIZE declarations yet.") nil) ((declaration) (il:* il:\; "Add new declaration specifiers right away so that they can be used in later declarations in the same cluster. It's a picky point, but who cares?") (env-add-decls *environment* (cdr spec))) ((il:usedfree) (il:* il:\; - "Ignored Interlisp declarations") + "Ignored Interlisp declarations") nil) (otherwise (unless (or (eq (car spec) t) @@ -181,7 +183,7 @@ (setq il:globalvars (union il:globalvars (cdr spec))) (cerror "Ignore it" "Illegal GLOBALVARS declaration: ~S" spec))) ((il:usedfree) (il:* il:\; - "Ignored Interlisp declarations") + "Ignored Interlisp declarations") nil) (otherwise (return-from process-il-declarations nil)))))) @@ -243,7 +245,7 @@ (defun alpha-argument-form (form) (let ((*context* *argument-context*)) - (alpha-form form))) + (alpha-form form))) (defun alpha-atom (form) @@ -252,7 +254,7 @@ (if (or (not (symbolp form)) (eq form t) (eq form nil)) - (alpha-literal form) + (alpha-literal form) (resolve-variable-reference *environment* form))) (defun alpha-block (name body) @@ -260,13 +262,13 @@ (*block-stack* (cons (cons name new-block) *block-stack*))) (setf (block-stmt new-block) - (alpha-progn body)) + (alpha-progn body)) new-block)) (defun alpha-catch (tag forms) - (make-catch :tag (alpha-argument-form tag) + (make-catch :tag (alpha-argument-form tag) :stmt - (alpha-progn forms))) + (alpha-progn forms))) (defun alpha-combination (fn args) (declare (special il:nlama il:nlaml)) @@ -277,7 +279,7 @@ ((and (eq fn 'funcall) (not (env-inline-disallowed *environment* fn))) (multiple-value-bind (real-fn not-inline?) - (alpha-functional-form (first args)) + (alpha-functional-form (first args)) (make-call :fn real-fn :args (mapcar #'alpha-argument-form (rest args)) :not-inline not-inline?))) @@ -286,13 +288,13 @@ ((and (consp fn) (eq (first fn) 'il:openlambda)) - (alpha-form (expand-openlambda-call fn args))) + (alpha-form (expand-openlambda-call fn args))) (il:* il:|;;| "Lexical functions and non-symbol functions can't be NLambda's.") ((or (not (symbolp fn)) (env-fboundp *environment* fn)) - (make-call :fn (alpha-function fn *context*) + (make-call :fn (alpha-function fn *context*) :args (mapcar #'alpha-argument-form args) :not-inline @@ -300,21 +302,21 @@ (env-inline-disallowed *environment* fn)))) ((or (eq 3 (il:argtype fn)) (member fn il:nlama :test 'eq)) (il:* il:\; - "It's an NLambda no-spread. Funcall it on a single literal argument, the CDR of the form.") - (make-call :fn (alpha-function fn) + "It's an NLambda no-spread. Funcall it on a single literal argument, the CDR of the form.") + (make-call :fn (alpha-function fn) :args - (alpha-literal args) + (alpha-literal args) :not-inline (env-inline-disallowed *environment* fn))) ((or (eq 1 (il:argtype fn)) (member fn il:nlaml :test 'eq)) (il:* il:\; - "It's an NLambda spread. Funcall it on the quoted versions of its arguments.") - (make-call :fn (alpha-function fn) + "It's an NLambda spread. Funcall it on the quoted versions of its arguments.") + (make-call :fn (alpha-function fn) :args (mapcar #'alpha-literal args) :not-inline (env-inline-disallowed *environment* fn))) - (t (make-call :fn (alpha-function fn *context*) + (t (make-call :fn (alpha-function fn *context*) :args (mapcar #'alpha-argument-form args) :not-inline @@ -324,15 +326,15 @@ (let ((vars nil) (vals nil)) (il:for binding il:in bindings il:do (cond - ((consp binding) - (push (car binding) - vars) - (push (eval (cadr binding)) - vals)) - (t (push binding vars) - (push nil vals)))) + ((consp binding) + (push (car binding) + vars) + (push (eval (cadr binding)) + vals)) + (t (push binding vars) + (push nil vals)))) (progv vars vals - (alpha-progn body)))) + (alpha-progn body)))) (defun alpha-eval-when (times forms) @@ -343,7 +345,7 @@ (mapc #'eval forms)) (if (or (member 'load times :test #'eq) (member 'il:load times :test #'eq)) - (alpha-progn forms) + (alpha-progn forms) *literally-nil*)) (defun alpha-flet (bindings body) @@ -355,14 +357,14 @@ (multiple-value-bind (forms decls) (parse-body body *environment* nil) - (binding-contour + (binding-contour decls - (update-environment *environment*) + (update-environment *environment*) (let ((new-labels (make-labels)) names) (setq names (with-collection (setf (labels-funs new-labels) (mapcar #'(lambda (binding) - (unless (check-arg (car binding)) + (unless (check-arg (car binding)) (setq binding (cons '%lose% (cdr binding)) )) @@ -372,13 +374,12 @@ (symbol-name (car binding)) :scope :lexical :kind :function :binder new-labels) - (alpha-lambda - (binding-to-lambda binding) + (alpha-lambda + (binding-to-lambda binding) :name - (il:* il:|;;| -  - "Really want name to be \"Foo in Bar\"") + (il:* il:|;;| + "Really want name to be \"Foo in Bar\"") (symbol-name (car binding))))) bindings)))) @@ -390,7 +391,7 @@ (il:* il:|;;| "Now we can alphatize the body.") - (setf (labels-body new-labels (alpha-progn forms))) + (setf (labels-body new-labels (alpha-progn forms))) new-labels))))) (defun alpha-form (form) @@ -401,77 +402,77 @@ (il:* il:|;;;| "NOTE NOTE NOTE::: If anything is added to this CASE statement, be sure to add it also to the list in COMPLETELY-EXPAND.") (if (atom form) - (alpha-atom form) + (alpha-atom form) (case (car form) - ((block) (alpha-block (second form) + ((block) (alpha-block (second form) (cddr form))) - ((catch) (alpha-catch (second form) + ((catch) (alpha-catch (second form) (cddr form))) - ((compiler-let) (alpha-compiler-let (second form) + ((compiler-let) (alpha-compiler-let (second form) (cddr form))) ((declare) - (or (process-il-declarations (cdr form)) + (or (process-il-declarations (cdr form)) (cerror "Replace the declaration with NIL" "DECLARE found in executable position: ~S" form)) *literally-nil*) - ((eval-when) (alpha-eval-when (second form) + ((eval-when) (alpha-eval-when (second form) (cddr form))) - ((flet) (alpha-flet (second form) + ((flet) (alpha-flet (second form) (cddr form))) - ((il:function) (alpha-il-function (second form) + ((il:function) (alpha-il-function (second form) (third form))) - ((function) (alpha-function (second form))) - ((go) (alpha-go (second form))) - ((if) (alpha-if (second form) + ((function) (alpha-function (second form))) + ((go) (alpha-go (second form))) + ((if) (alpha-if (second form) (third form) (fourth form))) ((labels) (il:* il:\; - "Rely on the macro expansion for now.") - (return-from alpha-form (alpha-labels (second form) + "Rely on the macro expansion for now.") + (return-from alpha-form (alpha-labels (second form) (cddr form))) - (return-from alpha-form (alpha-form (optimize-and-macroexpand-1 form)))) - ((let) (alpha-let (second form) + (return-from alpha-form (alpha-form (optimize-and-macroexpand-1 form)))) + ((let) (alpha-let (second form) (cddr form))) - ((let*) (alpha-let* (second form) + ((let*) (alpha-let* (second form) (cddr form))) - ((macrolet si::%macrolet) (alpha-macrolet (second form) + ((macrolet si::%macrolet) (alpha-macrolet (second form) (cddr form))) - ((multiple-value-call) (alpha-mv-call (second form) + ((multiple-value-call) (alpha-mv-call (second form) (cddr form))) - ((multiple-value-prog1) (alpha-mv-prog1 (cdr form))) - ((progn) (alpha-progn (cdr form))) + ((multiple-value-prog1) (alpha-mv-prog1 (cdr form))) + ((progn) (alpha-progn (cdr form))) ((progv) (il:* il:\; - "Rely on the macro expansion for now.") + "Rely on the macro expansion for now.") (return-from alpha-form (destructuring-bind (vars-expr vals-expr . body) (cdr form) - (alpha-form `(il:\\do.progv ,vars-expr ,vals-expr + (alpha-form `(il:\\do.progv ,vars-expr ,vals-expr #'(lambda nil ,@body))))) - (alpha-progv (second form) + (alpha-progv (second form) (third form) (cdddr form))) - ((quote) (alpha-literal (second form))) - ((return-from) (alpha-return-from (second form) + ((quote) (alpha-literal (second form))) + ((return-from) (alpha-return-from (second form) (third form))) - ((setq il:setq) (alpha-setq (car form) + ((setq il:setq) (alpha-setq (car form) (rest form))) - ((tagbody) (alpha-tagbody (cdr form))) + ((tagbody) (alpha-tagbody (cdr form))) ((the) (il:* il:\; - "Ignore the THE construct for now.") - (alpha-form (third form))) - ((throw) (alpha-throw (second form) + "Ignore the THE construct for now.") + (alpha-form (third form))) + ((throw) (alpha-throw (second form) (third form))) - ((unwind-protect) (alpha-unwind-protect (second form) + ((unwind-protect) (alpha-unwind-protect (second form) (cddr form))) (otherwise (multiple-value-bind (new-form changed-p) (optimize-and-macroexpand-1 form) (if (null changed-p) - (alpha-combination (car form) + (alpha-combination (car form) (cdr form)) - (alpha-form new-form))))))) + (alpha-form new-form))))))) (defun alpha-function (form &optional (context (or (context-applied-context *context*) - *null-context*))) + *null-context*))) (il:* il:|;;;| "If it's a symbol, then turn this into either the FLET/LABELS-bound VARIABLE structure or a structure for the global symbol. Otherwise, it must be either a LAMBDA-form or OPCODES-form and is treated as such. Note that the internal representation of programs treats LAMBDA as a value-producing special form.") @@ -500,19 +501,19 @@ (when (not (null *current-block*)) (let ((lookup (assoc form (block-decl-fn-name-map *current-block*)))) (when (not (null lookup)) (il:* il:\; - "This function is to be renamed.") + "This function is to be renamed.") (setq form (cdr lookup))))) (check-for-unknown-function form) (values (make-reference-to-variable :name form :scope :global :kind :function) (env-inline-disallowed *environment* form)))))) (t (case (car form) - ((lambda il:lambda il:nlambda il:openlambda) (alpha-lambda form :context context)) + ((lambda il:lambda il:nlambda il:openlambda) (alpha-lambda form :context context)) ((il:opcodes :opcodes) (make-opcodes :bytes (cdr form))) (otherwise (cerror "Use (LAMBDA () NIL) instead" "The form ~S, appearing in a functional context, is neither a symbol nor a LAMBDA-form" form) - (alpha-lambda '(lambda nil nil) + (alpha-lambda '(lambda nil nil) :context context)))))) (defun alpha-functional-form (form) @@ -520,9 +521,9 @@ (or (eq 'quote (first form)) (eq 'il:function (first form))) (symbolp (second form))) - (alpha-function (second form)) + (alpha-function (second form)) (let ((*context* (make-context :values-used 1 :applied-context *context*))) - (alpha-form form)))) + (alpha-form form)))) (defun alpha-go (tag) (let ((dest (assoc tag *tagbody-stack*))) @@ -543,11 +544,11 @@ (defun alpha-if (pred-form then-form else-form) (make-if :pred (let ((*context* *predicate-context*)) - (alpha-form pred-form)) + (alpha-form pred-form)) :then - (alpha-form then-form) + (alpha-form then-form) :else - (alpha-form else-form))) + (alpha-form else-form))) (defun alpha-il-function (fn close-p-form) @@ -561,21 +562,21 @@ (not (null *current-block*))) (let ((lookup (assoc fn (block-decl-fn-name-map *current-block*)))) (when (not (null lookup)) (il:* il:\; - "This function is to be renamed.") + "This function is to be renamed.") (setq fn (cdr lookup))))) (if (null close-p-form) (cond ((and (symbolp fn) (not (env-fboundp *environment* fn))) (check-for-unknown-function fn) - (alpha-literal fn)) - (t (alpha-function fn))) + (alpha-literal fn)) + (t (alpha-function fn))) (make-call :fn (make-reference-to-variable :name 'il:function :scope :global :kind :function) :args (list (if (symbolp fn) - (alpha-literal fn) - (alpha-function fn)) - (alpha-literal close-p-form))))) + (alpha-literal fn) + (alpha-function fn)) + (alpha-literal close-p-form))))) (defun alpha-labels (bindings body) @@ -584,7 +585,7 @@ (let* ((*environment* (make-child-env *environment*)) (labels (make-labels)) (structs (mapcar #'(lambda (binding) - (unless (check-arg (car binding)) + (unless (check-arg (car binding)) (setq binding (cons '%lose% (cdr binding)))) (let ((struct (make-variable :name (symbol-name (car binding)) :scope :lexical :kind :function :binder @@ -595,30 +596,30 @@ bindings))) (multiple-value-bind (forms decls) (parse-body body *environment* nil) - (binding-contour decls (update-environment *environment*) + (binding-contour decls (update-environment *environment*) (setf (labels-funs labels) (mapcar #'(lambda (binding struct) - (cons struct (alpha-lambda (binding-to-lambda binding) + (cons struct (alpha-lambda (binding-to-lambda binding) :name (il:* il:|;;| - "Really want name to be \"Foo in Bar\"") + "Really want name to be \"Foo in Bar\"") (symbol-name (car binding))))) bindings structs)) (setf (labels-body labels) - (alpha-progn forms)))) + (alpha-progn forms)))) labels)) (defun alpha-lambda (original-form &key ((:context *context*) - *null-context*) - name) + *null-context*) + name) (il:* il:|;;| "Check for something other than a CL:LAMBDA and coerce if necessary.") (multiple-value-bind (form arg-type) - (convert-to-cl-lambda original-form) + (convert-to-cl-lambda original-form) (il:* il:|;;| "Crack the argument list, applying any declarations that might be present.") @@ -627,21 +628,21 @@ (*environment* (make-child-env *environment*))) (multiple-value-bind (code decls) (parse-body body *environment* t) - (binding-contour decls (il:* il:\; "Process the declarations") - (update-environment *environment*) + (binding-contour decls (il:* il:\; "Process the declarations") + (update-environment *environment*) (let* ((node (make-lambda :name name :arg-type arg-type)) - (auxes (alpha-lambda-list arg-list node)) - (body-node (alpha-progn code))) + (auxes (alpha-lambda-list arg-list node)) + (body-node (alpha-progn code))) (il:* il:|;;| "AUXES is now the list of values representing the &aux variables IN REVERSE ORDER. We must bind them around the body one-by-one and then wrap that in the lambda node we've already created.") (il:for aux il:in auxes il:do (let ((binder (make-lambda :required (list (car aux)) - :body body-node))) - (setf (variable-binder (car aux)) - binder) - (setq body-node (make-call :fn binder :args - (list (cdr aux)))))) + :body body-node))) + (setf (variable-binder (car aux)) + binder) + (setq body-node (make-call :fn binder :args + (list (cdr aux)))))) (setf (lambda-body node) body-node) @@ -668,13 +669,13 @@ (setq state :rest) (cerror "Ignore it." "Misplaced &rest in lambda-list"))) ((&ignore-rest) (il:* il:\; - "Internal keyword used in translation of Interlisp spread functions.") + "Internal keyword used in translation of Interlisp spread functions.") (assert (eq state :optional) nil "BUG: Misplaced &IGNORE-REST keyword.") (setf (lambda-rest binder) (make-variable :binder binder)) (return) (il:* il:\; - "Nothing is supposed to follow an &IGNORE-REST") + "Nothing is supposed to follow an &IGNORE-REST") ) ((&key) (if (and (il:neq state :aux) (il:neq state :key)) @@ -690,38 +691,38 @@ (cerror "Ignore it." "Misplaced &aux in lambda-list."))) (otherwise (ecase state - ((:required) (when (check-arg arg) - (push (bind-parameter arg binder *environment*) + ((:required) (when (check-arg arg) + (push (bind-parameter arg binder *environment*) required))) ((:optional) (if (atom arg) - (when (check-arg arg) - (push (list (bind-parameter arg binder *environment*) + (when (check-arg arg) + (push (list (bind-parameter arg binder *environment*) *literally-nil*) optional)) (destructuring-bind (var &optional (init-form nil) (svar nil sv-given)) arg - (when (check-arg var) - (let ((init-struct (alpha-argument-form init-form))) - (push `(,(bind-parameter var binder *environment*) + (when (check-arg var) + (let ((init-struct (alpha-argument-form init-form))) + (push `(,(bind-parameter var binder *environment*) ,init-struct - ,@(and sv-given (check-arg svar) - (list (bind-parameter svar binder *environment*))) + ,@(and sv-given (check-arg svar) + (list (bind-parameter svar binder *environment*))) ) optional)))))) - ((:rest) (when (check-arg arg) + ((:rest) (when (check-arg arg) (setf (lambda-rest binder) - (bind-parameter arg binder *environment*)) + (bind-parameter arg binder *environment*)) (setq state :after-rest))) ((:after-rest) (cerror "Ignore it." "Stray argument ~S found after &rest var.")) ((:key) (if (atom arg) - (when (check-arg arg) + (when (check-arg arg) (push (list (intern (string arg) "KEYWORD") - (bind-parameter arg binder *environment*) + (bind-parameter arg binder *environment*) *literally-nil*) keyword)) (destructuring-bind @@ -731,22 +732,22 @@ arg (cond ((atom key&var) - (when (check-arg key&var) + (when (check-arg key&var) (il:* il:|;;| -"This is not the real legality test; that's below. This just makes sure that the intern will work.") + "This is not the real legality test; that's below. This just makes sure that the intern will work.") (setq key (intern (string key&var) "KEYWORD"))) (setq var key&var)) (t (setq key (first key&var)) (setq var (second key&var)))) - (when (check-arg var) - (let ((init-struct (alpha-argument-form init-form))) - (push `(,key ,(bind-parameter var binder *environment*) + (when (check-arg var) + (let ((init-struct (alpha-argument-form init-form))) + (push `(,key ,(bind-parameter var binder *environment*) ,init-struct - ,@(and sv-given (check-arg svar) - (list (bind-parameter svar binder + ,@(and sv-given (check-arg svar) + (list (bind-parameter svar binder *environment*)))) keyword)))))) ((:aux) (let (var val) @@ -756,9 +757,9 @@ (setq val nil)) (t (setq var (first arg)) (setq val (second arg)))) - (when (check-arg var) - (let ((tree (alpha-argument-form val))) - (push (cons (bind-parameter var binder *environment*) + (when (check-arg var) + (let ((tree (alpha-argument-form val))) + (push (cons (bind-parameter var binder *environment*) tree) aux))))))))) (setf (lambda-required binder) @@ -775,11 +776,11 @@ (multiple-value-bind (body decls) (parse-body body *environment* nil) - (binding-contour decls (let ((*environment* (make-child-env *environment*))) + (binding-contour decls (let ((*environment* (make-child-env *environment*))) (il:* il:|;;| "The standard is losing and wants us to install the environment before alphatizing the init-forms so that SPECIAL declarations will have bigger scope. Ugh.") - (update-environment *environment*) + (update-environment *environment*) (let ((vars nil) (vals nil) (new-lambda (make-lambda))) @@ -788,30 +789,27 @@ (il:for binding il:in bindings il:do (cond - ((consp binding) - (push (first binding) - vars) - (push (alpha-argument-form (second - binding - )) - vals)) - (t (push binding vars) - (push *literally-nil* vals)))) + ((consp binding) + (push (first binding) + vars) + (push (alpha-argument-form (second binding)) + vals)) + (t (push binding vars) + (push *literally-nil* vals)))) (il:* il:|;;| "Bind all of the variables") (setf (lambda-required new-lambda) (il:for var il:in (nreverse vars) - il:collect (bind-parameter - (if (check-arg var) - var - '%lose%) - new-lambda *environment*))) + il:collect (bind-parameter (if (check-arg var) + var + '%lose%) + new-lambda *environment*))) (il:* il:|;;| "Alphatize the body") (setf (lambda-body new-lambda) - (alpha-progn body)) + (alpha-progn body)) (make-call :fn new-lambda :args (nreverse vals))))))) (defun alpha-let* (bindings body) @@ -821,39 +819,39 @@ (multiple-value-bind (body decls) (parse-body body *environment* nil) - (binding-contour + (binding-contour decls (let ((*environment* (make-child-env *environment*)) (binding-list nil)) - (update-environment *environment*) + (update-environment *environment*) (il:* il:|;;| "First, alphatize each of the init-forms in the correct environment.") (il:for binding il:in bindings il:do (if (consp binding) - (let ((init-struct (alpha-argument-form (second binding)))) - (push (cons (bind-parameter (if (check-arg (first binding)) - (first binding) - '%lose%) - nil *environment*) - init-struct) - binding-list)) - (push (cons (bind-parameter (if (check-arg binding) - binding - '%lose%) - nil *environment*) - *literally-nil*) - binding-list))) + (let ((init-struct (alpha-argument-form (second binding)))) + (push (cons (bind-parameter (if (check-arg (first binding)) + (first binding) + '%lose%) + nil *environment*) + init-struct) + binding-list)) + (push (cons (bind-parameter (if (check-arg binding) + binding + '%lose%) + nil *environment*) + *literally-nil*) + binding-list))) (il:* il:|;;| -"BINDING-LIST is now in reverse order, so we can construct the nested lambdas from the inside out.") + "BINDING-LIST is now in reverse order, so we can construct the nested lambdas from the inside out.") - (il:bind (body-struct il:_ (alpha-progn body)) il:for pair il:in binding-list + (il:bind (body-struct il:_ (alpha-progn body)) il:for pair il:in binding-list il:do (let ((binder (make-lambda :required (list (car pair)) - :body body-struct))) - (setq body-struct (make-call :fn binder :args (list (cdr pair)))) - (setf (variable-binder (car pair)) - binder)) il:finally (return body-struct)))))) + :body body-struct))) + (setq body-struct (make-call :fn binder :args (list (cdr pair)))) + (setf (variable-binder (car pair)) + binder)) il:finally (return body-struct)))))) (defun alpha-literal (value) @@ -883,30 +881,29 @@ (let ((new-env (make-child-env *environment*))) (il:for macro il:in bindings il:do (env-bind-function new-env (car macro) - :macro - (crack-defmacro (cons 'defmacro macro)) - )) + :macro + (crack-defmacro (cons 'defmacro macro)))) (let ((*environment* new-env)) (multiple-value-bind (forms decls) (parse-body body *environment* nil) - (binding-contour decls (update-environment *environment*) - (alpha-progn forms)))))) + (binding-contour decls (update-environment *environment*) + (alpha-progn forms)))))) (defun alpha-mv-call (fn-form arg-forms) (let (values-used) (multiple-value-bind (fn not-inline?) - (alpha-functional-form fn-form) + (alpha-functional-form fn-form) (cond ((and (null (cdr arg-forms)) (lambda-p fn) (not (or (lambda-optional fn) (lambda-rest fn) (lambda-keyword fn)))) (il:* il:\; - "In this very common case, we can tell how many values are expected.") + "In this very common case, we can tell how many values are expected.") (setq values-used (length (lambda-required fn)))) (t (setq values-used :unknown))) (if (null arg-forms) (il:* il:\; - "This is silly, but we'd better handle it correctly.") + "This is silly, but we'd better handle it correctly.") (make-call :fn fn :args nil :not-inline not-inline?) (make-mv-call :fn fn :arg-exprs (let ((*context* (make-context :values-used values-used))) @@ -917,32 +914,32 @@ (let ((vals-used (context-values-used *context*))) (cond ((null (cdr forms)) - (alpha-form (car forms))) + (alpha-form (car forms))) ((and (numberp vals-used) (< vals-used 2)) (il:* il:\; - "The multiple values aren't wanted. Make this a normal PROG1.") - (alpha-form (cons 'prog1 forms))) - (t (make-mv-prog1 :stmts (cons (alpha-form (first forms)) + "The multiple values aren't wanted. Make this a normal PROG1.") + (alpha-form (cons 'prog1 forms))) + (t (make-mv-prog1 :stmts (cons (alpha-form (first forms)) (let ((*context* *effect-context*)) (mapcar #'alpha-form (rest forms))))))))) (defun alpha-progn (forms) (if (null (cdr forms)) - (alpha-form (car forms)) + (alpha-form (car forms)) (make-progn :stmts (let ((old-context *context*) (*context* *effect-context*)) (il:for tail il:on forms il:collect (if (null (cdr tail)) - (let ((*context* old-context)) - (alpha-form (car tail))) - (alpha-form (car tail)))))))) + (let ((*context* old-context)) + (alpha-form (car tail))) + (alpha-form (car tail)))))))) (defun alpha-progv (syms-expr vals-expr body-forms) - (make-progv :syms-expr (alpha-argument-form syms-expr) + (make-progv :syms-expr (alpha-argument-form syms-expr) :vals-expr - (alpha-argument-form vals-expr) + (alpha-argument-form vals-expr) :stmt - (alpha-progn body-forms))) + (alpha-progn body-forms))) (defun alpha-return-from (name form) (let ((dest (assoc name *block-stack*))) @@ -951,7 +948,7 @@ ((null *block-stack*) (cerror "Treat (RETURN-FROM name value-form) as simply value-form" "~S, found in a RETURN-FROM, is not the name of any enclosing BLOCK" name) - (return-from alpha-return-from (alpha-form form))) + (return-from alpha-return-from (alpha-form form))) (t (cerror "Use the name ~*~S instead" "~S, found in a RETURN-FROM, is not the name of any enclosing BLOCK" name (caar *block-stack*)) @@ -959,18 +956,18 @@ (make-return :block (cdr dest) :value (let ((*context* (block-context (cdr dest)))) - (alpha-form form))))) + (alpha-form form))))) (defun alpha-setq (kind forms) (let ((setqs (il:for tail il:on forms il:by (cddr tail) il:collect (when (and (eq kind 'setq) - (null (cdr tail))) - (cerror "Add an extra NIL on the end of the form" - "Odd number of forms given to SETQ.")) + (null (cdr tail))) + (cerror "Add an extra NIL on the end of the form" + "Odd number of forms given to SETQ.")) (make-setq :var (resolve-variable-reference *environment* (car tail) t) :value - (alpha-argument-form (cadr tail)))))) + (alpha-argument-form (cadr tail)))))) (if (null (cdr setqs)) (car setqs) (make-progn :stmts setqs)))) @@ -987,11 +984,10 @@ (il:* il:|;;| "Make a first pass down the body to find all of the tags") (il:for form il:in body il:do (when (atom form) - (push (cons form tagbody) - *tagbody-stack*))) + (push (cons form tagbody) + *tagbody-stack*))) - (il:* il:|;;| - "On the second pass, put together the segments and alphatize all of the forms") + (il:* il:|;;| "On the second pass, put together the segments and alphatize all of the forms") (do ((*context* *effect-context*) (segment-list nil)) @@ -1009,25 +1005,25 @@ (atom (car body))) (setf (segment-stmts segment) (nreverse form-list))) - (push (alpha-form (pop body)) + (push (alpha-form (pop body)) form-list)) (push segment segment-list))) tagbody)) (defun alpha-throw (tag value) - (make-throw :tag (alpha-argument-form tag) + (make-throw :tag (alpha-argument-form tag) :value (let ((*context* *null-context*)) - (alpha-form value)))) + (alpha-form value)))) (defun alpha-unwind-protect (body cleanups) - (make-unwind-protect :stmt (alpha-lambda (let ((cleanup-var (gensym))) + (make-unwind-protect :stmt (alpha-lambda (let ((cleanup-var (gensym))) `(lambda (,cleanup-var) (multiple-value-prog1 ,body (funcall ,cleanup-var)))) :context *context* :name 'si::*unwind-protect*) :cleanup - (alpha-lambda `(lambda nil ,@cleanups) + (alpha-lambda `(lambda nil ,@cleanups) :context *effect-context* :name "Clean-up forms"))) (defun convert-to-cl-lambda (form) @@ -1061,7 +1057,7 @@ ((il:nlambda) (if (listp (second form)) (il:* il:|;;| - "NLAMBDA spread. Just like the LAMBDA-spread case but we have a different ARG-TYPE.") + "NLAMBDA spread. Just like the LAMBDA-spread case but we have a different ARG-TYPE.") (values `(lambda (&optional ,@(second form) &ignore-rest) @@ -1069,7 +1065,7 @@ 1) (il:* il:|;;| - "NLAMBDA no-spread. We take exactly one argument and are otherwise entirely normal.") + "NLAMBDA no-spread. We take exactly one argument and are otherwise entirely normal.") (values `(lambda (,(second form)) ,@(cddr form)) @@ -1089,43 +1085,40 @@ (let ((new-form form) changed-p) (il:until (member (car new-form) - '(block catch - compiler-let - declare - eval-when - flet - il:function - function - go - if - labels - let - let* - macrolet - si::%macrolet - multiple-value-call - multiple-value-prog1 - progn - progv - quote - setq - il:setq - tagbody - the - throw - unwind-protect) - :test - 'eq) il:do (multiple-value-setq (new-form changed-p) - (optimize-and-macroexpand-1 new-form)) - (when (null changed-p) - (if (and (consp (car new-form)) - (eq 'il:openlambda (caar new-form))) - (setq new-form (expand-openlambda-call - (car new-form) - (cdr new-form))) - (return new-form))) il:finally (return - new-form - ))))) + '(block catch + compiler-let + declare + eval-when + flet + il:function + function + go + if + labels + let + let* + macrolet + si::%macrolet + multiple-value-call + multiple-value-prog1 + progn + progv + quote + setq + il:setq + tagbody + the + throw + unwind-protect) + :test + 'eq) il:do (multiple-value-setq (new-form changed-p) + (optimize-and-macroexpand-1 new-form)) + (when (null changed-p) + (if (and (consp (car new-form)) + (eq 'il:openlambda (caar new-form))) + (setq new-form (expand-openlambda-call (car new-form) + (cdr new-form))) + (return new-form))) il:finally (return new-form))))) (defun expand-openlambda-call (fn args) @@ -1150,7 +1143,7 @@ (setq extra-args args)) (il:* il:|;;| - "For each pair, if the argument is a constant, add it to the substitution we'll later apply.") + "For each pair, if the argument is a constant, add it to the substitution we'll later apply.") (cond ((or (constantp arg) @@ -1166,8 +1159,7 @@ (t (push (car params) unsubbed-params) (push arg unsubbed-args)))) - (when (null unsubbed-args) (il:* il:\; - "We got rid of all of them.") + (when (null unsubbed-args) (il:* il:\; "We got rid of all of them.") (return-from expand-openlambda-call `(progn ,@extra-args ,@(sublis subst-alist (cddr fn) :test @@ -1200,8 +1192,8 @@ (il:while (and unsubbed-args (symbolp (first unsubbed-args))) il:do (push (cons (pop unsubbed-params) - (pop unsubbed-args)) - subst-alist)) + (pop unsubbed-args)) + subst-alist)) (cond ((null unsubbed-args) (il:* il:\; "All substituted in.") `(progn ,@(sublis subst-alist (cddr fn) @@ -1253,9 +1245,9 @@ "Used by the parse-tree pretty-printer") (defun test-alpha (fn) - (let ((tree (test-alpha-2 fn))) + (let ((tree (test-alpha-2 fn))) (unwind-protect - (print-tree tree) + (print-tree tree) (release-tree tree)))) (defun test-alpha-2 (fn) @@ -1271,12 +1263,12 @@ (*current-function* nil) (*automatic-special-declarations* nil)) (declare (special il:specvars il:localvars il:localfreevars il:globalvars)) - (alpha-lambda (cond + (alpha-lambda (cond ((consp fn) fn) ((consp (il:getd fn)) (il:getd fn)) - (t (parse-defun (il:getdef fn 'il:functions))))))) + (t (parse-defun (il:getdef fn 'il:functions))))))) (defun parse-defun (form) (destructuring-bind (ignore name arg-list &body body) @@ -1289,7 +1281,7 @@ (let ((*node-hash* (make-hash-table)) (*node-number* 0) (*print-case* :upcase)) - (print-node tree 0)) + (print-node tree 0)) (terpri) (values)) @@ -1318,73 +1310,73 @@ (prin1 (block-name node)) (print-blipper-info) (new-line) - (print-node (block-stmt node) + (print-node (block-stmt node) nested-indent)) (call-node (when (caller-not-inline node) (princ "(not inline)")) (new-line) (princ "Func: ") - (print-node (call-fn node) + (print-node (call-fn node) (+ nested-indent 6)) (when (call-args node) (new-line) (princ "Args: ") (il:for arg-tail il:on (call-args node) - il:do (print-node (car arg-tail) - (+ nested-indent 6)) + il:do (print-node (car arg-tail) + (+ nested-indent 6)) (when (not (null (cdr arg-tail))) (new-line 6))))) (catch-node (new-line) (princ "Tag: ") - (print-node (catch-tag node) + (print-node (catch-tag node) (+ nested-indent 6)) (new-line) (princ "Stmt: ") - (print-node (catch-stmt node) + (print-node (catch-stmt node) (+ nested-indent 6))) (go-node (format t "to ~S" (go-tag node)) (new-line) (princ "Tagbody: ") - (print-node (go-tagbody node) + (print-node (go-tagbody node) (+ nested-indent 9))) (if-node (new-line) (princ "Pred: ") - (print-node (if-pred node) + (print-node (if-pred node) (+ nested-indent 6)) (new-line) (princ "Then: ") - (print-node (if-then node) + (print-node (if-then node) (+ nested-indent 6)) (new-line) (princ "Else: ") - (print-node (if-else node) + (print-node (if-else node) (+ nested-indent 6))) (labels-node (new-line) (princ "Funs: ") (il:for tail il:on (labels-funs node) - il:do (print-node (caar tail) - (+ nested-indent 6)) + il:do (print-node (caar tail) + (+ nested-indent 6)) (new-line 10) - (print-node (cdar tail) + (print-node (cdar tail) (+ nested-indent 10)) (when (not (null (cdr tail))) (new-line 6))) (new-line) (princ "Body: ") - (print-node (labels-body node) + (print-node (labels-body node) (+ nested-indent 6))) (lambda-node (new-line) (when (lambda-required node) (princ "&req: ") (il:for vars il:on (lambda-required node) - il:do (print-node (car vars) - (+ nested-indent 6)) + il:do (print-node (car vars) + (+ nested-indent 6)) (if (null (cdr vars)) (new-line) (new-line 6)))) @@ -1392,49 +1384,48 @@ (princ "&opt: ") (il:for vars il:on (lambda-optional node) il:do (destructuring-bind (var &optional (init nil i-given) - (svar nil sv-given)) - (car vars) - (cond - ((symbolp var) - (print-node (car vars) - (+ nested-indent 6))) - ((not i-given) - (print-node var (+ nested-indent 6))) - (t (princ "(") - (print-node var (+ nested-indent 7)) - (new-line 7) - (print-node init (+ nested-indent 7)) - (new-line 7) - (when sv-given - (print-node svar (+ nested-indent 7)) - (new-line 7)) - (princ ")")))) + (svar nil sv-given)) + (car vars) + (cond + ((symbolp var) + (print-node (car vars) + (+ nested-indent 6))) + ((not i-given) + (print-node var (+ nested-indent 6))) + (t (princ "(") + (print-node var (+ nested-indent 7)) + (new-line 7) + (print-node init (+ nested-indent 7)) + (new-line 7) + (when sv-given + (print-node svar (+ nested-indent 7)) + (new-line 7)) + (princ ")")))) (if (null (cdr vars)) (new-line) (new-line 6)))) (when (lambda-rest node) (princ "&rest: ") - (print-node (lambda-rest node) + (print-node (lambda-rest node) (+ nested-indent 7)) (new-line)) (when (lambda-keyword node) (princ "&key: ") (il:for vars il:on (lambda-keyword node) - il:do (destructuring-bind (key var &optional (init nil - i-given) - (svar nil sv-given)) - (car vars) - (format t "((~S " key) - (new-line 8) - (print-node var (+ nested-indent 8)) - (princ ")") - (new-line 7) - (print-node init (+ nested-indent 7)) - (new-line 7) - (when sv-given - (print-node svar (+ nested-indent 7)) - (new-line 7)) - (princ ")")) + il:do (destructuring-bind (key var &optional (init nil i-given) + (svar nil sv-given)) + (car vars) + (format t "((~S " key) + (new-line 8) + (print-node var (+ nested-indent 8)) + (princ ")") + (new-line 7) + (print-node init (+ nested-indent 7)) + (new-line 7) + (when sv-given + (print-node svar (+ nested-indent 7)) + (new-line 7)) + (princ ")")) (cond ((null (cdr vars)) (when (lambda-allow-other-keys node) @@ -1445,12 +1436,12 @@ (princ "Closed-over:") (new-line 10) (il:for vars il:on (lambda-closed-over-vars node) - il:do (print-node (car vars) - (+ nested-indent 10)) + il:do (print-node (car vars) + (+ nested-indent 10)) (if (null (cdr vars)) (new-line) (new-line 10)))) - (print-node (lambda-body node) + (print-node (lambda-body node) nested-indent)) (literal-node (prin1 (literal-value node))) (mv-call-node @@ -1458,79 +1449,79 @@ (princ "(not inline)")) (new-line) (princ "Func: ") - (print-node (mv-call-fn node) + (print-node (mv-call-fn node) (+ nested-indent 6)) (new-line) (princ "Args: ") (il:for arg-tail il:on (mv-call-arg-exprs node) - il:do (print-node (car arg-tail) - (+ nested-indent 6)) + il:do (print-node (car arg-tail) + (+ nested-indent 6)) (when (not (null (cdr arg-tail))) (new-line 6)))) (mv-prog1-node (il:for stmt il:in (mv-prog1-stmts node) il:do (new-line) - (print-node stmt nested-indent))) + (print-node stmt nested-indent))) (opcodes-node (prin1 (opcodes-bytes node))) (progn-node (il:for stmt il:in (progn-stmts node) il:do (new-line) - (print-node stmt nested-indent))) + (print-node stmt nested-indent))) (progv-node (new-line) (princ "Vars: ") - (print-node (progv-syms-expr node) + (print-node (progv-syms-expr node) (+ nested-indent 6)) (new-line) (princ "Vals: ") - (print-node (progv-vals-expr node) + (print-node (progv-vals-expr node) (+ nested-indent 6)) (new-line) (princ "Body: ") - (print-node (progv-stmt node) + (print-node (progv-stmt node) (+ nested-indent 6))) (return-node (new-line) (princ "From: ") - (print-node (return-block node) + (print-node (return-block node) (+ nested-indent 7)) (new-line) (princ "Value: ") - (print-node (return-value node) + (print-node (return-value node) (+ nested-indent 7))) (setq-node (new-line) (princ "Var: ") - (print-node (setq-var node) + (print-node (setq-var node) (+ nested-indent 7)) (new-line) (princ "Value: ") - (print-node (setq-value node) + (print-node (setq-value node) (+ nested-indent 7))) (tagbody-node (print-blipper-info) (il:for segment il:in (tagbody-segments node) il:do (il:for tag il:in (segment-tags segment) - il:do (new-line) - (princ tag)) + il:do (new-line) + (princ tag)) (il:for stmt il:in (segment-stmts segment) il:do (new-line 4) - (print-node stmt (+ nested-indent 4))))) + (print-node stmt (+ nested-indent 4))))) (throw-node (new-line) (princ "Tag: ") - (print-node (throw-tag node) + (print-node (throw-tag node) (+ nested-indent 7)) (new-line) (princ "Value: ") - (print-node (throw-value node) + (print-node (throw-value node) (+ nested-indent 7))) (unwind-protect-node (new-line) (princ "Stmt: ") - (print-node (unwind-protect-stmt node) + (print-node (unwind-protect-stmt node) (+ nested-indent 9)) (new-line) (princ "Cleanup: ") - (print-node (unwind-protect-cleanup node) + (print-node (unwind-protect-cleanup node) (+ nested-indent 9))) ((or variable-struct var-ref-node) (let ((var (if (variable-p node) @@ -1545,39 +1536,39 @@ ((gethash (variable-binder var) *node-hash*) (princ "Binder: ") - (print-node (variable-binder var) + (print-node (variable-binder var) 0)) (t (new-line) (princ "Binder: ") - (print-node (variable-binder var) + (print-node (variable-binder var) (+ nested-indent 8)))))))))))))) (defparameter context-test-form - '(progn (ctxt) - (list (if (ctxt) - (ctxt)) - (multiple-value-list (ctxt)) + '(progn (ctxt) + (list (if (ctxt) + (ctxt)) + (multiple-value-list (ctxt)) (multiple-value-call #'(lambda (a b) (bar a b)) - (ctxt)) + (ctxt)) (multiple-value-call #'(lambda (a &rest b) (bar a b)) - (ctxt)) + (ctxt)) (multiple-value-call #'(lambda (a b) (bar a b)) - (ctxt) - (ctxt)) - (let ((x (ctxt))) - (setq x (ctxt))) - ((lambda (a &optional (b (ctxt))) - (ctxt)) - (ctxt)) + (ctxt) + (ctxt)) + (let ((x (ctxt))) + (setq x (ctxt))) + ((lambda (a &optional (b (ctxt))) + (ctxt)) + (ctxt)) (multiple-value-call #'(lambda (a b) (bar a b)) ((lambda (c) - (ctxt)) + (ctxt)) 17))) - (ctxt)) + (ctxt)) "Form for testing the alphatizer's manipulation of context information.") (defmacro ctxt () @@ -1588,17 +1579,36 @@ (il:* il:|;;| "Arrange to use the correct compiler.") -(il:putprops il:xclc-alpha il:filetype compile-file) +(il:putprops il:xclc-alpha il:filetype compile-file) (il:* il:|;;| "Arrange for the correct makefile environment") -(il:putprops il:xclc-alpha il:makefile-environment (:readtable "XCL" :package - (defpackage "COMPILER" (:use "LISP" - "XCL")))) -(il:putprops il:xclc-alpha il:copyright ("Venue & Xerox Corporation" 1986 1987 1988 1990)) +(il:putprops il:xclc-alpha il:makefile-environment (:readtable "XCL" :package (defpackage + "COMPILER" + (:use "LISP" "XCL")))) (il:declare\: il:dontcopy - (il:filemap (nil))) + (il:filemap (nil (2233 3038 (binding-contour 2233 . 3038)) (3040 8964 (process-declarations 3040 . +8964)) (8966 11026 (process-il-declarations 8966 . 11026)) (11028 11535 (update-environment 11028 . +11535)) (11537 12140 (bind-parameter 11537 . 12140)) (12142 12502 (check-arg 12142 . 12502)) (12504 +12928 (binding-to-lambda 12504 . 12928)) (13256 13366 (alpha-argument-form 13256 . 13366)) (13368 +13692 (alpha-atom 13368 . 13692)) (13694 13992 (alpha-block 13694 . 13992)) (13994 14130 (alpha-catch +13994 . 14130)) (14132 16373 (alpha-combination 14132 . 16373)) (16375 17062 (alpha-compiler-let 16375 + . 17062)) (17064 17553 (alpha-eval-when 17064 . 17553)) (17555 20327 (alpha-flet 17555 . 20327)) ( +20329 24486 (alpha-form 20329 . 24486)) (24488 27220 (alpha-function 24488 . 27220)) (27222 27574 ( +alpha-functional-form 27222 . 27574)) (27576 28406 (alpha-go 27576 . 28406)) (28408 28675 (alpha-if +28408 . 28675)) (28677 30009 (alpha-il-function 28677 . 30009)) (30011 32028 (alpha-labels 30011 . +32028)) (32030 34370 (alpha-lambda 32030 . 34370)) (34372 40922 (alpha-lambda-list 34372 . 40922)) ( +40924 43514 (alpha-let 40924 . 43514)) (43516 45751 (alpha-let* 43516 . 45751)) (45753 47296 ( +alpha-literal 45753 . 47296)) (47298 48049 (alpha-macrolet 47298 . 48049)) (48051 49316 (alpha-mv-call + 48051 . 49316)) (49318 50004 (alpha-mv-prog1 49318 . 50004)) (50006 50597 (alpha-progn 50006 . 50597) +) (50599 50840 (alpha-progv 50599 . 50840)) (50842 51682 (alpha-return-from 50842 . 51682)) (51684 +52433 (alpha-setq 51684 . 52433)) (52435 53970 (alpha-tagbody 52435 . 53970)) (53972 54158 ( +alpha-throw 53972 . 54158)) (54160 54759 (alpha-unwind-protect 54160 . 54759)) (54761 57418 ( +convert-to-cl-lambda 54761 . 57418)) (57420 59389 (completely-expand 57420 . 59389)) (59391 65540 ( +expand-openlambda-call 59391 . 65540)) (65879 66037 (test-alpha 65879 . 66037)) (66039 66836 ( +test-alpha-2 66039 . 66836)) (66838 67095 (parse-defun 66838 . 67095)) (67097 67284 (print-tree 67097 + . 67284)) (67286 82651 (print-node 67286 . 82651)) (83840 83893 (ctxt 83840 . 83893))))) il:stop diff --git a/sources/XCLC-ALPHA.DFASL b/sources/XCLC-ALPHA.DFASL new file mode 100644 index 0000000000000000000000000000000000000000..f1110203e11538dad3dcdca4697dac2f5d3cdeb9 GIT binary patch literal 33392 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 Bp)~*i