[plt-scheme] C enum syntax
dvanhorn at emba.uvm.edu wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>I've been using the C FFI and handling enumerated constants like so,
which seems
>to work fine:
>
> (define some-const ((c-lambda () int "___result = SOME_CONST;")))
>
>But I would rather do something like:
>
> (define some-const (c-enum "SOME_CONST"))
>
>So I tried:
>
> (define-syntax (c-enum stx)
> (syntax-case stx ()
> ((_ c)
> (quasisyntax
> ((c-lambda () int
> (unsyntax (format "___result = ~a;" (syntax c)))))))))
>
>Which is apparently not correct. Could someone shed some light on
what's wrong
>with the `c-enum' syntax above? Also, is there a better approach to
enums in
>scheme?
>
>Thanks,
>David
>
To your first question, I believe you have to turn the string created with
format into a syntax object with datum->syntax-object; as well, the second
argument to format should be a string, not a syntax object, so you need to
use syntax-object->datum. Here is the corrected version:
(define-syntax (c-enum stx)
(syntax-case stx ()
((_ ?c)
#`((c-lambda () int
#,(datum->syntax-object
stx (format "___result = ~A;"
(syntax-object->datum #'?c))))))))
To your second question, I don't know; I've never actually used the FFI.
[oops: didn't send it to the list at first]