-;;; The TRANSFORM structure represents an IR1 transform.
-(defstruct transform
- ;; The function-type which enables this transform.
- (type (required-argument) :type ctype)
- ;; The transformation function. Takes the Combination node and Returns a
- ;; lambda, or throws out.
- (function (required-argument) :type function)
- ;; String used in efficency notes.
- (note (required-argument) :type string)
- ;; T if we should spew a failure note even if speed=brevity.
- (important nil :type (member t nil))
- ;; Usable for byte code, native code, or both.
- (when :native :type (member :byte :native :both)))
-
-(defprinter (transform) type note important when)
-
-;;; Grab the FUNCTION-INFO and enter the function, replacing any old
+;;; an IR1 transform
+(defstruct (transform (:copier nil))
+ ;; the function type which enables this transform.
+ ;;
+ ;; (Note that declaring this :TYPE FUN-TYPE probably wouldn't
+ ;; work because some function types, like (SPECIFIER-TYPE 'FUNCTION0
+ ;; itself, are represented as BUILT-IN-TYPE, and at least as of
+ ;; sbcl-0.pre7.54 or so, that's inconsistent with being a
+ ;; FUN-TYPE.)
+ (type (missing-arg) :type ctype)
+ ;; the transformation function. Takes the COMBINATION node and
+ ;; returns a lambda expression, or throws out.
+ (function (missing-arg) :type function)
+ ;; string used in efficiency notes
+ (note (missing-arg) :type string)
+ ;; T if we should emit a failure note even if SPEED=INHIBIT-WARNINGS.
+ (important nil :type (member t nil)))
+
+(defprinter (transform) type note important)
+
+;;; Grab the FUN-INFO and enter the function, replacing any old