The following included forms are all macros. If you supply the 'dont-expand option to sassy, these forms will not be available.
< <= > >= = != zero? asciiz alt times until cs: ds: ss: es: fs: gs: _global_offset_table_ get-got got-offset got plt sym even? odd? positive? negative? when unless if3 cond load link-expand link dynamic-link auto-link
(< 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!)
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)
_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)
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))))))