Macro Expansions
A.0.1 Comparisons
(< a b) => (seq (cmp a b) l!) (<= a b) => (seq (cmp a b) le!) (> a b) => (seq (cmp a b) g!) (>= a b) => (seq (cmp a b) ge!) (= a b) => (seq (cmp a b) e!) (!= a b) => (seq (cmp a b) ne!) (zero? a) => (seq (test a a) z!)
A.0.2 More Control Primitives
Though these are described in The Text Section as control ``primitives,'' they are actually macros.
(alt a b ...) => (inv (seq (inv a) (inv b) ...)) (times n e) => (begin e e ...) ; There will be n e's (until test body) => (while (inv test) body)
A.0.3 ELF helpers
_global_offset_table => _GLOBAL_OFFSET_TABLE_ ; an uppercase symbol get-got => (seq (call $eip) (pop ebx) (add ebx (reloc gotpc the-got 3)) (got-offset symbol values ...) => (reloc gotoff symbol (! (+ 0 values ...))) (got symbol) => (reloc got32 symbol) (plt symbol) => (reloc plt32 symbol) (sym symbol) => (reloc sym32 symbol)
A.0.4 Explicit Continuation Versions
The following macros use only explicit continuations to express the
semantics of the primitives seq, if, inv, and
begin. They are included in the documentation for elucidation,
but are not part of Sassy's core set of macros:
(macro seq-k (lambda tests (cond ((null? tests) '$win) ((null? (cdr tests)) (car tests)) (else `(with-win (seq-k ,@(cdr tests)) ,(car tests)))))) (macro inv-k (lambda (itm) `(with-win-lose $lose $win ,itm))) (macro if-k (lambda (test conseq altern) `(with-win-lose ,conseq ,altern ,test))) (macro begin-k (lambda body-tail (if (null? (cdr body-tail)) (car body-tail) `(with-win (begin-k ,@(cdr body-tail)) (with-lose $win ,(car body-tail))))))