unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#12202: psyntax defeats autoload
@ 2012-08-14 16:14 Ludovic Courtès
  2013-03-05 16:45 ` Andy Wingo
  0 siblings, 1 reply; 4+ messages in thread
From: Ludovic Courtès @ 2012-08-14 16:14 UTC (permalink / raw)
  To: 12202

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

Hello!

Consider this module:

--8<---------------cut here---------------start------------->8---
(define-module (foo) #:autoload (does-not-exist) (baz))
(define (chbouib) (baz))
(pk 'hello)
--8<---------------cut here---------------end--------------->8---

Trying to evaluate it fails this way:

--8<---------------cut here---------------start------------->8---
$ guile --no-auto-compile t.scm 
Backtrace:
In ice-9/boot-9.scm:

[...]

 292: 3 [get-global-definition-hook baz (hygiene foo)]
In unknown file:
   ?: 2 [module-variable #<directory (foo) b3b510> baz]
In ice-9/boot-9.scm:
2732: 1 [b #<autoload (does-not-exist) b3b3f0> baz #f]
In unknown file:
   ?: 0 [scm-error misc-error #f ...]

ERROR: In procedure scm-error:
ERROR: missing interface for module (does-not-exist)
--8<---------------cut here---------------end--------------->8---

... which defeats the whole purpose of autoloads.

What about something along these lines (untested)?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1217 bytes --]

diff --git a/module/ice-9/psyntax.scm b/module/ice-9/psyntax.scm
index 6c264a6..8a30f82 100644
--- a/module/ice-9/psyntax.scm
+++ b/module/ice-9/psyntax.scm
@@ -289,15 +289,20 @@
         (lambda (symbol module)
           (if (and (not module) (current-module))
               (warn "module system is booted, we should have a module" symbol))
-          (let ((v (module-variable (if module
+          (let ((m (if module
                        (resolve-module (cdr module))
-                                        (current-module))
-                                    symbol)))
+                       (current-module))))
+            (case (module-kind m)
+              ((autoload)
+               ;; don't try to actually load the module
+               #t)
+              (else
+               (let ((v (module-variable m symbol)))
                  (and v (variable-bound? v)
                       (let ((val (variable-ref v)))
                         (and (macro? val) (macro-type val)
                              (cons (macro-type val)
-                              (macro-binding val)))))))))
+                                   (macro-binding val))))))))))))
 
 
     (define (decorate-source e s)

[-- Attachment #3: Type: text/plain, Size: 21 bytes --]


Thanks,
Ludo’.

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

end of thread, other threads:[~2013-03-14 13:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-14 16:14 bug#12202: psyntax defeats autoload Ludovic Courtès
2013-03-05 16:45 ` Andy Wingo
2013-03-13  9:01   ` Andy Wingo
2013-03-14 13:21     ` Ludovic Courtès

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).