Puma Reference Manual Puma::CTemplateInstance Class Reference



Puma::CTemplateInstance Class Reference

Semantic information about a template instance. More...

#include <Puma/CTemplateInstance.h>

List of all members.

Public Member Functions

 CTemplateInstance ()
 Constructor.
 ~CTemplateInstance ()
 Destructor.
bool instantiate (CStructure *scope)
 If this is a pseudo instance, instantiate the template.
CTemplateInfoTemplate () const
 Get the semantic information about the instantiated template.
CObjectInfoObject () 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.
CTreePointOfInstantiation () const
 Get the point of instantiation (e.g.
CScopeInfoPointOfInstantiationScope () 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.
DeducedArgumentInstantiationArg (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.
DeducedArgumentDeducedArg (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.

Detailed Description

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.


Constructor & Destructor Documentation

Constructor.

Destructor.

Destroys the instantiation and deduced arguments. Optionally destroys the translation unit of the instance code.


Member Function Documentation

Add a deduced template argument.

Parameters:
argThe deduced template argument.

Add an instantiation argument.

Parameters:
argThe instantiation argument.
void Puma::CTemplateInstance::canInstantiate ( bool  can) [inline]

Set that the pseudo instance can be instantiated.

Return true if the pseudo instance can be instantiated.

Discard the deduced template arguments.

DeducedArgument * Puma::CTemplateInstance::DeducedArg ( unsigned  n) const [inline]

Get the n-th deduced template argument.

Parameters:
nThe index of the template argument.
unsigned Puma::CTemplateInstance::DeducedArgs ( ) const [inline]

Get the number of deduced arguments.

Indicate a delayed parse problem during instantiation.

Parameters:
istrue for yes, false for no.

Check whether this instance had a delayed parse problem.

If this is a pseudo instance, instantiate the template.

Parameters:
scopeThe scope in which to instantiate the template.
Returns:
true if instantiation succeeded.

Get the n-th instantiation argument.

Parameters:
nThe 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.

Parameters:
isTrue 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.

Parameters:
vTrue for yes, false for no.

Check if this is a pseudo template instance.

Get the semantic information about the class or function.

void Puma::CTemplateInstance::Object ( CObjectInfo info) [inline]

Set the semantic information about the instance.

Parameters:
infoThe instance object.

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).

Parameters:
tplidThe template-id used to instantiate the template.
scopeThe scope in which the template was instantiated.

Get the scope in which the template was instantiated.

Get the semantic information about the instantiated template.

Set the semantic information about the instantiated template.

Parameters:
infoThe template that was instantiated.

Member Data Documentation

True if this pseudo instance can be instantiated.

The list of deduced template arguments.

True if this node had a delayed parse problem.

The list of instantiation arguments.

True if instantiated.

True if this is the instance of a template specialization.

The semantic information about the instance.

The point of instantiation.

The scope in which the template was instantiated.

True if this is not a real template instance.

The semantic information about the template.