(cond ((and (pair? o) (global? (cdr o))) (string-append "&" (global->string o)))
((and (not string?) (not function?)) (stderr "warning: unresolved label: ~s\n" label))
(else (string-append "&" label))))))
+ (define (display-align size)
+ (let ((alignment (- 4 (modulo size 4))))
+ (when (> alignment 0)
+ (display " ")
+ (display-join (map text->M1 (map (const 0) (iota alignment))) " "))))
(let* ((label (cond
((and (pair? (car o)) (eq? (caar o) #:string))
(string->label (car o)))
(or (and (not (memq ch '(#\tab #\newline)))
(< (char->integer ch) #x20))
(>= (char->integer ch) #x80))) string-data)))
- (display (string-append "\"" (list->string string-data) "\""))
- (display-join (map text->M1 data) " "))
+ (let ((text string-data))
+ (display (string-append "\"" (list->string string-data) "\""))
+ (display-align (1+ (length string-data))))
+ (let ((text (map text->M1 data)))
+ (display-join text " ")
+ (display-align (length text))))
(newline)))
(display "M1: functions\n" (current-error-port))
(for-each write-function (filter cdr functions))