Skip to content

Commit

Permalink
1.0.20.2: Fewer XC/reader-conditional confusions
Browse files Browse the repository at this point in the history
	Inspired by Josh Elasser (sbcl-devel 2008-08-29), write code
	that tries to be clever about reader conditionals in the
	cross-compiler, in order to point out when a mistake is likely.
	... and fix the extra buglet that this reveals.
  • Loading branch information
csrhodes committed Sep 4, 2008
1 parent 360bfcf commit 77bf768
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 5 deletions.
4 changes: 4 additions & 0 deletions make-host-1.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
(setf *host-obj-prefix* "obj/from-host/")
(load "src/cold/set-up-cold-packages.lisp")
(load "src/cold/defun-load-or-cload-xcompiler.lisp")

(set-dispatch-macro-character #\# #\+ #'she-reader)
(set-dispatch-macro-character #\# #\- #'she-reader)

(load-or-cload-xcompiler #'host-cload-stem)

;;; Let's check that the type system, and various other things, are
Expand Down
3 changes: 3 additions & 0 deletions make-host-2.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
;; toplevel forms in the xcompiler backq.lisp file?
(set-macro-character #\` #'sb!impl::backquote-macro)
(set-macro-character #\, #'sb!impl::comma-macro)

(set-dispatch-macro-character #\# #\+ #'she-reader)
(set-dispatch-macro-character #\# #\- #'she-reader)
;; Control optimization policy.
(proclaim-target-optimization)
;; Specify where target machinery lives.
Expand Down
4 changes: 2 additions & 2 deletions src/code/debug-int.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -3384,9 +3384,9 @@ register."
;; sense in signaling the condition.
(when step-info
(let ((*step-frame*
#+(or x86 x86-64)
#!+(or x86 x86-64)
(signal-context-frame (sb!alien::alien-sap context))
#-(or x86 x86-64)
#!-(or x86 x86-64)
;; KLUDGE: Use the first non-foreign frame as the
;; *STACK-TOP-HINT*. Getting the frame from the signal
;; context as on x86 would be cleaner, but
Expand Down
4 changes: 2 additions & 2 deletions src/code/target-alieneval.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@
`(symbol-macrolet ((&auxiliary-type-definitions&
,(append *new-auxiliary-types*
(auxiliary-type-definitions env))))
#+(or x86 x86-64)
#!+(or x86 x86-64)
(let ((sb!vm::*alien-stack* sb!vm::*alien-stack*))
,@body)
#-(or x86 x86-64)
#!-(or x86 x86-64)
,@body)))

;;;; runtime C values that don't correspond directly to Lisp types
Expand Down
39 changes: 39 additions & 0 deletions src/cold/shebang.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,45 @@
(compile 'shebang-reader)

(set-dispatch-macro-character #\# #\! #'shebang-reader)
;;; while we are at it, let us write something which helps us sanity
;;; check our own code; it is too easy to write #+ when meaning #!+,
;;; and such mistakes can go undetected for a while.
;;;
;;; ideally we wouldn't use *SHEBANG-FEATURES* but
;;; *ALL-POSSIBLE-SHEBANG-FEATURES*, but maintaining that variable
;;; will not be easy.
(defun checked-feature-in-features-list-p (feature list)
(etypecase feature
(symbol (unless (member feature '(:ansi-cl :common-lisp :ieee-floating-point))
(when (member feature *shebang-features* :test #'eq)
(error "probable XC bug in host read-time conditional")))
(member feature list :test #'eq))
(cons (flet ((subfeature-in-list-p (subfeature)
(checked-feature-in-features-list-p subfeature list)))
(ecase (first feature)
(:or (some #'subfeature-in-list-p (rest feature)))
(:and (every #'subfeature-in-list-p (rest feature)))
(:not (let ((rest (cdr feature)))
(if (or (null (car rest)) (cdr rest))
(error "wrong number of terms in compound feature ~S"
feature)
(not (subfeature-in-list-p (second feature)))))))))))
(compile 'checked-feature-in-features-list-p)

(defun she-reader (stream sub-character infix-parameter)
(when infix-parameter
(error "illegal read syntax: #~D~C" infix-parameter sub-character))
(when (let* ((*package* (find-package "KEYWORD"))
(*read-suppress* nil)
(notp (eql sub-character #\-))
(feature (read stream)))
(if (checked-feature-in-features-list-p feature *features*)
notp
(not notp)))
(let ((*read-suppress* t))
(read stream t nil t)))
(values))
(compile 'she-reader)

;;;; variables like *SHEBANG-FEATURES* but different

Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
"1.0.20.1"
"1.0.20.2"

0 comments on commit 77bf768

Please sign in to comment.