Opened 13 years ago
Last modified 2 years ago
#938 assigned enhancement
Feature Request: Load type files for units
| Reported by: | megane | Owned by: | felix winkelmann |
|---|---|---|---|
| Priority: | minor | Milestone: | 6.0.0 |
| Component: | compiler | Version: | 4.8.x |
| Keywords: | types units | Cc: | |
| Estimated difficulty: | medium |
Description
Currently type files for units not installed in the repository are not loaded.
I've attached a patch that does something like this, but it's just a quick hack that works for my needs.
You should probably use ##sys#resolve-include-filename to find the types file, like it's used to find the inline files.
Attachments (2)
Change History (10)
Changed 13 years ago by
| Attachment: | load-unit-type-files.patch added |
|---|
comment:1 Changed 13 years ago by
| Owner: | set to felix winkelmann |
|---|---|
| Status: | new → assigned |
Changed 13 years ago by
| Attachment: | search-for-types-files-from-include-paths.patch added |
|---|
a better hack
comment:2 Changed 10 years ago by
| Milestone: | someday → 5.1 |
|---|
Seems to be somehow related to the new unit/module handling in 5.0
comment:3 Changed 9 years ago by
| Estimated difficulty: | → medium |
|---|
comment:4 Changed 7 years ago by
I think this issue was me confusing -I as an option to define additional paths CHICKEN should use to look for modules, when it's actually for the include form only.
CHICKEN only looks for modules in the egg repository and current directory. For modules in the current directory it does not automatically import .types or .inline files. You have to use -consult-types-file and -consult-inline-file for those, respectively.
Maybe the -I could be made to specify additional paths to consult modules from, if that makes sense.
I'm OK if this issue is closed as invalid, though.
The following shows that .types files are not automatically loaded.
$ ./run.sh
::::::::::::::
src/main.scm
::::::::::::::
(cond-expand
(chicken-5 (import (chicken base))
(import mod))
(else (import chicken)
(use mod)))
(print "--- main ---")
(compiler-typecase (foo 1)
(symbol (print 'ok))
(* (error "was not symbol")))
::::::::::::::
src/mod.scm
::::::::::::::
(module
mod
(foo)
(import scheme)
(cond-expand
(chicken-5 (import (chicken base) (chicken type)))
(else (import chicken)))
(: foo (* -> symbol))
(define (foo x)
(if (fixnum? x)
'fixnum
'not-fixnum))
)
::::::::::::::
run.sh
::::::::::::::
#!/usr/bin/env bash
set -e
set -o pipefail
more src/*.scm run.sh | cat
echo "### BUILD ###"
rm -rf build
mkdir -p build
cd build
csc -s -J -O3 -ot mod.types ../src/mod.scm -o mod.so
csc -O3 ../src/main.scm -o main
more *.import.scm *.types | cat
./main
### BUILD ###
::::::::::::::
mod.import.scm
::::::::::::::
;;;; mod.import.scm - GENERATED BY CHICKEN 5.0.0rc4 -*- Scheme -*-
(##sys#register-compiled-module
'mod
'mod
(scheme#list)
'((foo . mod#foo))
(scheme#list)
(scheme#list))
;; END OF FILE
::::::::::::::
mod.types
::::::::::::::
; GENERATED BY CHICKEN 5.0.0rc4 FROM ../src/mod.scm
(mod#foo (#(procedure) mod#foo (*) symbol))
; END OF FILE
--- main ---
Error: was not symbol
Call history:
../src/main.scm:3: chicken.load#load-extension
../src/main.scm:7: chicken.base#print
../src/main.scm:8: mod#foo
../src/main.scm:10: chicken.base#error <--
comment:5 Changed 7 years ago by
| Milestone: | 5.1 → 5.2 |
|---|
comment:6 Changed 6 years ago by
| Milestone: | 5.2 → 5.3 |
|---|
comment:7 Changed 5 years ago by
| Milestone: | 5.3 → 5.4 |
|---|
comment:8 Changed 2 years ago by
| Milestone: | 5.4 → 6.0.0 |
|---|

a hack