1.0.44.1: more conservative CONCATENATE open-coding
[sbcl.git] / src / compiler / knownfun.lisp
index 078b9f1..e121815 100644 (file)
   (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))
                               (eq (transform-important x) important)))
                        (fun-info-transforms info))))
     (cond (old
-           (style-warn "Overwriting ~S" old)
+           (style-warn 'sb!kernel:redefinition-with-deftransform
+                       :transform old)
            (setf (transform-function old) fun
                  (transform-note old) note))
           (t
 (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))
-(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
-                             :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)))