Jonathan Kraut wrote:
>
> AND...I welcome all questions, comments, criticisms, witticisms...
Hi,
This is really nice. A few comments:
The implicit label definition may be problematic with frequent use
of macros, since a macro can silently overwrite a label. An explicit
label form such as (label _start ...) might be better.
Local labels for use within macros are indispensible. You can do this
implicitly by having all labels introduced within some scope be
replaced by a gensym in the output, or explicitly by naming them in a
scope. For example:
;; Implicit, LOOP becomes a distinct gensym inside the nearest
;; enclosing LOCAL form for each expansion of MY-WHILE.
;; Optional: LAMBDA has an implicit enclosing LOCAL form.
(macro my-while
(lambda (test . body)
`(local
(label loop
(if ,test
(begin ,@[EMAIL PROTECTED]
(jmp loop)))))))
;; Explicit, pre-declare LOOP to be a distinct gensym inside the
;; LOCAL block for each expansion of MY-WHILE.
(macro my-while
(lambda (test . body)
`(local loop
(label loop
(if ,test
(begin ,@[EMAIL PROTECTED]
(jmp loop)))))))
Also some sort of access to the current assembler state in Scheme
escapes would be nice, for instance so that you can do things like:
(data (str1 (bytes "hello world"))
(str2 (bytes (! (string-upcase (sassy-ref 'the-string1))))))
Do you have any intention of ****ting to other platforms? How about
sup****ting 64-bit mode? :)
--
Alex


|