274:
CLHS says that type declaration of a symbol macro should not affect
- its expansion, but in SBCL it does.
+ its expansion, but in SBCL it does. (If you like magic and want to
+ fix it, don't forget to change all uses of MACROEXPAND to
+ MACROEXPAND*.)
275:
The following code (taken from CLOCC) takes a lot of time to compile:
(taken from CLOCC)
-277:
- IGNORE/IGNORABLE declarations should be acceptable for symbol
- macros.
-
278:
a.
(defun foo ()
(the type error doesn't seem to be terribly deterministic in when it
occurs. Bigger numbers seem better able to trigger the error)
+
+286: "recursive known functions"
+ Self-call recognition conflicts with known function
+ recognition. Currently cross compiler and target COMPILE do not
+ recognize recursion, and in target compiler it can be disabled. We
+ can always disable it for known functions with RECURSIVE attribute,
+ but there remains a possibility of a function with a
+ (tail)-recursive simplification pass and transforms/VOPs for base
+ cases.
|#
(declaim (ftype (sfunction
- (symbol &optional (or null sb-kernel:lexenv))
+ (symbol &optional (or null lexenv))
(values (member nil :special :lexical :symbol-macro :constant)
boolean
list))
variable-information))
(defun variable-information (var &optional env)
- (let* ((*lexenv* (or env (sb-kernel:make-null-lexenv)))
+ "Return three values. The first indicates a binding kind of VAR; the
+second is True if there is a local binding of VAR; the third is an
+alist of declarations that apply to the apparent binding of VAR."
+ (let* ((*lexenv* (or env (make-null-lexenv)))
(info (lexenv-find var vars)))
(etypecase info
- (sb-c::leaf (let ((type (sb-kernel:type-specifier
- (sb-kernel:type-intersection
+ (sb-c::leaf (let ((type (type-specifier
+ (type-intersection
(sb-c::leaf-type info)
(or (lexenv-find info type-restrictions)
- sb-kernel:*universal-type*)))))
+ *universal-type*)))))
(etypecase info
(sb-c::lambda-var
(values :lexical t
(:global nil))
nil
`( ; XXX ignore
- (type . ,(sb-kernel:type-specifier ; XXX local type
+ (type . ,(type-specifier ; XXX local type
(info :variable :type var)))))))))
-(defun parse-macro (name lambda-list body
- &optional env)
+(defun parse-macro (name lambda-list body &optional env)
(declare (ignore env))
(with-unique-names (whole environment)
(multiple-value-bind (body decls)
- (sb-kernel:parse-defmacro lambda-list whole body name
- 'parse-macro
- :environment environment)
+ (parse-defmacro lambda-list whole body name
+ 'parse-macro
+ :environment environment)
`(lambda (,whole ,environment)
,@decls
,body))))
-(defun enclose (lambda-expression
- &optional env)
+(defun enclose (lambda-expression &optional env)
(let ((env (if env
(sb-c::make-restricted-lexenv env)
- (sb-kernel:make-null-lexenv))))
+ (make-null-lexenv))))
(compile-in-lexenv nil lambda-expression env)))