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"

Change History (1)

comment:1 Changed 7 years ago by sjamaan

Resolution: invalid
Status: newclosed

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.

Note: See TracTickets for help on using tickets.