projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't stack-allocate specialized vectors on non-conservtive control stacks
[sbcl.git]
/
src
/
compiler
/
knownfun.lisp
diff --git
a/src/compiler/knownfun.lisp
b/src/compiler/knownfun.lisp
index
863dbb3
..
e121815
100644
(file)
--- a/
src/compiler/knownfun.lisp
+++ b/
src/compiler/knownfun.lisp
@@
-131,7
+131,10
@@
(templates nil :type list)
;; If non-null, then this function is a unary type predicate for
;; this type.
(templates nil :type list)
;; If non-null, then this function is a unary type predicate for
;; this type.
- (predicate-type nil :type (or ctype null)))
+ (predicate-type nil :type (or ctype null))
+ ;; If non-null, the index of the argument which becomes the result
+ ;; of the function.
+ (result-arg nil :type (or index null)))
(defprinter (fun-info)
(attributes :test (not (zerop attributes))
(defprinter (fun-info)
(attributes :test (not (zerop attributes))
@@
-197,15
+200,17
@@
(declaim (ftype (function (list list attributes &key
(:derive-type (or function null))
(:optimizer (or function null))
(declaim (ftype (function (list list attributes &key
(:derive-type (or function null))
(:optimizer (or function null))
- (:destroyed-constant-args (or function null)))
+ (:destroyed-constant-args (or function null))
+ (:result-arg (or index null)))
*)
%defknown))
*)
%defknown))
-(defun %defknown (names type attributes &key derive-type optimizer destroyed-constant-args)
+(defun %defknown (names type attributes &key derive-type optimizer destroyed-constant-args result-arg)
(let ((ctype (specifier-type type))
(info (make-fun-info :attributes attributes
:derive-type derive-type
:optimizer optimizer
(let ((ctype (specifier-type type))
(info (make-fun-info :attributes attributes
:derive-type derive-type
:optimizer optimizer
- :destroyed-constant-args destroyed-constant-args))
+ :destroyed-constant-args destroyed-constant-args
+ :result-arg result-arg))
(target-env *info-environment*))
(dolist (name names)
(let ((old-fun-info (info :function :info name)))
(target-env *info-environment*))
(dolist (name names)
(let ((old-fun-info (info :function :info name)))