5 declaration-information
11 (declaim (ftype (sfunction
12 (symbol &optional (or null lexenv))
13 (values (member nil :special :lexical :symbol-macro :constant)
16 variable-information))
17 (defun variable-information (var &optional env)
18 "Return three values. The first indicates a binding kind of VAR; the
19 second is True if there is a local binding of VAR; the third is an
20 alist of declarations that apply to the apparent binding of VAR."
21 (let* ((*lexenv* (or env (make-null-lexenv)))
22 (info (lexenv-find var vars)))
24 (sb-c::leaf (let ((type (type-specifier
26 (sb-c::leaf-type info)
27 (or (lexenv-find info type-restrictions)
32 `((ignore . ,(sb-c::lambda-var-ignorep info))
36 `((type . ,type)) ; XXX ignore
40 `((type . ,type)) ; XXX ignore
42 (cons (values :symbol-macro t
43 nil ; FIXME: also in the compiler
45 (null (values (ecase (info :variable :kind var)
48 (:macro :symbol-macro)
52 (type . ,(type-specifier ; XXX local type
53 (info :variable :type var)))))))))
55 (declaim (ftype (sfunction (symbol &optional (or null lexenv)) t)
56 declaration-information))
57 (defun declaration-information (declaration-name &optional env)
58 (let ((env (or env (make-null-lexenv))))
59 (case declaration-name
61 (let ((policy (sb-c::lexenv-policy env)))
63 (dolist (name sb-c::*policy-qualities*)
64 (res (list name (cdr (assoc name policy)))))
65 (loop for (name . nil) in sb-c::*policy-dependent-qualities*
66 do (res (list name (sb-c::policy-quality policy name))))
68 (sb-ext:muffle-conditions
69 (car (rassoc 'muffle-warning
70 (sb-c::lexenv-handled-conditions env))))
71 (t (error "Unsupported declaration ~S." declaration-name)))))
73 (defun parse-macro (name lambda-list body &optional env)
74 (declare (ignore env))
75 (with-unique-names (whole environment)
76 (multiple-value-bind (body decls)
77 (parse-defmacro lambda-list whole body name
79 :environment environment)
80 `(lambda (,whole ,environment)
84 (defun enclose (lambda-expression &optional env)
86 (sb-c::make-restricted-lexenv env)
88 (compile-in-lexenv nil lambda-expression env)))