anchor.diff:                          ,@(unless operands
                               `((declare (ignore args))))
                           ,@(loop for cap in required-capabilities
  -                                collect `(assert (gethash ',cap *enabled-caps*)))
  +                                collect `(check-cap ,cap))
                           (with-spirv-instruction (,ext-inst)
                             (asm-type type)
                             (asm-id dest)
  
positive.code:          (*defined-globals* (make-hash-table :test #'equal))
           (*current-section* 1)
           (*current-form* nil)
           (*id-conflicts* nil))
       (flet ((body () ,@body))
         (let ((out (with-spirv-output ()
                      (body))))
           (when *id-conflicts*
             ;; we had explicit IDs and automatic IDs in same file, and
             ;; they overlapped, so dump the spv again using the IDs
             ;; calculated during first attempt
             (format t "ID conflicts, running 2nd pass...~%")
             (setf *id-conflicts* nil)
             (setf out (with-spirv-output ()
                         (body)))
             (assert (not *id-conflicts*)))
           out))))
  
  (defun translate-symbol-name (s)
  
negative.code: (defvar *current-section*) ;; bind to 1
  ;; just for debugging
  (defvar *current-form* nil)
  (defvar *need-second-pass*)
  (defvar *automatic-entry-point-deps*)
  (defvar *automatic-caps*)
  
  (defmacro with-ll-asm-context (() &body body)
    `(let ((*next-id* 0)
  