At the meta level, the (base-level) programs are represented by objects of a few predefined classes (and their subclasses that programmers define). These objects are called metaobjects because they are meta representation of the programs. Source-to-source translation from OpenC++ to C++ is implemented by manipulating those metaobjects.
The following several sections show details of such metaobjects. They reflect various aspects of programs that are not accessible in C++. Although most of metaobjects provide means of introspection, some metaobjects represent a behavioral aspect of the program and enables to control source-to-source translation of the program. Here is the list of metaobjects:
They represent a parse tree of the program. The parse tree is implemented as a nested-linked list.
They represent bindings between names and types. Since this MOP is a compile-time MOP, the runtime values bound to names are not available at the meta level.
They represent types that appear in the program. The types include derived types such as pointer types and reference types as well as built-in types and class types.
As well as they represent class definitions,
they control source-to-source translation of the program.
Programmers may define subclasses of
Class in order to tailor the translation.
They represent class members. They inform whether the member is a constructor, an inline function, a data member, a public member, or so forth.
TypeInfo metaobjects and
might look like wrong design. But this distinction is needed to handle
TypeInfo metaobjects were introduced to deal with
derived types and fundamental types by using the same kind of metaobjects.