Update of /cvsroot/sbcl/sbcl/src/compiler
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27385/src/compiler
Modified Files:
assem.lisp compiler-deftype.lisp early-c.lisp fndb.lisp
info-functions.lisp ir1-translators.lisp ir1tran.lisp
ir1util.lisp lexenv.lisp main.lisp policy.lisp proclaim.lisp
target-main.lisp
Log Message:
0.8.12.7: Merge package locks, AKA "what can go wrong with a 3783 line patch?"
... Controlled by the presence of :sb-package-locks in target
features.
... This builds both with and without package locks on both
x86 Linux and SunOS Sparc, with both CMUCL and SBCL
as host -- so chances are it should build elsewhere as
well.
... Remaining TODO: turn package locking errors from lexical
constructs to program errors in the produced code, fix
the bits in SBCL that hit host's SBCL-tyle package locks
(relevant FIXME is in src/cold/shared.lisp).
Index: assem.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/assem.lisp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- assem.lisp 5 Apr 2004 23:16:29 -0000 1.23
+++ assem.lisp 29 Jun 2004 08:51:00 -0000 1.24
@@ -1163,16 +1163,24 @@
,@(mapcar (lambda (name)
`(,name (gen-label)))
new-labels))
- (declare (ignorable ,vop-var ,seg-var))
+ (declare (ignorable ,vop-var ,seg-var)
+ ;; Must be done so that contribs and user code doing
+ ;; low-level stuff don't need to worry about this.
+ (disable-package-locks %%current-segment%% %%current-vop%%))
(macrolet ((%%current-segment%% () '**current-segment**)
(%%current-vop%% () '**current-vop**))
- (symbol-macrolet (,@(when (or inherited-labels nested-labels)
- `((..inherited-labels.. ,nested-labels))))
- ,@(mapcar (lambda (form)
- (if (label-name-p form)
- `(emit-label ,form)
- form))
- body)))))))
+ ;; KLUDGE: Some host lisps (CMUCL 18e Sparc at least)
+ ;; can't deal with this declaration, so disable it on host.
+ ;; Ditto for later ENABLE-PACKAGE-LOCKS %%C-S%% declaration.
+ #-sb-xc-host
+ (declare (enable-package-locks %%current-segment%% %%current-vop%%))
+ (symbol-macrolet (,@(when (or inherited-labels nested-labels)
+ `((..inherited-labels.. ,nested-labels))))
+ ,@(mapcar (lambda (form)
+ (if (label-name-p form)
+ `(emit-label ,form)
+ form))
+ body)))))))
#+sb-xc-host
(sb!xc:defmacro assemble ((&optional segment vop &key labels)
&body body
@@ -1209,13 +1217,13 @@
(declare (ignorable ,vop-var ,seg-var))
(macrolet ((%%current-segment%% () '**current-segment**)
(%%current-vop%% () '**current-vop**))
- (symbol-macrolet (,@(when (or inherited-labels nested-labels)
- `((..inherited-labels.. ,nested-labels))))
- ,@(mapcar (lambda (form)
- (if (label-name-p form)
- `(emit-label ,form)
- form))
- body)))))))
+ (symbol-macrolet (,@(when (or inherited-labels nested-labels)
+ `((..inherited-labels.. ,nested-labels))))
+ ,@(mapcar (lambda (form)
+ (if (label-name-p form)
+ `(emit-label ,form)
+ form))
+ body)))))))
(defmacro inst (&whole whole instruction &rest args &environment env)
#!+sb-doc
@@ -1636,10 +1644,19 @@
,@(when decls
`((declare ,@decls)))
(let ((,postits (segment-postits ,segment-name)))
+ ;; Must be done so that contribs and user code doing
+ ;; low-level stuff don't need to worry about this.
+ (declare (disable-package-locks %%current-segment%%))
(setf (segment-postits ,segment-name) nil)
(macrolet ((%%current-segment%% ()
(error "You can't use INST without an ~
ASSEMBLE inside emitters.")))
+ ;; KLUDGE: Some host lisps (CMUCL 18e Sparc at least)
+ ;; can't deal with this declaration, so disable it on host
+ ;; Ditto for earlier ENABLE-PACKAGE-LOCKS %%C-S%% %%C-V%%
+ ;; declaration.
+ #-sb-xc-host
+ (declare (enable-package-locks %%current-segment%%))
,@emitter))
(values))
(eval-when (:compile-toplevel :load-toplevel :execute)
Index: compiler-deftype.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/compiler-deftype.lisp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- compiler-deftype.lisp 24 Mar 2003 18:39:03 -0000 1.5
+++ compiler-deftype.lisp 29 Jun 2004 08:51:00 -0000 1.6
@@ -14,6 +14,8 @@
(/show0 "compiler-deftype.lisp 14")
(defun %compiler-deftype (name expander &optional doc)
+ (with-single-package-locked-error
+ (:symbol name "defining ~A as a type specifier"))
(ecase (info :type :kind name)
(:primitive
(when *type-system-initialized*
Index: early-c.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/early-c.lisp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- early-c.lisp 17 May 2004 16:17:58 -0000 1.29
+++ early-c.lisp 29 Jun 2004 08:51:00 -0000 1.30
@@ -102,6 +102,7 @@
(defvar *current-component*)
(defvar *delayed-ir1-transforms*)
(defvar *handled-conditions*)
+(defvar *disabled-package-locks*)
(defvar *policy*)
(defvar *dynamic-counts-tn*)
(defvar *elsewhere*)
Index: fndb.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/fndb.lisp,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- fndb.lisp 8 Jun 2004 11:38:42 -0000 1.92
+++ fndb.lisp 29 Jun 2004 08:51:00 -0000 1.93
@@ -1482,3 +1482,4 @@
(values)
())
(defknown style-warn (string &rest t) null ())
+
Index: info-functions.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/info-functions.lisp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- info-functions.lisp 17 Jul 2003 08:14:30 -0000 1.23
+++ info-functions.lisp 29 Jun 2004 08:51:00 -0000 1.24
@@ -209,8 +209,10 @@
(error "can't SETF COMPILER-MACRO-FUNCTION when ENV is non-NIL"))
(when (eq (info :function :kind name) :special-form)
(error "~S names a special form." name))
- (setf (info :function :compiler-macro-function name) function)
- function)
+ (with-single-package-locked-error
+ (:symbol name "setting the compiler-macro-function of ~A")
+ (setf (info :function :compiler-macro-function name) function)
+ function))
;;;; a subset of DOCUMENTATION functionality for bootstrapping
Index: ir1-translators.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1-translators.lisp,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -d -r1.58 -r1.59
--- ir1-translators.lisp 10 Jun 2004 16:32:46 -0000 1.58
+++ ir1-translators.lisp 29 Jun 2004 08:51:00 -0000 1.59
@@ -255,6 +255,8 @@
(compiler-style-warn "duplicate definitions in ~S" definitions))
(let* ((processed-definitions (mapcar definitionize-fun definitions))
(*lexenv* (make-lexenv definitionize-keyword processed-definitions)))
+ ;; I wonder how much of an compiler performance penalty this
+ ;; non-constant keyword is.
(funcall fun definitionize-keyword processed-definitions)))
;;; Tweak LEXENV to include the DEFINITIONS from a MACROLET, then
@@ -278,6 +280,9 @@
(destructuring-bind (name arglist &body body) definition
(unless (symbolp name)
(fail "The local macro name ~S is not a symbol." name))
+ (when (fboundp name)
+ (with-single-package-locked-error
+ (:symbol name "binding ~A as a local macro")))
(unless (listp arglist)
(fail "The local macro argument list ~S is not a list."
arglist))
@@ -326,10 +331,14 @@
(destructuring-bind (name expansion) definition
(unless (symbolp name)
(fail "The local symbol macro name ~S is not a symbol." name))
+ (when (or (boundp name) (eq (info :variable :kind name) :macro))
+ (with-single-package-locked-error
+ (:symbol name "binding ~A as a local symbol-macro")))
(let ((kind (info :variable :kind name)))
(when (member kind '(:special :constant))
(fail "Attempt to bind a ~(~A~) variable with SYMBOL-MACROLET: ~S"
kind name)))
+ ;; A magical cons that MACROEXPAND-1 understands.
`(,name . (MACRO . ,expansion))))))
(defun funcall-in-symbol-macrolet-lexenv (definitions fun context)
@@ -523,7 +532,10 @@
(vars var)
(names name)
(vals (second spec)))))))
-
+ (dolist (name (names))
+ (when (eq (info :variable :kind name) :macro)
+ (with-single-package-locked-error
+ (:symbol name "lexically binding symbol-macro ~A"))))
(values (vars) (vals))))
(def-ir1-translator let ((bindings &body body) start next result)
@@ -542,9 +554,10 @@
((next result)
(processing-decls (decls vars nil next result)
(let ((fun (ir1-convert-lambda-body
- forms vars
- :debug-name (debug-namify "LET "
- bindings))))
+ forms
+ vars
+ :debug-name (debug-namify "LET S"
+ bindings))))
(reference-leaf start ctran fun-lvar fun))
(values next result))))
(ir1-convert-combination-args fun-lvar ctran next result
values))))))
@@ -559,7 +572,12 @@
(parse-body body :doc-string-allowed nil)
(multiple-value-bind (vars values) (extract-let-vars bindings 'let*)
(processing-decls (decls vars nil start next)
- (ir1-convert-aux-bindings start next result forms vars values)))))
+ (ir1-convert-aux-bindings start
+ next
+ result
+ forms
+ vars
+ values)))))
;;; logic shared between IR1 translators for LOCALLY, MACROLET,
;;; and SYMBOL-MACROLET
@@ -601,6 +619,9 @@
(let ((name (first def)))
(check-fun-name name)
+ (when (fboundp name)
+ (with-single-package-locked-error
+ (:symbol name "binding ~A as a local function")))
(names name)
(multiple-value-bind (forms decls) (parse-body (cddr def))
(defs `(lambda ,(second def)
@@ -619,7 +640,7 @@
(multiple-value-bind (forms decls)
(parse-body body :doc-string-allowed nil)
(multiple-value-bind (names defs)
- (extract-flet-vars definitions 'flet)
+ (extract-flet-vars definitions 'flet)
(let ((fvars (mapcar (lambda (n d)
(ir1-convert-lambda d
:source-name n
@@ -629,7 +650,10 @@
names defs)))
(processing-decls (decls nil fvars next result)
(let ((*lexenv* (make-lexenv :funs (pairlis names fvars))))
- (ir1-convert-progn-body start next result forms)))))))
+ (ir1-convert-progn-body start
+ next
+ result
+ forms)))))))
(def-ir1-translator labels ((definitions &body body) start next result)
#!+sb-doc
@@ -639,46 +663,50 @@
each other."
(multiple-value-bind (forms decls) (parse-body body :doc-string-allowed nil)
(multiple-value-bind (names defs)
- (extract-flet-vars definitions 'labels)
- (let* ( ;; dummy LABELS functions, to be used as placeholders
+ (extract-flet-vars definitions 'labels)
+ (let* (;; dummy LABELS functions, to be used as placeholders
;; during construction of real LABELS functions
- (placeholder-funs (mapcar (lambda (name)
- (make-functional
- :%source-name name
- :%debug-name (debug-namify
- "LABELS placeholder "
- name)))
- names))
- ;; (like PAIRLIS but guaranteed to preserve ordering:)
- (placeholder-fenv (mapcar #'cons names placeholder-funs))
+ (placeholder-funs (mapcar (lambda (name)
+ (make-functional
+ :%source-name name
+ :%debug-name (debug-namify
+ "LABELS placeholder "
+ name)))
+ names))
+ ;; (like PAIRLIS but guaranteed to preserve ordering:)
+ (placeholder-fenv (mapcar #'cons names placeholder-funs))
;; the real LABELS functions, compiled in a LEXENV which
;; includes the dummy LABELS functions
- (real-funs
- (let ((*lexenv* (make-lexenv :funs placeholder-fenv)))
- (mapcar (lambda (name def)
- (ir1-convert-lambda def
- :source-name name
- :debug-name (debug-namify
- "LABELS " name)
- :allow-debug-catch-tag t))
- names defs))))
-
+ (real-funs
+ (let ((*lexenv* (make-lexenv :funs placeholder-fenv)))
+ (mapcar (lambda (name def)
+ (ir1-convert-lambda def
+ :source-name name
+ :debug-name (debug-namify
+ "LABELS " name)
+ :allow-debug-catch-tag t))
+ names defs))))
+
;; Modify all the references to the dummy function leaves so
;; that they point to the real function leaves.
- (loop for real-fun in real-funs and
- placeholder-cons in placeholder-fenv do
- (substitute-leaf real-fun (cdr placeholder-cons))
- (setf (cdr placeholder-cons) real-fun))
-
+ (loop for real-fun in real-funs and
+ placeholder-cons in placeholder-fenv do
+ (substitute-leaf real-fun (cdr placeholder-cons))
+ (setf (cdr placeholder-cons) real-fun))
+
;; Voila.
- (processing-decls (decls nil real-funs next result)
+ (processing-decls (decls nil real-funs next result)
(let ((*lexenv* (make-lexenv
;; Use a proper FENV here (not the
;; placeholder used earlier) so that if the
;; lexical environment is used for inline
;; expansion we'll get the right functions.
:funs (pairlis names real-funs))))
- (ir1-convert-progn-body start next result forms)))))))
+ (ir1-convert-progn-body start
+ next
+ result
+ forms)))))))
+
;;;; the THE special operator, and friends
@@ -860,9 +888,8 @@
(with-unique-names (exit-block)
`(block ,exit-block
(%within-cleanup
- :catch
- (%catch (%escape-fun ,exit-block) ,tag)
- ,@body)))))
+ :catch (%catch (%escape-fun ,exit-block) ,tag)
+ ,@body)))))
(def-ir1-translator unwind-protect
((protected &body cleanup) start next result)
Index: ir1tran.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1tran.lisp,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -d -r1.121 -r1.122
--- ir1tran.lisp 27 May 2004 16:06:50 -0000 1.121
+++ ir1tran.lisp 29 Jun 2004 08:51:00 -0000 1.122
@@ -922,6 +922,9 @@
(collect ((restr nil cons)
(new-vars nil cons))
(dolist (var-name (rest decl))
+ (when (boundp var-name)
+ (with-single-package-locked-error
+ (:symbol var-name "declaring the type of ~A")))
(let* ((bound-var (find-in-bindings vars var-name))
(var (or bound-var
(lexenv-find var-name vars)
@@ -982,6 +985,9 @@
(let ((type (compiler-specifier-type spec)))
(collect ((res nil cons))
(dolist (name names)
+ (when (fboundp name)
+ (with-single-package-locked-error
+ (:symbol name "declaring the ftype of ~A")))
(let ((found (find name fvars
:key #'leaf-source-name
:test #'equal)))
@@ -1006,6 +1012,8 @@
(declare (list spec vars) (type lexenv res))
(collect ((new-venv nil cons))
(dolist (name (cdr spec))
+ (with-single-package-locked-error
+ (:symbol name "declaring ~A special"))
(let ((var (find-in-bindings vars name)))
(etypecase var
(cons
@@ -1202,6 +1210,11 @@
(dynamic-extent
(process-dx-decl (cdr spec) vars)
res)
+ ((disable-package-locks enable-package-locks)
+ (make-lexenv
+ :default res
+ :disabled-package-locks (process-package-lock-decl
+ spec (lexenv-disabled-package-locks res))))
(t
(unless (info :declaration :recognized (first spec))
(compiler-warn "unrecognized declaration ~S" raw-spec))
Index: ir1util.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1util.lisp,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -d -r1.93 -r1.94
--- ir1util.lisp 27 May 2004 16:07:04 -0000 1.93
+++ ir1util.lisp 29 Jun 2004 08:51:00 -0000 1.94
@@ -539,6 +539,8 @@
(lambda (lexenv-lambda default))
(cleanup (lexenv-cleanup default))
(handled-conditions (lexenv-handled-conditions
default))
+ (disabled-package-locks
+ (lexenv-disabled-package-locks default))
(policy (lexenv-policy default)))
(macrolet ((frob (var slot)
`(let ((old (,slot default)))
@@ -551,7 +553,8 @@
(frob blocks lexenv-blocks)
(frob tags lexenv-tags)
(frob type-restrictions lexenv-type-restrictions)
- lambda cleanup handled-conditions policy)))
+ lambda cleanup handled-conditions
+ disabled-package-locks policy)))
;;; Makes a LEXENV, suitable for using in a MACROLET introduced
;;; macroexpander
@@ -581,6 +584,7 @@
nil
nil
(lexenv-handled-conditions lexenv)
+ (lexenv-disabled-package-locks lexenv)
(lexenv-policy lexenv))))
;;;; flow/DFO/component hackery
Index: lexenv.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/lexenv.lisp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- lexenv.lisp 17 May 2004 16:17:58 -0000 1.18
+++ lexenv.lisp 29 Jun 2004 08:51:00 -0000 1.19
@@ -27,7 +27,7 @@
(funs vars blocks tags
type-restrictions
lambda cleanup handled-conditions
- policy)))
+ disabled-package-locks policy)))
;; an alist of (NAME . WHAT), where WHAT is either a FUNCTIONAL (a
;; local function), a DEFINED-FUN, representing an
;; INLINE/NOTINLINE declaration, or a list (MACRO . <function>) (a
@@ -64,6 +64,8 @@
(cleanup nil)
;; condition types we handle with a handler around the compiler
(handled-conditions *handled-conditions*)
+ ;; lexically disabled package locks (list of symbols)
+ (disabled-package-locks *disabled-package-locks*)
;; the current OPTIMIZE policy
(policy *policy* :type policy))
Index: main.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/main.lisp,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -d -r1.88 -r1.89
--- main.lisp 17 May 2004 16:17:58 -0000 1.88
+++ main.lisp 29 Jun 2004 08:51:00 -0000 1.89
@@ -806,7 +806,8 @@
(defun convert-and-maybe-compile (form path)
(declare (list path))
(let* ((*lexenv* (make-lexenv :policy *policy*
- :handled-conditions *handled-conditions*))
+ :handled-conditions *handled-conditions*
+ :disabled-package-locks
*disabled-package-locks*))
(tll (ir1-toplevel form path nil)))
(cond ((eq *block-compile* t) (push tll *toplevel-lambdas*))
(t (compile-toplevel (list tll) nil)))))
@@ -853,7 +854,9 @@
;; issue a warning instead of silently screwing up.
(*policy* (lexenv-policy *lexenv*))
;; This is probably also a hack
- (*handled-conditions* (lexenv-handled-conditions *lexenv*)))
+ (*handled-conditions* (lexenv-handled-conditions *lexenv*))
+ ;; ditto
+ (*disabled-package-locks* (lexenv-disabled-package-locks *lexenv*)))
(process-toplevel-progn forms path compile-time-too))))
;;; Parse an EVAL-WHEN situations list, returning three flags,
@@ -952,7 +955,8 @@
(when name
(legal-fun-name-or-type-error name))
(let* ((*lexenv* (make-lexenv :policy *policy*
- :handled-conditions *handled-conditions*))
+ :handled-conditions *handled-conditions*
+ :disabled-package-locks
*disabled-package-locks*))
(fun (make-functional-from-toplevel-lambda lambda-expression
:name name
:path path)))
@@ -1175,8 +1179,9 @@
((macrolet)
(funcall-in-macrolet-lexenv
magic
- (lambda (&key funs)
+ (lambda (&key funs prepend)
(declare (ignore funs))
+ (aver (null prepend))
(process-toplevel-locally body
path
compile-time-too))
@@ -1184,7 +1189,8 @@
((symbol-macrolet)
(funcall-in-symbol-macrolet-lexenv
magic
- (lambda (&key vars)
+ (lambda (&key vars prepend)
+ (aver (null prepend))
(process-toplevel-locally body
path
compile-time-too
@@ -1392,6 +1398,7 @@
(*policy* *policy*)
(*handled-conditions* *handled-conditions*)
+ (*disabled-package-locks* *disabled-package-locks*)
(*lexenv* (make-null-lexenv))
(*block-compile* *block-compile-arg*)
(*source-info* info)
Index: policy.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/policy.lisp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- policy.lisp 17 May 2004 16:17:58 -0000 1.13
+++ policy.lisp 29 Jun 2004 08:51:01 -0000 1.14
@@ -73,8 +73,9 @@
(cons name 1))
*policy-qualities*))
;; not actually POLICY, but very similar
- (setf *handled-conditions* nil))
-
+ (setf *handled-conditions* nil
+ *disabled-package-locks* nil))
+
;;; On the cross-compilation host, we initialize immediately (not
;;; waiting for "cold init", since cold init doesn't exist on
;;; cross-compilation host).
Index: proclaim.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/proclaim.lisp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- proclaim.lisp 17 May 2004 16:17:58 -0000 1.28
+++ proclaim.lisp 29 Jun 2004 08:51:01 -0000 1.29
@@ -119,6 +119,17 @@
(mapcar (lambda (x) (list x 'muffle-warning)) (cdr spec)))
list))
+(declaim (ftype (function (list list) list)
+ process-package-lock-decl))
+(defun process-package-lock-decl (spec old)
+ (let ((decl (car spec))
+ (list (cdr spec)))
+ (ecase decl
+ (disable-package-locks
+ (union old list :test #'equal))
+ (enable-package-locks
+ (set-difference old list :test #'equal)))))
+
;;; ANSI defines the declaration (FOO X Y) to be equivalent to
;;; (TYPE FOO X Y) when FOO is a type specifier. This function
;;; implements that by converting (FOO X Y) to (TYPE FOO X Y).
@@ -157,6 +168,8 @@
(error "can't declare a non-symbol as SPECIAL: ~S" name))
(when (constantp name)
(error "can't declare a constant as SPECIAL: ~S" name))
+ (with-single-package-locked-error
+ (:symbol name "globally declaraing ~A special"))
(clear-info :variable :constant-value name)
(setf (info :variable :kind name) :special)))
(type
@@ -165,6 +178,8 @@
(dolist (name (rest args))
(unless (symbolp name)
(error "can't declare TYPE of a non-symbol: ~S" name))
+ (with-single-package-locked-error
+ (:symbol name "globally declaring the type of ~A"))
(when (eq (info :variable :where-from name) :declared)
(let ((old-type (info :variable :type name)))
(when (type/= type old-type)
@@ -181,6 +196,8 @@
(unless (csubtypep ctype (specifier-type 'function))
(error "not a function type: ~S" (first args)))
(dolist (name (rest args))
+ (with-single-package-locked-error
+ (:symbol name "globally declaring the ftype of ~A"))
(when (eq (info :function :where-from name) :declared)
(let ((old-type (info :function :type name)))
(when (type/= ctype old-type)
@@ -222,6 +239,9 @@
(unmuffle-conditions
(setq *handled-conditions*
(process-unmuffle-conditions-decl form *handled-conditions*)))
+ ((disable-package-locks enable-package-locks)
+ (setq *disabled-package-locks*
+ (process-package-lock-decl form *disabled-package-locks*)))
((inline notinline maybe-inline)
(dolist (name args)
(proclaim-as-fun-name name) ; since implicitly it is a function
@@ -236,6 +256,8 @@
(error "In~% ~S~%the declaration to be recognized is not a ~
symbol:~% ~S"
form decl))
+ (with-single-package-locked-error
+ (:symbol decl "globally declaring ~A as a declaration
proclamation"))
(setf (info :declaration :recognized decl) t)))
(t
(unless (info :declaration :recognized kind)
Index: target-main.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/compiler/target-main.lisp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- target-main.lisp 17 May 2004 16:17:58 -0000 1.15
+++ target-main.lisp 29 Jun 2004 08:51:01 -0000 1.16
@@ -72,6 +72,8 @@
(*policy* (lexenv-policy *lexenv*))
;; see above
(*handled-conditions* (lexenv-handled-conditions *lexenv*))
+ ;; ditto
+ (*disabled-package-locks* (lexenv-disabled-package-locks *lexenv*))
;; FIXME: ANSI doesn't say anything about CL:COMPILE
;; interacting with these variables, so we shouldn't. As
;; of SBCL 0.6.7, COMPILE-FILE controls its verbosity by
-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
digital self defense, top technical experts, no vendor pitches,
unmatched networking opportunities. Visit www.blackhat.com
|