XML specifications for basic elements:
- references to declarable entities (variables, constants, functions,
typedefs, interfaces, interface definitions, components, enums,
structs, unions)
- types
- values (regular constants and structured values from C {} initialisers)
- attributes
- documentation strings
A reference to a component or to an interface definition
The qname uniquely identifies the interface definition or component.
An instance of a component or interface. The number attribute
is present for real instances of generic components.
A simple value. Contains constant value (might be V:) and its type
A structured value (from a C { ... } initialiser).
All of these have a type as their first element.
Enforce the "type as first element" rule
A struct or union value (from a C { ... } initialiser), the
structured-elements are the initialised fields (unitialised fields
are just absent).
An array value (from a C { ... } initialiser), the
array-elements are the initialised array elements (unitialised elements
are just absent).
A nesC type. Purposefully does not contain type-error (bug
indicator). All have size and alignment attributes (though these
may be V:).
Every type has a size and alignment attribute, and, optionally,
the name of the typedef this type corresponds to (we can't just have
a typedef-ref, as that would cause confusion with type-var).
The network attribute is present for network base types. Its
value is the network base type name.
The typename element is just a reference to a typedef
Base types just include the C base type name
Integer and complex integer types may have an unsigned attribute
Types that contain a single embedded type
Qualified types contain an empty attribute for each qualifier present
Array types include a number of elements. An unspecified number
of elements is represented as a non-constant value for the elements
attribute.
Function types may be varargs or oldstyle. They contain a type
list (arguments) and a return type.
Tag types contain a tag reference
Interface types contain an interface reference
Component types contain an internal component reference.
These are the type of a component name inside a configuration, i.e.,
the type of X in `components Y as X'. Note that `components Y' is
just a shortcut for `components Y as Y', the two Y's are in different
namespaces.
Type variables contain a reference to a typedef (whose type is
itself this type)
An attribute with its initialiser
A documentation string
A short string is always present, a long one is optional.
nesdoc strings have arbitrary contents