Opened 6 years ago

Last modified 5 weeks ago

#938 assigned enhancement

Feature Request: Load type files for units

Reported by: megane Owned by: felix
Priority: minor Milestone: 5.1
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)

load-unit-type-files.patch (633 bytes) - added by megane 6 years ago.
a hack
search-for-types-files-from-include-paths.patch (703 bytes) - added by megane 6 years ago.
a better hack

Download all attachments as: .zip

Change History (6)

Changed 6 years ago by megane

a hack

comment:1 Changed 6 years ago by felix

  • Owner set to felix
  • Status changed from new to assigned

Changed 6 years ago by megane

a better hack

comment:2 Changed 3 years ago by sjamaan

  • Milestone changed from someday to 5.1

Seems to be somehow related to the new unit/module handling in 5.0

comment:3 Changed 2 years ago by sjamaan

  • Estimated difficulty set to medium

comment:4 Changed 5 weeks ago by megane

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	  	<--
Note: See TracTickets for help on using tickets.