anchor.diff:  
   (defvar *sourceblock-stack* nil)
   
  +(defstruct segment
  +  size
  +  (may-be-shorter? nil)
  +  (sourceblocks nil))
  +
  +(defvar *segments* nil)
   (defvar *unassigned-segment-blocks* nil)
   (defvar *assign-blocks-to-segments?* nil)
   
  
positive.code:          (format t "Shortened segment by ~A bytes due to extra argument T.~%" bytes-left)
           (fill-up-remaining-segment out bytes-left))))
  
  (defun assemble-segment (out x)
    (| ..x
       (assembler-error "SEGMENT expects a size."))
    (when *assign-blocks-to-segments?*
      (alet (assemble-expression ..x. :ensure? t)
        (& (zero? !)
           (assembler-error "SEGMENT size must be larger than 0."))
        (format t "Filling up segment of size ~a…~%" !)
        (try-to-assign-segment-block out ! (assemble-expression ...x. :ensure? t :not-zero? t)))))
  
  (defun assemble-end (x)
    ; TODO a proper parser would do wonders here.
  
negative.code:                                                  (>= (sourceblock-size a)
                                                       (sourceblock-size b))))))
  
  (defun assemble-parsed-files-0 (out-name dump-name x &key (unassigned-segment-blocks nil)
                                                            (segments (make-queue)))
    (clear-labels)
    (= *pass* 0)
    (while (| *label-changed?*
  