-
Notifications
You must be signed in to change notification settings - Fork 3
fun info
Masataro Asai edited this page Feb 12, 2018
·
2 revisions
(defstruct (fun-info #-sb-xc-host (:pure t)
(:copier nil))
;; boolean attributes of this function.
(attributes (missing-arg) :type attributes)
;; TRANSFORM structures describing transforms for this function
(transforms () :type list)
;; a function which computes the derived type for a call to this
;; function by examining the arguments. This is null when there is
;; no special method for this function.
(derive-type nil :type (or function null))
;; a function that does various unspecified code transformations by
;; directly hacking the IR. Returns true if further optimizations of
;; the call shouldn't be attempted.
;;
;; KLUDGE: This return convention (non-NIL if you shouldn't do
;; further optimiz'ns) is backwards from the return convention for
;; transforms. -- WHN 19990917
(optimizer nil :type (or function null))
;; If true, a special-case LTN annotation method that is used in
;; place of the standard type/policy template selection. It may use
;; arbitrary code to choose a template, decide to do a full call, or
;; conspire with the IR2-CONVERT method to do almost anything. The
;; COMBINATION node is passed as the argument.
(ltn-annotate nil :type (or function null))
;; If true, the special-case IR2 conversion method for this
;; function. This deals with funny functions, and anything else that
;; can't be handled using the template mechanism. The COMBINATION
;; node and the IR2-BLOCK are passed as arguments.
(ir2-convert nil :type (or function null))
;; Called before IR2 conversion, just like IR2-CONVERT above
;; Currently used for issuing warnings so that it doesn't intefere
;; with things like CALL-FULL-LIKE-P due to IR2-CONVERT.
(ir2-hook nil :type (or function null))
;; If true, the function can stack-allocate the result. The
;; COMBINATION node is passed as an argument.
(stack-allocate-result nil :type (or function null))
;; If true, the function can add flow-sensitive type information
;; about the state of the world after its execution. The COMBINATION
;; node is passed as an argument, along with the current set of
;; active constraints for the block. The function returns a
;; sequence of constraints; a constraint is a triplet of a
;; constraint kind (a symbol, see (defstruct (constraint ...)) in
;; constraint.lisp) and arguments, either LVARs, LAMBDA-VARs, or
;; CTYPEs. If any of these arguments is NIL, the constraint is
;; skipped. This simplifies integration with OK-LVAR-LAMBDA-VAR,
;; which maps LVARs to LAMBDA-VARs. An optional fourth value in
;; each constraint flips the meaning of the constraint if it is
;; non-NIL.
(constraint-propagate nil :type (or function null))
;; If true, the function can add flow-sensitive type information
;; depending on the truthiness of its return value. Returns two
;; values, a LVAR and a CTYPE. The LVAR is of that CTYPE iff the
;; function returns true.
;; It may also return additional third and fourth values. Each is
;; a sequence of constraints (see CONSTRAINT-PROPAGATE), for the
;; consequent and alternative branches, respectively.
(constraint-propagate-if nil :type (or function null))
;; all the templates that could be used to translate this function
;; into IR2, sorted by increasing cost.
(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))
;; If non-null, the index of the argument which becomes the result
;; of the function.
(result-arg nil :type (or index null))
;; Customizing behavior of ASSERT-CALL-TYPE
(call-type-deriver nil :type (or function null))
annotation)