Skip to content

Commit 92fd33e

Browse files
authored
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
1 parent 3564f50 commit 92fd33e

15 files changed

+578
-461
lines changed

clos/clos-env.DFASL

626 Bytes
Binary file not shown.

clos/clos-env.lisp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1505,7 +1505,7 @@ window"
15051505
(setf (sedit:get-format 'call-next-method)
15061506
'(:indent (1) :args (:keyword nil)))
15071507

1508-
(setf (sedit:get-format 'symbol-macrolet) 'let)
1508+
(setf (sedit:get-format 'cl:symbol-macrolet) 'let)
15091509

15101510
(setf (sedit:get-format 'with-accessors)
15111511
'(:indent ((1) 1)

clos/pkg.dfasl

-62 Bytes
Binary file not shown.

clos/pkg.lisp

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
;;;-*- Package: CLOS; Syntax: Common-Lisp; Base: 10 -*-
22

3-
43
;;; File converted on 26-Mar-91 10:23:29 from source pkg
54
;;;. Original source {dsk}<usr>local>users>welch>lisp>clos>rev4>il-format>pkg.;4 created 1-Mar-91 10:10:26
65

76
;;;. Copyright (c) 1991 by Venue
87

9-
108
(in-package "CLOS")
119

12-
13-
1410
;;; Some CommonLisps have more symbols in the Lisp package than the ones that are explicitly
1511
;;; specified in CLtL. This causes trouble. Any Lisp that has extra symbols in the Lisp package
1612
;;; should shadow those symbols in the CLOS package.
@@ -31,7 +27,7 @@
3127
no-applicable-method no-next-method print-object reinitialize-instance remove-method
3228
shared-initialize slot-boundp slot-exists-p slot-makunbound slot-missing slot-unbound
3329
slot-value standard standard-class standard-generic-function standard-method
34-
standard-object structure-class symbol-macrolet update-instance-for-different-class
30+
standard-object structure-class update-instance-for-different-class
3531
update-instance-for-redefined-class with-accessors with-added-methods with-slots))
3632

3733
(import '(xcl:false xcl:destructuring-bind xcl:true) *the-clos-package*)

internal/loadups/LOADUP-LISP

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
22

3-
(FILECREATED "14-Mar-2024 12:16:33" |{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;2| 5426
3+
(FILECREATED "21-Mar-2024 10:56:13" |{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;4| 5586
44

55
:EDIT-BY "lmm"
66

77
:CHANGES-TO (FNS LOADUP-LISP)
88

9-
:PREVIOUS-DATE "31-Jul-2023 18:22:53"
10-
|{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;1|)
9+
:PREVIOUS-DATE "14-Mar-2024 12:16:33"
10+
|{DSK}<home>larry>il>medley>internal>loadups>LOADUP-LISP.;3|)
1111

1212

1313
(PRETTYCOMPRINT LOADUP-LISPCOMS)
@@ -20,7 +20,8 @@
2020
(DEFINEQ
2121

2222
(LOADUP-LISP
23-
(LAMBDA (DRIBBLEFILE) (* \; "Edited 14-Mar-2024 12:16 by lmm")
23+
(LAMBDA (DRIBBLEFILE) (* \; "Edited 21-Mar-2024 10:55 by lmm")
24+
(* \; "Edited 14-Mar-2024 12:16 by lmm")
2425
(* \; "Edited 26-Feb-2023 12:17 by lmm")
2526
(* \; "Edited 13-Jul-2022 14:09 by rmk")
2627
(* \; "Edited 4-Mar-2022 19:13 by larry")
@@ -110,9 +111,9 @@
110111

111112
(PACKAGE-ENABLE)
112113

113-
(* |;;| " Added late")
114+
(* |;;| " Added late, LOAD late to avoid any dependencies")
114115

115-
(LOADUP '(XCL-LOOP))
116+
(LOADUP '(XCL-LOOP XCL-HASH-LOOP))
116117

117118
(* |;;| " networking code -- should make it optional but too many cross dependencies")
118119

@@ -130,5 +131,5 @@
130131
(GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST)
131132
)
132133
(DECLARE\: DONTCOPY
133-
(FILEMAP (NIL (673 5220 (LOADUP-LISP 683 . 5218)))))
134+
(FILEMAP (NIL (673 5380 (LOADUP-LISP 683 . 5378)))))
134135
STOP

internal/loadups/LOADUP-LISP.LCOM

15 Bytes
Binary file not shown.

sources/PACKAGE-STARTUP

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
22

3-
(FILECREATED "16-Mar-2024 08:28:55" |{DSK}<home>larry>il>medley>sources>PACKAGE-STARTUP.;2| 36546
3+
(FILECREATED "21-Mar-2024 10:21:14" |{DSK}<home>larry>il>medley>sources>PACKAGE-STARTUP.;9| 36658
44

55
:EDIT-BY "lmm"
66

7-
:CHANGES-TO (VARIABLES CMLSYMBOLS.MACROS)
7+
:CHANGES-TO (VARIABLES CMLSYMBOLS.DECLARATORS CMLSYMBOLS.SHARED)
88

9-
:PREVIOUS-DATE " 1-Aug-2021 18:08:23" |{DSK}<home>larry>il>medley>sources>PACKAGE-STARTUP.;1|
9+
:PREVIOUS-DATE "20-Mar-2024 23:34:56" |{DSK}<home>larry>il>medley>sources>PACKAGE-STARTUP.;8|
1010
)
1111

1212

@@ -311,8 +311,8 @@
311311
"VECTOR-PUSH-EXTEND" "VECTORP" "WARN" "WRITE" "WRITE-BYTE" "WRITE-CHAR" "WRITE-LINE"
312312
"WRITE-STRING" "WRITE-TO-STRING" "Y-OR-N-P" "YES-OR-NO-P" "ZEROP"))
313313

314-
(CL:DEFPARAMETER CMLSYMBOLS.DECLARATORS '("DECLARATION" "FTYPE" "FUNCTION" "IGNORE" "INLINE"
315-
"NOTINLINE" "OPTIMIZE" "SPECIAL" "TYPE"))
314+
(CL:DEFPARAMETER CMLSYMBOLS.DECLARATORS '("DECLARATION" "FTYPE" "FUNCTION" "IGNORE" "IGNORABLE"
315+
"INLINE" "NOTINLINE" "OPTIMIZE" "SPECIAL" "TYPE"))
316316

317317
(CL:DEFPARAMETER CMLSYMBOLS.TYPENAMES
318318
'("ARRAY" "ATOM" "BIGNUM" "BIT" "BIT-VECTOR" "CHARACTER" "COMMON" "COMPILED-FUNCTION" "COMPLEX"
@@ -327,10 +327,11 @@
327327
"DEFINE-MODIFY-MACRO" "DEFINE-SETF-METHOD" "DEFMACRO" "DEFPARAMETER" "DEFSETF" "DEFSTRUCT"
328328
"DEFTYPE" "DEFUN" "DEFVAR" "DO" "DO*" "DO-ALL-SYMBOLS" "DO-EXTERNAL-SYMBOLS" "DO-SYMBOLS"
329329
"DOLIST" "DOTIMES" "ECASE" "ETYPECASE" "INCF" "LOCALLY" "LOOP" "LOOP-FINISH"
330-
"MULTIPLE-VALUE-BIND" "MULTIPLE-VALUE-LIST" "MULTIPLE-VALUE-SETQ" "OR" "POP" "PROG"
331-
"PROG*" "PROG1" "PROG2" "PSETF" "PSETQ" "PUSH" "PUSHNEW" "REMF" "RETURN" "ROTATEF" "SETF"
332-
"SHIFTF" "STEP" "TIME" "TRACE" "TYPECASE" "UNLESS" "UNTRACE" "WHEN"
333-
"WITH-INPUT-FROM-STRING" "WITH-OPEN-FILE" "WITH-OPEN-STREAM" "WITH-OUTPUT-TO-STRING"))
330+
"WITH-HASH-TABLE-ITERATOR" "WITH-PACKAGE-ITERATOR" "MULTIPLE-VALUE-BIND"
331+
"MULTIPLE-VALUE-LIST" "MULTIPLE-VALUE-SETQ" "OR" "POP" "PROG" "PROG*" "PROG1" "PROG2"
332+
"PSETF" "PSETQ" "PUSH" "PUSHNEW" "REMF" "RETURN" "ROTATEF" "SETF" "SHIFTF" "STEP" "TIME"
333+
"TRACE" "TYPECASE" "UNLESS" "UNTRACE" "WHEN" "WITH-INPUT-FROM-STRING" "WITH-OPEN-FILE"
334+
"WITH-OPEN-STREAM" "WITH-OUTPUT-TO-STRING"))
334335

335336
(CL:DEFPARAMETER CMLSYMBOLS.SPECIALFORMS
336337
'("BLOCK" "CATCH" "COMPILER-LET" "DECLARE" "EVAL-WHEN" "FLET" "FUNCTION" "GO" "IF" "LABELS"
@@ -353,12 +354,12 @@
353354
"CADADR" "CADAR" "CADDAR" "CADDDR" "CADDR" "CADR" "CAR" "CASE" "CDAAAR" "CDAADR" "CDAAR"
354355
"CDADAR" "CDADDR" "CDADR" "CDAR" "CDDAAR" "CDDADR" "CDDAR" "CDDDAR" "CDDDDR" "CDDDR" "CDDR"
355356
"CDR" "CLRHASH" "COERCE" "COMPLEX" "COND" "CONS" "DECLARE" "DEFMACRO" "DPB" "DRIBBLE" "ED"
356-
"EQ" "EQL" "EVENP" "EXPORT" "FLOAT" "GET" "GO" "IGNORE" "IMPORT" "INSPECT" "INTEGER" "LAST"
357-
"LDB" "LET" "LET*" "LIST" "LIST*" "LOGAND" "LOGNOT" "LOGXOR" "MAX" "MIN" "MINUSP" "NCONC"
358-
"NIL" "NOT" "NULL" "ODDP" "OPEN" "OR" "PACKAGE" "PATHNAME" "PROG" "PROG*" "PROG1" "PROG2"
359-
"PROGN" "QUOTE" "RANDOM-STATE" "RATIO" "READTABLEP" "REMHASH" "REMPROP" "RETURN" "ROUND"
360-
"RPLACA" "RPLACD" "SATISFIES" "SEQUENCE" "SET" "STRING" "STRING-EQUAL" "STREAM" "STREAMP"
361-
"T" "TAILP" "THE" "TIME" "TRACE" "TYPE" "TYPEP" "UNTRACE" "WRITE")
357+
"EQ" "EQL" "EVENP" "EXPORT" "FLOAT" "GET" "GO" "IGNORE" "IGNORABLE" "IMPORT" "INSPECT"
358+
"INTEGER" "LAST" "LDB" "LET" "LET*" "LIST" "LIST*" "LOGAND" "LOGNOT" "LOGXOR" "MAX" "MIN"
359+
"MINUSP" "NCONC" "NIL" "NOT" "NULL" "ODDP" "OPEN" "OR" "PACKAGE" "PATHNAME" "PROG" "PROG*"
360+
"PROG1" "PROG2" "PROGN" "QUOTE" "RANDOM-STATE" "RATIO" "READTABLEP" "REMHASH" "REMPROP"
361+
"RETURN" "ROUND" "RPLACA" "RPLACD" "SATISFIES" "SEQUENCE" "SET" "STRING" "STRING-EQUAL"
362+
"STREAM" "STREAMP" "T" "TAILP" "THE" "TIME" "TRACE" "TYPE" "TYPEP" "UNTRACE" "WRITE")
362363

363364
(* |;;;| "Symbols shared by the Interlisp and Lisp packages.")
364365

@@ -643,14 +644,14 @@
643644
(PACKAGE-INIT)
644645
)
645646
(DECLARE\: DONTCOPY
646-
(FILEMAP (NIL (3015 3110 (RETURN-FIRST-OF-THREE 3015 . 3110)) (3112 3250 (
647-
ERROR-MISSING-EXTERNAL-SYMBOL 3112 . 3250)) (3857 4825 (CHECK-SYMBOL-NAMESTRING 3857 . 4825)) (4827
648-
7985 (\\NEW.READ.SYMBOL 4827 . 7985)) (7987 9697 (\\NEW.MKATOM 7987 . 9697)) (23437 23519 (
649-
LITATOM.EXISTS 23437 . 23519)) (24199 25205 (NAMESTRING-CONVERSION-CLAUSE 24199 . 25205)) (25207 26462
650-
(CONVERT-LITATOM 25207 . 26462)) (26464 28537 (CONCOCT-SYMBOL 26464 . 28537)) (28539 28833 (
651-
TRANSFER-SYMBOL 28539 . 28833)) (28835 29543 (INTERN-LITATOM 28835 . 29543)) (29545 30224 (
652-
\\LITATOM.EATCHARS 29545 . 30224)) (30226 30503 (PACKAGE-INIT 30226 . 30503)) (30505 31078 (
653-
PACKAGE-CLEAR 30505 . 31078)) (31080 32471 (PACKAGE-MAKE 31080 . 32471)) (32473 33785 (
654-
PACKAGE-HIERARCHY-INIT 32473 . 33785)) (33787 35396 (PACKAGE-ENABLE 33787 . 35396)) (35398 36041 (
655-
PACKAGE-DISABLE 35398 . 36041)) (36088 36114 (ID 36088 . 36114)))))
647+
(FILEMAP (NIL (3038 3133 (RETURN-FIRST-OF-THREE 3038 . 3133)) (3135 3273 (
648+
ERROR-MISSING-EXTERNAL-SYMBOL 3135 . 3273)) (3880 4848 (CHECK-SYMBOL-NAMESTRING 3880 . 4848)) (4850
649+
8008 (\\NEW.READ.SYMBOL 4850 . 8008)) (8010 9720 (\\NEW.MKATOM 8010 . 9720)) (23549 23631 (
650+
LITATOM.EXISTS 23549 . 23631)) (24311 25317 (NAMESTRING-CONVERSION-CLAUSE 24311 . 25317)) (25319 26574
651+
(CONVERT-LITATOM 25319 . 26574)) (26576 28649 (CONCOCT-SYMBOL 26576 . 28649)) (28651 28945 (
652+
TRANSFER-SYMBOL 28651 . 28945)) (28947 29655 (INTERN-LITATOM 28947 . 29655)) (29657 30336 (
653+
\\LITATOM.EATCHARS 29657 . 30336)) (30338 30615 (PACKAGE-INIT 30338 . 30615)) (30617 31190 (
654+
PACKAGE-CLEAR 30617 . 31190)) (31192 32583 (PACKAGE-MAKE 31192 . 32583)) (32585 33897 (
655+
PACKAGE-HIERARCHY-INIT 32585 . 33897)) (33899 35508 (PACKAGE-ENABLE 33899 . 35508)) (35510 36153 (
656+
PACKAGE-DISABLE 35510 . 36153)) (36200 36226 (ID 36200 . 36226)))))
656657
STOP

sources/PACKAGE-STARTUP.LCOM

157 Bytes
Binary file not shown.

sources/XCL-HASH-LOOP

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
2+
3+
(FILECREATED "21-Mar-2024 13:31:40" {DSK}<home>larry>il>medley>sources>XCL-HASH-LOOP.;9 4865
4+
5+
:EDIT-BY "lmm"
6+
7+
:CHANGES-TO (FUNCTIONS TEST-HASH-LOOP)
8+
9+
:PREVIOUS-DATE "21-Mar-2024 11:19:24" {DSK}<home>larry>il>medley>sources>XCL-HASH-LOOP.;8)
10+
11+
12+
(PRETTYCOMPRINT XCL-HASH-LOOPCOMS)
13+
14+
(RPAQQ XCL-HASH-LOOPCOMS ((FUNCTIONS HASH-TABLE-ITERATOR HASH-TABLE-ITERATOR-1 TEST-HASH-LOOP
15+
CL:WITH-HASH-TABLE-ITERATOR)
16+
(DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP)
17+
LLARRAYELT))
18+
(PROP FILETYPE XCL-HASH-LOOP)))
19+
20+
(CL:DEFUN HASH-TABLE-ITERATOR (HASH-TABLE-LIST) (* ; "Edited 21-Mar-2024 09:49 by lmm")
21+
[LET ((TABLES (MKLIST HASH-TABLE-LIST)))
22+
(COND
23+
((NULL TABLES)
24+
NIL)
25+
((NULL (CDR TABLES))
26+
(HASH-TABLE-ITERATOR-1 (CAR TABLES)))
27+
(T (LET [(ITERATOR (HASH-TABLE-ITERATOR-1 (CL:POP TABLES]
28+
#'(CL:LAMBDA NIL (CL:LOOP (CL:MULTIPLE-VALUE-BIND
29+
(MORE KEY VALUE)
30+
(CL:FUNCALL ITERATOR)
31+
(COND
32+
(MORE (RETURN (CL:VALUES MORE KEY VALUE)))
33+
[TABLES (CL:SETQ ITERATOR (HASH-TABLE-ITERATOR-1
34+
(CL:POP TABLES]
35+
(T (RETURN NIL])
36+
37+
(CL:DEFUN HASH-TABLE-ITERATOR-1 (TABLE) (* ; "Edited 19-Mar-2024 12:31 by lmm")
38+
[LET* ((SLOT (fetch HARRAYPBASE of TABLE))
39+
[LASTSLOT (fetch (HASHSLOT NEXTSLOT) of (\HASHSLOT SLOT (fetch (HARRAYP LASTINDEX)
40+
of TABLE]
41+
(NULLVALUE \HASH.NULL.VALUE)
42+
K V)
43+
#'(CL:LAMBDA NIL (CL:BLOCK ITERATOR
44+
(CL:LOOP (SETQ K (fetch (HASHSLOT KEY) of SLOT))
45+
(SETQ V (fetch (HASHSLOT VALUE) of SLOT))
46+
(CL:WHEN V
47+
48+
(* ;; "first non-empty slot")
49+
50+
(RETURN))
51+
(SETQ SLOT (fetch (HASHSLOT NEXTSLOT) of SLOT))
52+
(CL:WHEN (EQ SLOT LASTSLOT)
53+
54+
(* ;; "Out of slots to scan")
55+
56+
(CL:RETURN-FROM ITERATOR NIL)))
57+
58+
(* ;; "SLOT is set and not at end")
59+
60+
[CL:RETURN-FROM ITERATOR (CL:MULTIPLE-VALUE-PROG1
61+
(CL:VALUES T K (AND (NEQ NULLVALUE V)
62+
V))
63+
(SETQ SLOT (fetch (HASHSLOT NEXTSLOT)
64+
of SLOT])])
65+
66+
(CL:DEFUN TEST-HASH-LOOP (&OPTIONAL HA) (* ; "Edited 21-Mar-2024 10:39 by lmm")
67+
[IF (NOT HA)
68+
THEN (SETQ HA (HARRAY 7))
69+
(LET [(TRIALDATA '(1 2 A B "C" "D" 'EEEE 'FFFF (G)
70+
(H]
71+
(CL:LOOP FOR X ON TRIALDATA BY #'CDDR DO (CL:SETF (GETHASH (CL:FIRST X)
72+
HA)
73+
(CL:SECOND X]
74+
(LET (RESULT LOOPRESULT)
75+
[MAPHASH HA #'(LAMBDA (V K)
76+
(PUSH RESULT (LIST K V]
77+
(SETQ RESULT (REVERSE RESULT))
78+
(SETQ LOOPRESULT (CL:LOOP FOR X BEING EACH HASH-KEY OF HA USING (HASH-VALUE V)
79+
COLLECT
80+
(LIST X V)))
81+
(OR (EQUAL RESULT LOOPRESULT)
82+
(COMPARELISTS RESULT LOOPRESULT))))
83+
84+
(DEFMACRO CL:WITH-HASH-TABLE-ITERATOR ((NAME HASH-TABLE-FORM)
85+
&BODY BODY) (* ; "Edited 18-Mar-2024 09:38 by larry")
86+
[LET ((ITERATOR (CL:GENSYM)))
87+
`(LET [(,ITERATOR (HASH-TABLE-ITERATOR ,HASH-TABLE-FORM]
88+
(DECLARE (IGNORABLE ,ITERATOR))
89+
(CL:MACROLET [(,NAME NIL '(CL:FUNCALL ,ITERATOR]
90+
,@BODY])
91+
(DECLARE%: EVAL@COMPILE DONTCOPY
92+
93+
(FILESLOAD (LOADCOMP)
94+
LLARRAYELT)
95+
)
96+
97+
(PUTPROPS XCL-HASH-LOOP FILETYPE CL:COMPILE-FILE)
98+
(DECLARE%: DONTCOPY
99+
(FILEMAP (NIL (755 1731 (HASH-TABLE-ITERATOR 755 . 1731)) (1733 3354 (HASH-TABLE-ITERATOR-1 1733 .
100+
3354)) (3356 4284 (TEST-HASH-LOOP 3356 . 4284)) (4286 4705 (CL:WITH-HASH-TABLE-ITERATOR 4286 . 4705)))
101+
))
102+
STOP

sources/XCL-HASH-LOOP.DFASL

2.49 KB
Binary file not shown.

0 commit comments

Comments
 (0)