-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 7-Feb-07, at 7:46 PM, Raffael Cavallaro wrote:
A simple example will show the problem I'm running into - is there any workaround?
rafimac:/scheme raffaelc$ cat test.scm (c-declare #<<c-declare-end double test(double afloat, double anotherfloat) { return (afloat + anotherfloat); } c-declare-end )
(define test (c-lambda (double double) double "test"))rafimac:/scheme raffaelc$ rafimac:/scheme raffaelc$ gsc Gambit Version 4.0 beta 20
(compile-file "/scheme/test.scm")
#t
(load "/scheme/test")
"/scheme/test.o1"
(test 2.0 2.0)
(exit)
rafimac:/scheme raffaelc$ gsc Gambit Version 4.0 beta 20
(load "~~/syntax-case")
"/usr/local/Gambit-C/4.0b20/syntax-case.scm"
(compile-file "/scheme/test.scm")
*** ERROR IN "/scheme/test.scm"@1.1 -- Argument to 'c-declare' must be a string #f
That's a problem with the syntax-case expander, it has nothing to do with the #<< syntax. Unfortunately the syntax-case expander turns things like
(foo "abc")
into
(foo '"abc")
which is incorrect when foo is c-declare, or include, etc. It's probably easy to fix for the implementors of syntax-case (Dybvig et al), but I shudder at the thought of figuring out which of the over 40 usages of 'quote in syntax-case.scm has to be made conditional on the object being quoted (the quote should be dropped for strings, numbers, booleans, and characters).
Marc