Opened 8 years ago
Closed 7 years ago
#1326 closed defect (invalid)
load then import of module inside eval fails to find module
Reported by: | Caolan McMahon | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | someday |
Component: | unknown | Version: | 4.11.0 |
Keywords: | Cc: | ||
Estimated difficulty: |
Description
test-module.scm
(module test-module * (import chicken scheme) (define (hello name) (string-append "Hello, " name)))
In csi:
#;1> (eval '(begin (load "test-module.scm") (import test-module) (hello "world"))) Error: (import) during expansion of (import ...) - cannot import from undefined module: test-module Call history: <syntax> (eval (quote (begin (load "test-module.scm") (import test-module) (hello "world")))) <syntax> (quote (begin (load "test-module.scm") (import test-module) (hello "world"))) <syntax> (##core#quote (begin (load "test-module.scm") (import test-module) (hello "world"))) <eval> (eval (quote (begin (load "test-module.scm") (import test-module) (hello "world")))) <syntax> (begin (load "test-module.scm") (import test-module) (hello "world")) <syntax> (##core#begin (load "test-module.scm") (import test-module) (hello "world")) <syntax> (load "test-module.scm") <syntax> (import test-module) <--
This code works if I enter it directly into csi without the eval.
Interestingly, it also works if I split the eval into two steps:
#;1> (eval '(begin (load "test-module.scm"))) ; loading test-module.scm ... ; loading /usr/lib/chicken/8/chicken.import.so ... #;2> (eval '(begin (import test-module) (hello "world"))) "Hello, world"
Note: See
TracTickets for help on using
tickets.
That's because import is evaluated at macro-expansion time, which it has to do in order to be able to correctly rename identifiers occurring in the program. I'm fairly sure this is not a bug.