I have no problems running this in the repl. However, I am getting the same issue when using the -exe flag. I believe the syntax-case file needs to be linked into the exe, but I haven't had any luck with that either.
I tried linking syntax-case with the source and using gcc to generate the exe per the manual:
bob@ubuntulaptop:~/home/bob/tmp$ gsc -:s -c gambit-syntax-test.scm
bob@ubuntulaptop:~/home/bob/tmp$ gsc -o syntax-case.c -c /usr/local/Gambit-C/current/lib/syntax-case.scm
bob@ubuntulaptop:~/home/bob/tmp$ gsc -link gambit-syntax-test.c syntax-case.c
bob@ubuntulaptop:~/home/bob/tmp$ gsc -obj gambit-syntax-test.c syntax-case.c syntax-case_.c
gambit-syntax-test.c:
syntax-case.c:
syntax-case_.c:
bob@ubuntulaptop:~/home/bob/tmp$ gcc gambit-syntax-test.o syntax-case.o syntax-case_.o -lgambc -lm -ldl -lutil
bob@ubuntulaptop:~/home/bob/tmp$ ./a.out
*** ERROR IN | gambit-syntax-test| -- Operator is not a PROCEDURE
(#!unbound2
'#(syntax-object while ((top) #(ribcage #(while) #((top)) #(while))))
'#<procedure #2>
'*top*)
bob@ubuntulaptop:~/home/bob/tmp$
;;;; file: gambit-syntax-test.scm
(define-syntax while
(syntax-rules ()
((while condition body ...)
(let loop ()
(if condition
(begin
body ...
(loop))
#f)))))
(define x 0)
(while (< x 5)
(set! x (+ x 1))
(print x))
On Friday, July 29, 2016 10:57 AM, ochi n <ochi12@hotmail.com> wrote:
I did try adding each one of these: (load "~~lib/syntax-case") (load "~~/lib/syntax-case") (include "~~lib/syntax-case.scm") at the beginning of the file, but I keep getting:
*** ERROR IN "/home/octavio/test.scm"@5.17 -- Ill-formed expression
Where line 5 is:
(syntax-rules ()
Thanks for your time!
From: Bob Coleman <bobcolem@yahoo.com>
Sent: Friday, July 29, 2016 11:22 AM
To: ochi n; gambit-list@iro.umontreal.ca
Subject: Re: [gambit-list] Error compiling macros
Try manually loading the syntax-case library in test.scm before you use it. With:
(load "~~/lib/syntax-case")
On Friday, July 29, 2016 8:34 AM, ochi n <ochi12@hotmail.com> wrote:
Hi all, I'm trying to compile a simple program using macros but for some reason it won't work.
This is the code in test.scm
(define-syntax while
(syntax-rules ()
((while condition body ...)
(let loop ()
(if condition
(begin
body ...
(loop))
#f)))))
(define x 0)
(while (< x 5)
(set! x (+ x 1))
(print x))
When I load the file into the interpreter (with the -:s option) it works, but when I try to compile it (using gambitc -:s -exe test.scm) I get the following error:
*** ERROR -- missing or invalid linking information for module "/usr/lib/gambit-c/_gambit"
/usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/../../../../lib/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
test.o: In function `___setup_mod':
test.c:(.text+0xa): undefined reference to `___G__20_test'
test.o: In function `___init_mod':
test.c:(.text+0x26): undefined reference to `___G__20_test'
test.o: In function `___H__20_test':
test.c:(.text+0x113): undefined reference to `___G__24_sc_2d_put_2d_cte'
test.c:(.text+0x181): undefined reference to `___G__24_sc_2d_put_2d_cte'
test.c:(.text+0x1a2): undefined reference to `___G__24_sc_2d_put_2d_cte'
test.c:(.text+0x1f3): undefined reference to `___G__24_sc_2d_put_2d_cte'
test.c:(.text+0x214): undefined reference to `___G_x'
test.c:(.text+0x24d): undefined reference to `___G_x'
test.c:(.text+0x3a6): undefined reference to `___G_x'
test.c:(.text+0x450): undefined reference to `___G_x'
test.c:(.text+0x59b): undefined reference to `___G__24_syntax_2d_dispatch'
test.c:(.text+0x60f): undefined reference to `___G__24_syntax_2d_dispatch'
test.c:(.text+0x6a0): undefined reference to `___G_syntax_2d_error'
test.c:(.text+0x6fa): undefined reference to `___G_syntax_2d_error'
test.o: In function `____20_test':
test.c:(.text+0xd38): undefined reference to `___S__2a_top_2a_'
test.c:(.text+0xd46): undefined reference to `___S_any'
test.c:(.text+0xd62): undefined reference to `___S_body'
test.c:(.text+0xd70): undefined reference to `___S_condition'
test.c:(.text+0xd8c): undefined reference to `___S_each_2d_any'
test.c:(.text+0xd9a): undefined reference to `___S_global'
test.c:(.text+0xdc4): undefined reference to `___S_loop'
test.c:(.text+0xdd2): undefined reference to `___S_ribcage'
test.c:(.text+0xdee): undefined reference to `___S_syntax_2d_object'
test.c:(.text+0xe18): undefined reference to `___S_top_2d_ribcage'
test.c:(.text+0xe34): undefined reference to `___S_x'
collect2: error: ld returned 1 exit status
I tried compiling with the interactive mode using
(compile-file-to-target "test.scm")
(quit)
gambitc -exe test.c
and it compiles well, but when I try to run the exe I get:
*** ERROR IN | test| -- Operator is not a PROCEDURE
(#!unbound
'#(syntax-object while ((top) #(ribcage #(while) #((top)) #(while))))
'#<procedure #2>
'*top*)
No matter how hard I try I can't compile any code that makes use of macros. Any help appreciated!
(I'm using Arch Linux and I installed gambit from Arch's repositroy, everything else apart from macros works well)
_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list