Puma Reference Manual | Puma::CTemplateInstance Class Reference |
Semantic information about a template instance. More...
#include <Puma/CTemplateInstance.h>
Public Member Functions | |
CTemplateInstance () | |
Constructor. | |
~CTemplateInstance () | |
Destructor. | |
bool | instantiate (CStructure *scope) |
If this is a pseudo instance, instantiate the template. | |
CTemplateInfo * | Template () const |
Get the semantic information about the instantiated template. | |
CObjectInfo * | Object () const |
Get the semantic information about the class or function. | |
void | Template (CTemplateInfo *info) |
Set the semantic information about the instantiated template. | |
void | Object (CObjectInfo *info) |
Set the semantic information about the instance. | |
CTree * | PointOfInstantiation () const |
Get the point of instantiation (e.g. | |
CScopeInfo * | PointOfInstantiationScope () const |
Get the scope in which the template was instantiated. | |
void | PointOfInstantiation (CTree *poi, CScopeInfo *scope) |
Set the point of instantiation (e.g. | |
void | canInstantiate (bool can) |
Set that the pseudo instance can be instantiated. | |
bool | canInstantiate () |
Return true if the pseudo instance can be instantiated. | |
void | isPseudoInstance (bool v) |
Set whether this is a pseudo template instance. | |
bool | isPseudoInstance () const |
Check if this is a pseudo template instance. | |
void | isInstantiated (bool is) |
Set whether this template instance really is instantiated. | |
bool | isInstantiated () const |
Check if this template instance really is instantiated. | |
void | hasDelayedParseProblem (bool has) |
Indicate a delayed parse problem during instantiation. | |
bool | hasDelayedParseProblem () const |
Check whether this instance had a delayed parse problem. | |
unsigned | InstantiationArgs () const |
Get the number of instantiation arguments. | |
DeducedArgument * | InstantiationArg (unsigned n) const |
Get the n-th instantiation argument. | |
void | addInstantiationArg (DeducedArgument *arg) |
Add an instantiation argument. | |
unsigned | DeducedArgs () const |
Get the number of deduced arguments. | |
DeducedArgument * | DeducedArg (unsigned n) const |
Get the n-th deduced template argument. | |
void | addDeducedArg (DeducedArgument *arg) |
Add a deduced template argument. | |
void | clearDeducedArgs () |
Discard the deduced template arguments. | |
Protected Attributes | |
CTemplateInfo * | _TemplateInfo |
The semantic information about the template. | |
CObjectInfo * | _ObjectInfo |
The semantic information about the instance. | |
CTree * | _PointOfInstantiation |
The point of instantiation. | |
CScopeInfo * | _PointOfInstantiationScope |
The scope in which the template was instantiated. | |
Array< DeducedArgument * > | _DeducedArgs |
The list of deduced template arguments. | |
Array< DeducedArgument * > | _InstantiationArgs |
The list of instantiation arguments. | |
bool | _Pseudo |
True if this is not a real template instance. | |
bool | _CanInstantiate |
True if this pseudo instance can be instantiated. | |
bool | _IsInstantiated |
True if instantiated. | |
bool | _IsSpecialization |
True if this is the instance of a template specialization. | |
bool | _HasDelayedParseProblem |
True if this node had a delayed parse problem. |
Semantic information about a template instance.
Contains the point of instantiation, the instantiated template, the instantiation arguments, and the deduced template arguments.
The point of instantiation (POI) is the corresponding template-id.
X<int> x; // X<int> is the POI
The instantiation arguments are the arguments of the template-id at the POI.
Y<int,1> y; // 'int' and '1' are the instantiation arguments
The deduced template arguments are calculated from the instantiation arguments and the template default arguments.
template<class T1, class T2 = float> struct Foo { template<class T3, class T4> T1 foo(T2,T3,T4*); }; void bar(bool b, char* s) { Foo<int> f; // deduced arguments: T1=int, T2=float f.foo(1,b,s); // deduced arguments: T3=bool, T4=char }
If a template instance is not yet created (maybe because real template instantiation is disabled or due to late template instantiation), then this template instance is called a pseudo instance.
Puma::CTemplateInstance::CTemplateInstance | ( | ) | [inline] |
Constructor.
Destructor.
Destroys the instantiation and deduced arguments. Optionally destroys the translation unit of the instance code.
void Puma::CTemplateInstance::addDeducedArg | ( | DeducedArgument * | arg | ) | [inline] |
Add a deduced template argument.
arg | The deduced template argument. |
void Puma::CTemplateInstance::addInstantiationArg | ( | DeducedArgument * | arg | ) | [inline] |
Add an instantiation argument.
arg | The instantiation argument. |
void Puma::CTemplateInstance::canInstantiate | ( | bool | can | ) | [inline] |
Set that the pseudo instance can be instantiated.
bool Puma::CTemplateInstance::canInstantiate | ( | ) | [inline] |
Return true if the pseudo instance can be instantiated.
void Puma::CTemplateInstance::clearDeducedArgs | ( | ) | [inline] |
Discard the deduced template arguments.
DeducedArgument * Puma::CTemplateInstance::DeducedArg | ( | unsigned | n | ) | const [inline] |
Get the n-th deduced template argument.
n | The index of the template argument. |
unsigned Puma::CTemplateInstance::DeducedArgs | ( | ) | const [inline] |
Get the number of deduced arguments.
void Puma::CTemplateInstance::hasDelayedParseProblem | ( | bool | has | ) | [inline] |
Indicate a delayed parse problem during instantiation.
is | true for yes, false for no. |
bool Puma::CTemplateInstance::hasDelayedParseProblem | ( | ) | const [inline] |
Check whether this instance had a delayed parse problem.
bool Puma::CTemplateInstance::instantiate | ( | CStructure * | scope | ) |
If this is a pseudo instance, instantiate the template.
scope | The scope in which to instantiate the template. |
DeducedArgument * Puma::CTemplateInstance::InstantiationArg | ( | unsigned | n | ) | const [inline] |
Get the n-th instantiation argument.
n | The index of the instantiation argument. |
unsigned Puma::CTemplateInstance::InstantiationArgs | ( | ) | const [inline] |
Get the number of instantiation arguments.
void Puma::CTemplateInstance::isInstantiated | ( | bool | is | ) | [inline] |
Set whether this template instance really is instantiated.
is | True for yes, false for no. |
bool Puma::CTemplateInstance::isInstantiated | ( | ) | const [inline] |
Check if this template instance really is instantiated.
void Puma::CTemplateInstance::isPseudoInstance | ( | bool | v | ) | [inline] |
Set whether this is a pseudo template instance.
v | True for yes, false for no. |
bool Puma::CTemplateInstance::isPseudoInstance | ( | ) | const [inline] |
Check if this is a pseudo template instance.
CObjectInfo * Puma::CTemplateInstance::Object | ( | ) | const [inline] |
Get the semantic information about the class or function.
void Puma::CTemplateInstance::Object | ( | CObjectInfo * | info | ) | [inline] |
Set the semantic information about the instance.
info | The instance object. |
CTree * Puma::CTemplateInstance::PointOfInstantiation | ( | ) | const [inline] |
Get the point of instantiation (e.g.
the template-id).
void Puma::CTemplateInstance::PointOfInstantiation | ( | CTree * | poi, |
CScopeInfo * | scope | ||
) | [inline] |
Set the point of instantiation (e.g.
the template-id).
tplid | The template-id used to instantiate the template. |
scope | The scope in which the template was instantiated. |
CScopeInfo * Puma::CTemplateInstance::PointOfInstantiationScope | ( | ) | const [inline] |
Get the scope in which the template was instantiated.
CTemplateInfo * Puma::CTemplateInstance::Template | ( | ) | const [inline] |
Get the semantic information about the instantiated template.
void Puma::CTemplateInstance::Template | ( | CTemplateInfo * | info | ) | [inline] |
Set the semantic information about the instantiated template.
info | The template that was instantiated. |
bool Puma::CTemplateInstance::_CanInstantiate [protected] |
True if this pseudo instance can be instantiated.
Array<DeducedArgument*> Puma::CTemplateInstance::_DeducedArgs [protected] |
The list of deduced template arguments.
bool Puma::CTemplateInstance::_HasDelayedParseProblem [protected] |
True if this node had a delayed parse problem.
Array<DeducedArgument*> Puma::CTemplateInstance::_InstantiationArgs [protected] |
The list of instantiation arguments.
bool Puma::CTemplateInstance::_IsInstantiated [protected] |
True if instantiated.
bool Puma::CTemplateInstance::_IsSpecialization [protected] |
True if this is the instance of a template specialization.
CObjectInfo* Puma::CTemplateInstance::_ObjectInfo [protected] |
The semantic information about the instance.
CTree* Puma::CTemplateInstance::_PointOfInstantiation [protected] |
The point of instantiation.
The scope in which the template was instantiated.
bool Puma::CTemplateInstance::_Pseudo [protected] |
True if this is not a real template instance.
CTemplateInfo* Puma::CTemplateInstance::_TemplateInfo [protected] |
The semantic information about the template.