Skip to content

Commit 361d040

Browse files
committed
Replace ERROR compiler macro with transforms
Same logic as previous commit. I opted not to do the array OOB condition since I'm not sure we actually signal it anywhere right now. Maybe later.
1 parent 17debf5 commit 361d040

File tree

4 files changed

+27
-39
lines changed

4 files changed

+27
-39
lines changed

src/lisp/cscript.lisp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
#~"kernel/cmp/opt/opt-cons.lisp"
6767
#~"kernel/cmp/opt/opt-array.lisp"
6868
#~"kernel/cmp/opt/opt-object.lisp"
69-
#~"kernel/cmp/opt/opt-condition.lisp"
7069
#~"kernel/cmp/opt/opt-print.lisp"
7170
#~"kernel/lsp/shiftf-rotatef.lisp"
7271
#~"kernel/lsp/assorted.lisp"

src/lisp/kernel/cleavir/bir-to-bmir.lisp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,21 @@
142142
clasp-cleavir:*clasp-system*
143143
header-type))))
144144

145+
;; If CTYPE is an eql type (constant), return (constant t), else nil nil.
146+
(defun ctype-constant-value (ctype)
147+
(let ((system clasp-cleavir:*clasp-system*))
148+
(if (cleavir-ctype:member-p system ctype)
149+
(let ((members (cleavir-ctype:member-members system ctype)))
150+
(if (= (length members) 1)
151+
(values (first members) t)
152+
(values nil nil)))
153+
(values nil nil))))
154+
145155
(defun headerp-test (return-type object-type header-type)
146156
(declare (ignore return-type object-type))
147-
(and (cleavir-ctype:member-p clasp-cleavir:*clasp-system* header-type)
148-
(let ((h (first (cleavir-ctype:member-members
149-
clasp-cleavir:*clasp-system* header-type))))
150-
(and (gethash h core:+type-header-value-map+) t))))
157+
(multiple-value-bind (h constantp)
158+
(ctype-constant-value header-type)
159+
(and constantp (gethash h core:+type-header-value-map+) t)))
151160

152161
(deftransform-f core::headerp #'compute-headerp-primop 'headerp-test (0)
153162
t t t)
@@ -171,6 +180,12 @@
171180
(deftransform random-state-p (core::headerq random-state) t)
172181

173182
(deftransform core::etypecase-error core::etypecase-error t t)
183+
;; These are written kinda stupidly. Please forgive me.
184+
;; TODO: Better mechanism for &key parameters.
185+
(deftransform-f error (constantly 'type-error) (constantly t)
186+
(2 4) t (eql type-error) (eql :datum) t (eql :expected-type) t)
187+
(deftransform-f error (constantly 'type-error) (constantly t)
188+
(4 2) t (eql type-error) (eql :expected-type) t (eql :datum) t)
174189

175190
(deftransform core:to-single-float core::double-to-single double-float)
176191
(deftransform core:to-single-float core::fixnum-to-single fixnum)
@@ -341,11 +356,9 @@
341356
'(t single-float double-float
342357
base-char character))
343358
(cleavir-ctype:member-p system order-type)
344-
(let ((mems (cleavir-ctype:member-members system order-type)))
345-
(and (= (length mems) 1)
346-
(member (first mems)
347-
'(:sequentially-consistent :relaxed
348-
:acquire-release :acquire :release))))))
359+
(member (ctype-constant-value order-type)
360+
'(:sequentially-consistent :relaxed
361+
:acquire-release :acquire :release))))
349362

350363
(defun atomic-aref-test (return-type order-type array-type
351364
&rest index-types)

src/lisp/kernel/cleavir/primop.lisp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@
130130
;;; Particular primops
131131
;;;
132132

133+
(defvprimop-intrinsic type-error ((:object) :object :object)
134+
"cc_error_type_error")
135+
(defvprimop-intrinsic core:array-out-of-bounds
136+
((:object) :object :object :object)
137+
"cc_error_array_out_of_bounds")
133138
(defvprimop-intrinsic core::etypecase-error ((:object) :object :object)
134139
"cc_etypecase_error")
135140

src/lisp/kernel/cmp/opt/opt-condition.lisp

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)