From c8c36d32b9d1284e22312b1454ac66fa2dfbc1de Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Wed, 5 May 2010 23:27:43 +0200 Subject: [PATCH] DECLAIM + SPECIAL did not work because ECL was not looking for special declarations in the compiler environment. --- src/cmp/cmpenv-declaim.lsp | 4 ++-- src/cmp/cmpvar.lsp | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cmp/cmpenv-declaim.lsp b/src/cmp/cmpenv-declaim.lsp index c9a259625..2346335ae 100644 --- a/src/cmp/cmpenv-declaim.lsp +++ b/src/cmp/cmpenv-declaim.lsp @@ -25,12 +25,12 @@ (loop for name in specials unless (assoc name types) do (let ((v (c1make-global-variable name :kind 'special))) - (setf env (cmp-env-register-var v env)))) + (setf env (cmp-env-register-var v env nil)))) (loop for (name . type) in types for specialp = (or (sys:specialp name) (member name specials)) for kind = (if specialp 'SPECIAL 'GLOBAL) for v = (c1make-global-variable name :type type :kind kind) - do (setf env (cmp-env-register-var v env))) + do (setf env (cmp-env-register-var v env nil))) env)) (multiple-value-bind (body specials types ignored others doc all) (c1body `((DECLARE ,@args)) nil) diff --git a/src/cmp/cmpvar.lsp b/src/cmp/cmpvar.lsp index 5beb8283d..159b7ad70 100644 --- a/src/cmp/cmpvar.lsp +++ b/src/cmp/cmpvar.lsp @@ -101,7 +101,11 @@ ;;; value. (defun check-global (name) - (member name *global-vars* :test #'eq :key #'var-name)) + (or (member name *global-vars* :test #'eq :key #'var-name) + (let ((v (cmp-env-search-var name))) + ;; Fixme! Revise the declamation code to ensure whether + ;; we also have to consider 'GLOBAL here. + (and v (eq (var-kind v) 'SPECIAL))))) ;;; ;;; Check if the symbol has a symbol macro