Summary

load then import of module inside eval fails to find module

Metadata

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"

Changes and comments

[2017-08-25 14:29:15 UTC] sjamaan changed status from new to closed

[2017-08-25 14:29:15 UTC] sjamaan set resolution to invalid

[2017-08-25 14:29:15 UTC] sjamaan wrote:

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.