Skip to content

Commit a00f861

Browse files
committed
Use Inravina pretty printer
1 parent 009d24f commit a00f861

File tree

8 files changed

+151
-1656
lines changed

8 files changed

+151
-1656
lines changed

repos.sexp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
:branch "master")
3131
(:name :trivial-gray-streams
3232
:repository "https://github.com/trivial-gray-streams/trivial-gray-streams.git"
33-
:directory "dependencies/trivial-gray-streams/"
33+
:directory "src/lisp/kernel/contrib/trivial-gray-streams/"
3434
:branch "master")
3535
(:name :acclimation
3636
:repository "https://github.com/robert-strandh/Acclimation.git"
@@ -115,6 +115,22 @@
115115
:directory "src/lisp/kernel/contrib/global-vars/"
116116
:commit "c749f32c9b606a1457daa47d59630708ac0c266e"
117117
:extension :cando)
118+
(:name :incless
119+
:repository "https://github.com/s-expressionists/Incless.git"
120+
:directory "src/lisp/kernel/contrib/Incless/"
121+
:commit "add-core")
122+
(:name :inravina
123+
:repository "https://github.com/yitzchak/Inravina.git"
124+
:directory "src/lisp/kernel/contrib/Inravina/"
125+
:commit "add-core")
126+
(:name :trivial-package-locks
127+
:repository "https://github.com/yitzchak/trivial-package-locks.git"
128+
:directory "src/lisp/kernel/contrib/trivial-package-locks/"
129+
:commit "main")
130+
(:name :trivial-stream-column
131+
:repository "https://github.com/yitzchak/trivial-stream-column.git"
132+
:directory "src/lisp/kernel/contrib/trivial-stream-column/"
133+
:commit "main")
118134
(:name :let-plus
119135
:repository "https://github.com/sharplispers/let-plus.git"
120136
:directory "src/lisp/kernel/contrib/let-plus/"
@@ -205,4 +221,4 @@
205221
:repository "https://github.com/seqan/seqan.git"
206222
:directory "extensions/seqan-clasp/seqan/"
207223
:branch "master"
208-
:extension :seqan-clasp))
224+
:extension :seqan-clasp))

src/lisp/cscript.lisp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@
126126
#~"kernel/lsp/source-location.lisp"
127127
#~"kernel/lsp/defvirtual.lisp"
128128
#~"kernel/clos/streams.lisp"
129+
#~"kernel/lsp/circle.lisp"
130+
:incless/native
131+
:inravina/intrinsic
129132
#~"kernel/lsp/pprint.lisp"
130133
#~"kernel/lsp/format-pprint.lisp"
131134
#~"kernel/clos/conditions.lisp"

src/lisp/kernel/cleavir/inline.lisp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@
412412
;;;
413413
(in-package "SI")
414414

415+
#|
415416
(declaim (inline index-posn posn-index posn-column))
416417
(defun index-posn (index stream)
417418
(declare (type index index) (type pretty-stream stream))
@@ -422,7 +423,7 @@
422423
(defun posn-column (posn stream)
423424
(declare (type posn posn) (type pretty-stream stream))
424425
(index-column (posn-index posn stream) stream))
425-
426+
|#
426427
#+(or)
427428
(eval-when (:execute)
428429
(format t "Setting core:*echo-repl-read* to NIL~%")

src/lisp/kernel/clos/streams.lisp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -747,17 +747,18 @@
747747
(export s p))))
748748

749749
(defun redefine-cl-functions ()
750-
"Some functions in CL package are expected to be generic. We make them so."
751-
(let ((x (si::package-lock "COMMON-LISP" nil)))
752-
(loop for cl-symbol in '#.+conflicting-symbols+
753-
with gray-package = (find-package "GRAY")
754-
do (unless (typep (fdefinition cl-symbol) 'generic-function)
755-
(let ((gray-symbol (find-symbol (symbol-name cl-symbol) gray-package)))
756-
(setf (fdefinition cl-symbol) (fdefinition gray-symbol))
757-
(unintern gray-symbol gray-package)
758-
(import cl-symbol gray-package)
759-
(export cl-symbol gray-package))))
760-
(si::package-lock "COMMON-LISP" x)
750+
"Some functions in CL package are expected to be generic. Make it so number one!"
751+
(unless (member :staging *features*)
752+
(loop with previous-lock = (si::package-lock "COMMON-LISP" nil)
753+
with gray-package = (find-package "GRAY")
754+
finally (si::package-lock "COMMON-LISP" previous-lock)
755+
for cl-symbol in '#.+conflicting-symbols+
756+
for gray-symbol = (find-symbol (symbol-name cl-symbol) gray-package)
757+
unless (typep (fdefinition cl-symbol) 'generic-function)
758+
do (setf (fdefinition cl-symbol) (fdefinition gray-symbol))
759+
(unintern gray-symbol gray-package)
760+
(import cl-symbol gray-package)
761+
(export cl-symbol gray-package))
761762
nil))
762763

763764
#+(or cclasp eclasp) (eval-when (:load-toplevel) (setf clos:*clos-booted* t))

src/lisp/kernel/lsp/circle.lisp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
(in-package "SI")
2+
3+
(defun search-print-circle (object)
4+
(multiple-value-bind
5+
(code present-p)
6+
(gethash object *circle-stack*)
7+
(if (not (fixnump *circle-counter*))
8+
(cond ((not present-p)
9+
;; Was not found before
10+
(setf (gethash object *circle-stack*) nil)
11+
0)
12+
((null code)
13+
;; Second reference
14+
(setf (gethash object *circle-stack*) t)
15+
1)
16+
(t
17+
;; Further references
18+
2))
19+
(cond ((or (not present-p) (null code))
20+
;; Is not referenced or was not found before
21+
0)
22+
((eql code t)
23+
;; Reference twice but had no code yet
24+
(incf *circle-counter*)
25+
(setf (gethash object *circle-stack*)
26+
*circle-counter*)
27+
(- *circle-counter*))
28+
(t code)))))
29+
30+
(defun write-object-with-circle (object stream function)
31+
(if (and *print-circle*
32+
(not (null object))
33+
(not (fixnump object))
34+
(not (characterp object))
35+
(or (not (symbolp object)) (null (symbol-package object))))
36+
;;; *print-circle* and an object that might have a circle
37+
(if (null *circle-counter*)
38+
(let* ((hash (make-hash-table :test 'eq
39+
:size 1024))
40+
(*circle-counter* t)
41+
(*circle-stack* hash))
42+
(write-object-with-circle object (make-broadcast-stream) function)
43+
(setf *circle-counter* 0)
44+
(write-object-with-circle object stream function)
45+
(clrhash hash)
46+
object)
47+
(let ((code (search-print-circle object)))
48+
(cond ((not (fixnump *circle-counter*))
49+
;; We are only inspecting the object to be printed.
50+
;; Only print X if it was not referenced before
51+
(if (not (zerop code))
52+
object
53+
(funcall function object stream)))
54+
((zerop code)
55+
;; Object is not referenced twice
56+
(funcall function object stream))
57+
((minusp code)
58+
;; Object is referenced twice. We print its definition
59+
(write-char #\# stream)
60+
(let ((*print-radix* nil)
61+
(*print-base* 10))
62+
(write-ugly-object (- code) stream))
63+
(write-char #\= stream)
64+
(funcall function object stream))
65+
(t
66+
;; Second reference to the object
67+
(write-char #\# stream)
68+
(let ((*print-radix* nil)
69+
(*print-base* 10))
70+
(write-ugly-object code stream))
71+
(write-char #\# stream)
72+
object))))
73+
;;; live is good, print simple
74+
(funcall function object stream)))

0 commit comments

Comments
 (0)