anchor.diff:           (format t "Shortened segment by ~A bytes due to extra argument T.~%" bytes-left)
            (fill-up-remaining-segment out bytes-left))))
   
  +(defun fill-segment (out size may-be-shorter?)
  +  (& (zero? size)
  +     (assembler-error "SEGMENT size must be larger than 0."))
  +  (format t "Filling up segment of size ~a…~%" size)
  +  (try-to-assign-segment-block out size may-be-shorter?))
  +
   (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)))))
  +  (? *assign-blocks-to-segments?*
  +     (fill-segment out (assemble-expression ..x. :ensure? t)
  +                       (assemble-expression ...x. :ensure? t :not-zero? t))
  +     (enqueue *segments* (make-segment :size (assemble-expression ..x. :ensure? t)
  +                                       :may-be-shorter? (assemble-expression ...x. :ensure? t :not-zero? t)))))
   
   (defun assemble-end (x)
     ; TODO a proper parser would do wonders here.
  
positive.code: 
  (defvar *sourceblock-stack* nil)
  
  (defvar *unassigned-segment-blocks* nil)
  (defvar *assign-blocks-to-segments?* nil)
  
  
negative.code:          nil
      (format t "Pass ~A…~%" *pass*)
      (= *label-changed?* nil
         *unassigned-segment-blocks* unassigned-segment-blocks
         *segments* segments)
      (assemble-pass-to-file out-name dump-name x)
      (++! *pass*))
    (awhen *sourceblock-stack*
  