[cffi-devel] Changes to the type system, among others.
Luis Oliveira
luismbo at gmail.com
Sat Aug 27 00:16:09 UTC 2005
On 26/ago/2005, at 23:06, Rayiner Hashem wrote:
> What are the ramifications of the anonymous type stuff? In particular,
> does this mean that defctype behaves more like C's "typedef" (in that
> the source type doesn't yet need to be defined)?
Hmm, I was going to say no. But actually that'll work for
DEFINE-FOREIGN-TYPE.
CFFI> (define-foreign-type foo () 'bar)
FOO
CFFI> (defctype bar :boolean)
BAR
CFFI> (translate-from-c 0 (parse-type 'foo))
NIL
CFFI> (translate-from-c 666 (parse-type 'foo))
T
That won't work for types defined with DEFCTYPE because of some
(premature?) optimizations though:
? (defctype foo unexistant-type)
> Error in process listener(1): Unknown CFFI type: UNEXISTANT-TYPE.
This has nothing to do with anonymous types anyway.
> Could any of the new type system changes achieve that result? The
> dependence of defctype on having its source type already defined makes
> handling automatic declaration generation quite complicated in a lot
> of idiomatic C code.
Use DEFINE-FOREIGN-TYPE instead of DEFCTYPE then, I'll remember to keep
that feature when I refactor this stuff.
> Since the dependence graph of C type definitions might have cycles, it
> becomes impossible to impose a total ordering on definitions. This
> isn't a problem when typedefs are fully resolved to their target types
> (as Verrazano does currently), but is a problem if you want the C-FFI
> binding to more closely resemble the C header file with regards to
> type naming.
Heh, I'm glad I helped then. My previous version of this type system
didn't do that, but I noticed that it wouldn't always behave correctly
because types defined with DEFINE-FOREIGN-TYPE can eventually resolve
to different types depending on, say, its arguments.
(define-foreign-type type-picker (type-number)
(case type-number
(1 :int)
(2 :float)))
(now this was a crappy example... Kenny I'll try to come up with better
examples for the manual, heh. I'll probably search real life examples.)
--
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/
Equipa Portuguesa do Translation Project
http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?team=pt
More information about the cffi-devel
mailing list