unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Guile module system problem
@ 2009-01-20 10:18 Panicz Maciej Godek
  2009-01-20 12:15 ` Neil Jerram
  0 siblings, 1 reply; 7+ messages in thread
From: Panicz Maciej Godek @ 2009-01-20 10:18 UTC (permalink / raw)
  To: guile-user

Hi, I've been trying to move some of my code into
loadable guile modules. I made a directory "modules"
in my project tree and moved the module in there.

I ran into some problems. Here's how I load the
module:
(set! %load-path (cons "." %load-path))
(load-module (modules goose))
At this point, guile signals an error (unbound variable).

Here's how the module looks like:
(define-module (modules goose)
  :use-module (oop goops)
  :replace (slot-ref))

(define slot-ref (make-procedure-with-setter slot-ref slot-set!))

And at this point guile complains that slot-ref is unbound.

I've been trying several combinations, like inserting
(use-modules (oop goops)) before the redefinition,
but the error seems to be imvunerable to this.

Regards
M




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-20 10:18 Guile module system problem Panicz Maciej Godek
@ 2009-01-20 12:15 ` Neil Jerram
  2009-01-20 13:07   ` Panicz Maciej Godek
  0 siblings, 1 reply; 7+ messages in thread
From: Neil Jerram @ 2009-01-20 12:15 UTC (permalink / raw)
  To: Panicz Maciej Godek; +Cc: guile-user

2009/1/20 Panicz Maciej Godek <godek.maciek@gmail.com>:
> Hi, I've been trying to move some of my code into
> loadable guile modules. I made a directory "modules"
> in my project tree and moved the module in there.
>
> I ran into some problems. Here's how I load the
> module:
> (set! %load-path (cons "." %load-path))
> (load-module (modules goose))
> At this point, guile signals an error (unbound variable).

Please try `use-modules' instead of `load-module'.

      Neil




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-20 12:15 ` Neil Jerram
@ 2009-01-20 13:07   ` Panicz Maciej Godek
  2009-01-20 16:52     ` Panicz Maciej Godek
  0 siblings, 1 reply; 7+ messages in thread
From: Panicz Maciej Godek @ 2009-01-20 13:07 UTC (permalink / raw)
  To: Neil Jerram; +Cc: guile-user

>> Hi, I've been trying to move some of my code into
>> loadable guile modules. I made a directory "modules"
>> in my project tree and moved the module in there.
>>
>> I ran into some problems. Here's how I load the
>> module:
>> (set! %load-path (cons "." %load-path))
>> (load-module (modules goose))
>> At this point, guile signals an error (unbound variable).
>
> Please try `use-modules' instead of `load-module'.

Well, I actually did that, I just made a mistake retyping
the code to the e-mail.

Eventually I have found the reason for this weird behavior:
since the slot-ref is present in the module's replace list,
it doesn't get exported from the goops module.

The solution is to refer to the goops's slot-ref function
in some other way (perhaps using the @ operator)

Thanks
M.




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-20 13:07   ` Panicz Maciej Godek
@ 2009-01-20 16:52     ` Panicz Maciej Godek
  2009-01-21 16:55       ` Ludovic Courtès
  0 siblings, 1 reply; 7+ messages in thread
From: Panicz Maciej Godek @ 2009-01-20 16:52 UTC (permalink / raw)
  To: Neil Jerram; +Cc: guile-user

> The solution is to refer to the goops's slot-ref function
> in some other way (perhaps using the @ operator)

Yet it's still not working. Now the module looks more or less
like this:
(define-module (modules goose)
  :use-module (oop goops)
  :replace (slot-ref))

(define slot-ref (make-procedure-with-setter (@ (oop goops) slot-ref)
slot-set!))

and the error I get when I try to use that module, is:
ERROR: invalid syntax #<variable 7fd6dd0ca610 value:
#<primitive-procedure slot-ref>>

What is wrong?




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-20 16:52     ` Panicz Maciej Godek
@ 2009-01-21 16:55       ` Ludovic Courtès
  2009-01-21 17:51         ` Panicz Maciej Godek
  0 siblings, 1 reply; 7+ messages in thread
From: Ludovic Courtès @ 2009-01-21 16:55 UTC (permalink / raw)
  To: guile-user

Hi,

"Panicz Maciej Godek" <godek.maciek@gmail.com> writes:

> Yet it's still not working. Now the module looks more or less
> like this:
> (define-module (modules goose)
>   :use-module (oop goops)
>   :replace (slot-ref))
>
> (define slot-ref (make-procedure-with-setter (@ (oop goops) slot-ref)
> slot-set!))
>
> and the error I get when I try to use that module, is:
> ERROR: invalid syntax #<variable 7fd6dd0ca610 value:
> #<primitive-procedure slot-ref>>

It works fine here with Guile 1.9 (`master').  I would expect it to work
as well with 1.8.  Which version are you using?

Can you check whether evaluating the code above actually works
(directly, i.e., not via `(use-modules (modules goose))')?

Thanks,
Ludo'.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-21 16:55       ` Ludovic Courtès
@ 2009-01-21 17:51         ` Panicz Maciej Godek
  2009-02-05 22:18           ` Neil Jerram
  0 siblings, 1 reply; 7+ messages in thread
From: Panicz Maciej Godek @ 2009-01-21 17:51 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-user

Yellu :)

>> Yet it's still not working. Now the module looks more or less
>> like this:
>> (define-module (modules goose)
>>   :use-module (oop goops)
>>   :replace (slot-ref))
>>
>> (define slot-ref (make-procedure-with-setter (@ (oop goops) slot-ref)
>> slot-set!))
>>
>> and the error I get when I try to use that module, is:
>> ERROR: invalid syntax #<variable 7fd6dd0ca610 value:
>> #<primitive-procedure slot-ref>>
>
> It works fine here with Guile 1.9 (`master').  I would expect it to work
> as well with 1.8.  Which version are you using?

I'm using 1.8.3 (from ubuntu repository)

> Can you check whether evaluating the code above actually works
> (directly, i.e., not via `(use-modules (modules goose))')?

Yes, when I'm evaluating it directly, everything works just fine.

I've found a possible reason, though. I didn't write that in
the module definition I also use syntax from (ice-9 syncase),
so it actually looks more like this:
(define-module (modules goose)
  :use-syntax (ice-9 syncase)
  :use-module (oop goops)
  :replace (slot-ref))

Now you should get the error right :)
(sorry for this understatement)

When I place (use-syntax (ice-9 syncase)) *after* the
slot-ref definition, it seems to work well.




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Guile module system problem
  2009-01-21 17:51         ` Panicz Maciej Godek
@ 2009-02-05 22:18           ` Neil Jerram
  0 siblings, 0 replies; 7+ messages in thread
From: Neil Jerram @ 2009-02-05 22:18 UTC (permalink / raw)
  To: Panicz Maciej Godek; +Cc: Ludovic Courtès, guile-user, Guile Development

[-- Attachment #1: Type: text/plain, Size: 933 bytes --]

Panicz Maciej Godek <godek.maciek@gmail.com> writes:

>>> (define slot-ref (make-procedure-with-setter (@ (oop goops) slot-ref)
>>> slot-set!))
>>>
>>> and the error I get when I try to use that module, is:
>>> ERROR: invalid syntax #<variable 7fd6dd0ca610 value:
>>> #<primitive-procedure slot-ref>>

> I've found a possible reason, though. I didn't write that in
> the module definition I also use syntax from (ice-9 syncase),
> so it actually looks more like this:
> (define-module (modules goose)
>   :use-syntax (ice-9 syncase)
>   :use-module (oop goops)
>   :replace (slot-ref))
>
> Now you should get the error right :)
> (sorry for this understatement)
>
> When I place (use-syntax (ice-9 syncase)) *after* the
> slot-ref definition, it seems to work well.

I have a fix for this, which I think is correct.  (Not 100% sure, as
syncase is pretty tricky.)  Please let me know if you have any
comments.

Regards,
        Neil


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-Allow-to-work-with-ice-9-syncase.patch --]
[-- Type: text/x-diff, Size: 2392 bytes --]

From f8d80072759961eaecfa95e4f9446a5dc1016ca8 Mon Sep 17 00:00:00 2001
From: Neil Jerram <neil@ossau.uklinux.net>
Date: Thu, 5 Feb 2009 22:11:26 +0000
Subject: [PATCH] Allow @ to work with (ice-9 syncase)

(Reported by Panicz Maciej Godek.)

* test-suite/tests/syncase.test ("@ works with syncase"): New test.

* ice-9/syncase.scm (guile-macro): When a Guile macro transformer
  produces a variable, don't pass it through sc-expand.
---
 NEWS                          |    7 +++++++
 THANKS                        |    1 +
 ice-9/syncase.scm             |    8 +++++---
 test-suite/tests/syncase.test |    3 +++
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index 71e9dc0..f3362ce 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,13 @@ Changes in 1.8.7 (since 1.8.6)
 ** Fix build problem when scm_t_timespec is different from struct timespec
 ** Fix build when compiled with -Wundef -Werror
 
+** Allow @ macro to work with (ice-9 syncase)
+
+Previously, use of the @ macro in a module whose code is being
+transformed by (ice-9 syncase) would cause an "Invalid syntax" error.
+Now it works as you would expect (giving the value of the specified
+module binding).
+
 \f
 Changes in 1.8.6 (since 1.8.5)
 
diff --git a/THANKS b/THANKS
index feafc12..84c957b 100644
--- a/THANKS
+++ b/THANKS
@@ -41,6 +41,7 @@ For fixes or providing information which led to a fix:
           Peter Gavin
            Eric Gillespie, Jr
          Didier Godefroy
+  Panicz Maciej Godek
            John Goerzen
            Mike Gran
          Szavai Gyula
diff --git a/ice-9/syncase.scm b/ice-9/syncase.scm
index 6ee4d16..39cf273 100644
--- a/ice-9/syncase.scm
+++ b/ice-9/syncase.scm
@@ -146,9 +146,11 @@
 		      (let ((e ((macro-transformer m)
 				e
 				(append r (list eval-closure)))))
-			(if (null? r)
-			    (sc-expand e)
-			    (sc-chi e r w))))))))))
+			(if (variable? e)
+			    e
+			    (if (null? r)
+				(sc-expand e)
+				(sc-chi e r w)))))))))))
 
 (define generated-symbols (make-weak-key-hash-table 1019))
 
diff --git a/test-suite/tests/syncase.test b/test-suite/tests/syncase.test
index 1184f7b..c681fc3 100644
--- a/test-suite/tests/syncase.test
+++ b/test-suite/tests/syncase.test
@@ -34,3 +34,6 @@
 
 (pass-if "basic syncase macro"
   (= (plus 1 2 3) (+ 1 2 3)))
+
+(pass-if "@ works with syncase"
+  (eq? run-test (@ (test-suite lib) run-test)))
-- 
1.5.6.5


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-02-05 22:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-20 10:18 Guile module system problem Panicz Maciej Godek
2009-01-20 12:15 ` Neil Jerram
2009-01-20 13:07   ` Panicz Maciej Godek
2009-01-20 16:52     ` Panicz Maciej Godek
2009-01-21 16:55       ` Ludovic Courtès
2009-01-21 17:51         ` Panicz Maciej Godek
2009-02-05 22:18           ` Neil Jerram

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).