Opened 9 years ago
Closed 8 years ago
#1328 closed defect (invalid)
(import (only ...)) strange behaviour
| Reported by: | Caolan McMahon | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | someday |
| Component: | unknown | Version: | 4.11.0 |
| Keywords: | Cc: | ||
| Estimated difficulty: |
Description
I noticed that I had to manually (use posix) before loading the LMDB module. But the module already does: (import (only posix create-directory delete-directory))
That has led to the following test cases:
;; create-directory not defined (import (only posix create-directory)) (print create-directory) (print delete-directory)
;; delete-directory is imported when it shouldn't be (use (only posix create-directory)) (print create-directory) (print delete-directory)
And this shows how I manually (use posix) beforehand to get around this issue:
;; module A (a.scm) (module a * (import chicken scheme) (import (only posix create-directory)) (print create-directory) (print delete-directory))
(use posix) (load "a.scm") (import a)
This now correctly imports _only_ the create-directory procedure. If I remove the (use posix) line, it will fail as in the first example. I can also replace (use posix) with (require-library posix) and it will work.
These examples were just run in csi - however I originally found it by using the system's installed lmdb module inside my own module compiled via csc.

You need
userather thanimport.importdoesn't load code, it only loads the so-called "import library" which registers which identifiers are exported by the module.This is a bit of a FAQ/pitfall/caveat in CHICKEN 4. In CHICKEN 5, we've made
useandimportbehave identically because it is rarely actually useful to only load the import library but not the code.