Next: expander specs retrieving, Up: expander specs [Index]
The internal representation of object–types is as hierarchy of
record–types having the type <object-type-spec> as base. The
hierarchy of record–types is:
<object-type-spec>
|
+--> <core-type-spec>
|
+--> <struct-type-spec>
|
+--> <record-type-spec>
|
+--> <closure-type-spec>
|
+--> <compound-condition-type-spec>
|
+--> <union-type-spec>
|
+--> <intersection-type-spec>
|
+--> <complement-type-spec>
|
+--> <ancestor-of-type-spec>
|
+--> <pair-type-spec>
|
+--> <pair-of-type-spec>
|
+--> <list-type-spec>
|
+--> <list-of-type-spec> --> <alist-type-spec>
|
+--> <vector-type-spec>
|
+--> <vector-of-type-spec>
|
+--> <hashtable-type-spec>
|
+--> <enumeration-type-spec>
|
+--> <label-type-spec>
|
--> <interface-type-spec>
At present, all the record–types exposed by the library (vicare
expander) are sealed: they cannot be sub–typed by user code.
The type <object-type-spec> has a field parent-ots that is
used to represent the hierarchy of Scheme–level object–types.
All the built-in Scheme object types are represented by instances of
<core-type-spec>; so <top>, <fixnum>, <string>,
<list> et cetera are represented by instances of
<core-type-spec>.
The hierarchy of list types is as follows:
<list>
|
+--> <null>
|
+--> (list-of ?type) --> <null>
|
--> <nelist> --> (list ?type0 ?type ...)
notice how <null> is considered a sub–type of both <list>
and (list-of ?type) annotations, but not of
(list ?type0 ?type ...); this special handling is
implemented in the function
object-type-spec.matching-super-and-sub?.
The type annotations (list-of ?type) are represented by
instances of <list-of-type-spec>. (list ?type0
?type ...) annotations are represented by instances of
<list-type-spec>, and represent non–empty lists.
The hierarchy of vector types is as follows:
<vector>
|
+---> <empty-vector>
|
+---> (vector-of ?type) ---> <empty-vector>
|
---> <nevector> ----------> (vector ?type0 ?type ...)
notice how <empty-vector> is considered a sub–type of both
<vector> and (vector-of ?type) annotations, but
not of (vector ?type0 ?type ...)
annotations; this special handling is implemented in the function
object-type-spec.matching-super-and-sub?.
The type annotation (vector-of ?type) annotations are
represented by instances of <vector-of-type-spec>. (vector
?type0 ?type ...) annotations are represented by
instances of <vector-type-spec>, and represent non–empty vectors.
Next: expander specs retrieving, Up: expander specs [Index]