anchor.diff:  
   (in-package #:org.shirakumo.abcd)
   
  -(defvar *default-flags* '(:errors :all))
  +(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-function :initarg :compiler-function :accessor operation-compiler-function)
  +   (compiler :initarg :compiler :accessor operation-compiler))
     (:default-initargs
      :flags ()
  -   :compiler-arguments ()
  +   :compiler NIL
      :compiler-function #'c-compile))
   
  -(defvar *level* 0)
  +(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))))
   
  -(defmethod asdf:perform :around ((op c-compiler-op) (c asdf:component))
  -  (let ((*level* (1+ *level*)))
  -    (format T "~&[~d] ~a~%" *level* (asdf:action-description op c))
  -    (call-next-method)))
  +(define-asdf/interface-class compute-flags-op (asdf:upward-operation)
  +  ())
   
  -(defmethod execute ((op c-compiler-op) inputs outputs)
  -  (loop for input in inputs
  -        for output in outputs
  -        do (apply (operation-compiler-function op) T input output
  -                  (merge-flags (operation-direct-flags op)
  -                               (operation-effective-flags op)))))
  +(defmethod asdf:operation-done-p ((op compute-flags-op) component)
  +  NIL)
   
  -(define-asdf/interface-class preprocess-op (c-compiler-op asdf:sideway-operation)
  -  ((asdf:sideway-operation :initform NIL :allocation :class))
  +(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))
   
  
positive.code:   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))
    (: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))
    (:default-initargs
     :compiler-function #'c-link))
  
  
negative.code: 
  (defmethod asdf:action-description ((op link-op) (c asdf:component))
    (format nil "~@<linking ~3i~_~A~@:>" c))
  
  #+:verbose
  (defmethod asdf:perform :before (op component)
    (v:trace :abcd.build "~a" (asdf:action-description op component)))
  