anchor.diff:    NIL)
   
   (define-asdf/interface-class assemble-op (c-compiler-op asdf:selfward-operation asdf:sideway-operation asdf:downward-operation)
  -  ((asdf:selfward-operation :initform 'preprocess-op :allocation :class)
  -   (asdf:sideway-operation :initform NIL :allocation :class)
  -   (asdf:downward-operation :initform NIL :allocation :class))
  +  ((asdf:selfward-operation :initform '(compute-flags-op preprocess-op) :allocation :class))
     (:default-initargs
      :compiler-function #'c-assemble))
   
   (defmethod asdf:perform ((op assemble-op) component)
     NIL)
   
  -(define-asdf/interface-class link-op (c-compiler-op asdf:downward-operation)
  -  ((asdf:downward-operation :initform 'assemble-op :allocation :class))
  +(define-asdf/interface-class link-op (c-compiler-op asdf:selfward-operation asdf:downward-operation)
  +  ((asdf:selfward-operation :initform 'compute-flags-op :allocation :class)
  +   (asdf:downward-operation :initform 'assemble-op :allocation :class))
     (:default-initargs
      :compiler-function #'c-link))
   
  
positive.code: 
  (defmethod asdf:action-description ((op link-op) (c asdf:component))
    (format nil "~@<linking ~3i~_~A~@:>" c))
  
negative.code: 
  (in-package #:org.shirakumo.abcd)
  
  (defvar *default-flags* '(:warnings :all))
  
  (define-asdf/interface-class c-compiler-op (asdf:operation)
    ((direct-flags :initarg :flags :accessor operation-direct-flags)
     (effective-flags :initform *default-flags* :accessor operation-effective-flags)
     (compiler-function :initarg :compiler-function :accessor operation-compiler-function)
     (compiler :initarg :compiler :accessor operation-compiler))
    (:default-initargs
     :flags ()
     :compiler NIL
     :compiler-function #'c-compile))
  
  (defmethod execute ((op c-compiler-op) inputs outputs)
    (let ((flags (merge-flags (operation-direct-flags op)
                              (operation-effective-flags op))))
      (loop for input in inputs
            for output in outputs
            do (apply (operation-compiler-function op)
                      (or (operation-compiler op) T)
                      (minimal-shell-namestring input)
                      (minimal-shell-namestring output)
                      flags))))
  
  (define-asdf/interface-class compute-flags-op (asdf:upward-operation)
    ())
  
  (defmethod asdf:operation-done-p ((op compute-flags-op) component)
    NIL)
  
  (defmethod asdf:perform ((op compute-flags-op) component)
    NIL)
  
  (define-asdf/interface-class preprocess-op (c-compiler-op asdf:selfward-operation asdf:sideway-operation)
    ((asdf:selfward-operation :initform 'compute-flags-op :allocation :class))
    (:default-initargs
     :compiler-function #'c-preprocess))
  
  