PUMA Library Reference Manual
Loading...
Searching...
No Matches
Puma::CTree Class Referenceabstract

#include <Puma/CTree.h>

+ Inheritance diagram for Puma::CTree:

Description

Base class for all C/C++ syntax tree classes.

The syntax tree is the result of the syntactic analysis of the input source code representing its syntactic structure according to the accepted grammar (see class Syntax).

Objects of this class and classes derived from this class are created by the tree builder component of Puma during the parse process. A syntax tree shall be destroyed using the tree builder that has created it by calling its method Builder::destroy(CTree*) with the root node of the syntax tree as its argument.

The navigation in the syntax tree is done using the methods CTree::Parent(), CTree::Sons(), and CTree::Son(int) const. In a syntax tree "sons" are understood as the syntactic child nodes of a syntax tree node, whereas "daughters" are understood are their semantic child nodes.

Another way to traverse a syntax tree is to implement an own tree visitor based on class Puma::CVisitor. This is recommended especially for larger syntax trees.

A syntax tree node can be identified by comparing its node name with the node identifier of the expected syntax tree node:

if (node->NodeName() == Puma::CT_BinaryExpr::NodeId()) ...
static const char * NodeId()
Get the identifier for this node type.

Based on the syntax tree further semantic analyses can be performed. Semantic information, like scope, value, type, and object information, is linked into the syntax tree. It can be accessed using the methods CTree::SemScope(), CTree::SemValue(), and CTree::SemObject(). Some nodes provide short-cuts to the semantic type and value information by implementing the methods CTree::Type() and CTree::Value().

The information of the syntax tree can be used to perform high-level transformations of the source code (see class ManipCommander).

Public Member Functions

virtual ~CTree ()
 Destructor.
 
virtual int Sons () const =0
 Get the number of sons.
 
virtual CTreeSon (int n) const
 Get the n-th son.
 
virtual const char * NodeName () const =0
 Get the node name (node identifier).
 
virtual Tokentoken () const
 Get the first token of the syntactic construct represented by this sub-tree.
 
virtual Tokenend_token () const
 Get the last token of the syntactic construct represented by this sub-tree.
 
virtual CT_Tokentoken_node () const
 Get the CT_Token node of the first token of the syntactic construct represented by this sub-tree.
 
virtual CT_Tokenend_token_node () const
 Get the CT_Token node of the last token of the syntactic construct represented by this sub-tree.
 
virtual void ReplaceSon (CTree *old_son, CTree *new_son)
 Replace a son.
 
virtual CTreeParent () const
 Get the parent node.
 
virtual CTypeInfoType () const
 Get the semantic type of the node.
 
virtual CExprValueValue () const
 Get the calculated value of the expression.
 
virtual CSemScopeSemScope () const
 Get the scope opened by the node.
 
virtual CSemValueSemValue () const
 Get the semantic value of the node.
 
virtual CSemObjectSemObject () const
 Get the semantic information of the node.
 
virtual CT_SimpleNameIsSimpleName ()
 Get a pointer to CT_SimpleName if the current node represents a name.
 
virtual CT_StringIsString ()
 Get a pointer to CT_String if the current node represents a string.
 
virtual CT_DeclaratorIsDeclarator ()
 Get a pointer to CT_Declarator if the current node represents a declarator.
 
virtual CT_StatementIsStatement ()
 Get a pointer to CT_Statement if the current node represents a statement.
 
virtual CT_ExpressionIsExpression ()
 Get a pointer to CT_Expression if the current node represents a expression.
 
virtual CT_DeclIsDeclaration ()
 Get a pointer to CT_Decl if the current node represents a declaration.
 
virtual CT_CallIsCall ()
 Get a pointer to CT_Call if the current node represents a call expression.
 
virtual CT_ListIsList ()
 Get a pointer to CT_List if the current node represents a list.
 
virtual CT_DelayedParseIsDelayedParse ()
 Get a pointer to CT_DelayedParse if the current node represents a delayed code fragment.
 
bool HasValueNull () const
 Return true if the tree has the constant value 0.
 

Static Public Attributes

static int alloc
 
static int release
 

Protected Member Functions

CTreeSon (CTree *const *sons, int len, int n) const
 Get the n-th son from given sons array.
 
int Sons (CTree *const *sons, int len) const
 Get the number of sons in the given sons array.
 
void ReplaceSon (CTree **sons, int len, CTree *old_son, CTree *new_son)
 Replace a son.
 
void ReplaceSon (CTree *&son, CTree *old_son, CTree *new_son)
 Replace a son if it equals the given son.
 
void AddSon (CTree *&son, CTree *new_son)
 Add a new son.
 
void SetParent (const CTree *parent)
 Set the parent tree node.
 
void SetParent (CTree *node, const CTree *parent)
 Set the parent tree node of the given tree node.
 
 CTree ()
 Default constructor.
 

Constructor & Destructor Documentation

◆ CTree()

Puma::CTree::CTree ( )
inlineprotected

Default constructor.

◆ ~CTree()

virtual Puma::CTree::~CTree ( )
inlinevirtual

Destructor.

Member Function Documentation

◆ AddSon()

void Puma::CTree::AddSon ( CTree *& son,
CTree * new_son )
protected

Add a new son.

Parameters
sonThe actual son.
new_sonThe new son, overwrites the actual son.

◆ end_token()

virtual Token * Puma::CTree::end_token ( ) const
virtual

Get the last token of the syntactic construct represented by this sub-tree.

Returns
The token or NULL.

Reimplemented in Puma::CT_Token.

◆ end_token_node()

virtual CT_Token * Puma::CTree::end_token_node ( ) const
virtual

Get the CT_Token node of the last token of the syntactic construct represented by this sub-tree.

Returns
The token node or NULL.

Reimplemented in Puma::CT_Token.

◆ HasValueNull()

bool Puma::CTree::HasValueNull ( ) const

Return true if the tree has the constant value 0.

Returns
True if constant value is 0.

◆ IsCall()

virtual CT_Call * Puma::CTree::IsCall ( )
inlinevirtual

Get a pointer to CT_Call if the current node represents a call expression.

Returns
The CT_Call pointer or NULL.

Reimplemented in Puma::CT_Call.

◆ IsDeclaration()

virtual CT_Decl * Puma::CTree::IsDeclaration ( )
inlinevirtual

Get a pointer to CT_Decl if the current node represents a declaration.

Returns
The CT_Decl pointer or NULL.

Reimplemented in Puma::CT_Decl.

◆ IsDeclarator()

virtual CT_Declarator * Puma::CTree::IsDeclarator ( )
inlinevirtual

Get a pointer to CT_Declarator if the current node represents a declarator.

Returns
The CT_Declarator pointer or NULL.

Reimplemented in Puma::CT_Declarator.

◆ IsDelayedParse()

virtual CT_DelayedParse * Puma::CTree::IsDelayedParse ( )
inlinevirtual

Get a pointer to CT_DelayedParse if the current node represents a delayed code fragment.

Returns
The CT_DelayedParse pointer or NULL.

Reimplemented in Puma::CT_DelayedParse.

◆ IsExpression()

virtual CT_Expression * Puma::CTree::IsExpression ( )
inlinevirtual

Get a pointer to CT_Expression if the current node represents a expression.

Returns
The CT_Expression pointer or NULL.

Reimplemented in Puma::CT_Expression.

◆ IsList()

virtual CT_List * Puma::CTree::IsList ( )
inlinevirtual

Get a pointer to CT_List if the current node represents a list.

Returns
The CT_List pointer or NULL.

Reimplemented in Puma::CT_List.

◆ IsSimpleName()

virtual CT_SimpleName * Puma::CTree::IsSimpleName ( )
inlinevirtual

Get a pointer to CT_SimpleName if the current node represents a name.

Returns
The CT_SimpleName node or NULL.

Reimplemented in Puma::CT_SimpleName.

◆ IsStatement()

virtual CT_Statement * Puma::CTree::IsStatement ( )
inlinevirtual

Get a pointer to CT_Statement if the current node represents a statement.

Returns
The CT_Statement pointer or NULL.

Reimplemented in Puma::CT_Statement.

◆ IsString()

virtual CT_String * Puma::CTree::IsString ( )
inlinevirtual

Get a pointer to CT_String if the current node represents a string.

Returns
The CT_String node or NULL.

Reimplemented in Puma::CT_String.

◆ NodeName()

virtual const char * Puma::CTree::NodeName ( ) const
pure virtual

Get the node name (node identifier).

Implemented in Puma::CT_StaticAssert, Puma::Builder::Container, Puma::CT_DelayedParse, Puma::CT_DelayedParseParamInit, Puma::CT_DelayedParseFctTryBlock, Puma::CT_DelayedParseCtorInit, Puma::CT_DelayedParsePureSpec, Puma::CT_DelayedParseFctBody, Puma::CT_DelayedParseSkippedFctBody, Puma::CT_DelayedParseConstInit, Puma::CT_Error, Puma::CT_Token, Puma::CT_ExprList, Puma::CT_DeclaratorList, Puma::CT_EnumeratorList, Puma::CT_DeclList, Puma::CT_DeclSpecSeq, Puma::CT_CmpdStmt, Puma::CT_HandlerSeq, Puma::CT_TemplateParamList, Puma::CT_TemplateArgList, Puma::CT_ExtensionList, Puma::CT_Expression, Puma::CT_Call, Puma::CT_ImplicitCall, Puma::CT_String, Puma::CT_WideString, Puma::CT_Integer, Puma::CT_Character, Puma::CT_WideCharacter, Puma::CT_Float, Puma::CT_Bool, Puma::CT_BracedExpr, Puma::CT_SimpleName, Puma::CT_PrivateName, Puma::CT_DestructorName, Puma::CT_TemplateName, Puma::CT_OperatorName, Puma::CT_ConversionName, Puma::CT_QualName, Puma::CT_RootQualName, Puma::CT_BinaryExpr, Puma::CT_MembPtrExpr, Puma::CT_MembRefExpr, Puma::CT_UnaryExpr, Puma::CT_PostfixExpr, Puma::CT_AddrExpr, Puma::CT_DerefExpr, Puma::CT_DeleteExpr, Puma::CT_NewExpr, Puma::CT_IfThenExpr, Puma::CT_CmpdLiteral, Puma::CT_ConstructExpr, Puma::CT_ThrowExpr, Puma::CT_IndexExpr, Puma::CT_CallExpr, Puma::CT_CastExpr, Puma::CT_StaticCast, Puma::CT_ConstCast, Puma::CT_ReintCast, Puma::CT_DynamicCast, Puma::CT_ImplicitCast, Puma::CT_TypeidExpr, Puma::CT_SizeofExpr, Puma::CT_AlignofExpr, Puma::CT_TypeTraitExpr, Puma::CT_OffsetofExpr, Puma::CT_IndexDesignator, Puma::CT_MembDesignator, Puma::CT_DesignatorSeq, Puma::CT_PrimDeclSpec, Puma::CT_NamedType, Puma::CT_ClassSpec, Puma::CT_UnionSpec, Puma::CT_EnumSpec, Puma::CT_ExceptionSpec, Puma::CT_Program, Puma::CT_ObjDecl, Puma::CT_TemplateDecl, Puma::CT_NonTypeParamDecl, Puma::CT_TypeParamDecl, Puma::CT_EnumDef, Puma::CT_Enumerator, Puma::CT_FctDef, Puma::CT_AsmDef, Puma::CT_Handler, Puma::CT_LinkageSpec, Puma::CT_ArgDecl, Puma::CT_ArgDeclList, Puma::CT_ArgDeclSeq, Puma::CT_ArgNameList, Puma::CT_NamespaceDef, Puma::CT_NamespaceAliasDef, Puma::CT_UsingDirective, Puma::CT_InitDeclarator, Puma::CT_BracedDeclarator, Puma::CT_ArrayDelimiter, Puma::CT_ArrayDeclarator, Puma::CT_FctDeclarator, Puma::CT_RefDeclarator, Puma::CT_PtrDeclarator, Puma::CT_MembPtrDeclarator, Puma::CT_BitFieldDeclarator, Puma::CT_LabelStmt, Puma::CT_DefaultStmt, Puma::CT_TryStmt, Puma::CT_CaseStmt, Puma::CT_ExprStmt, Puma::CT_DeclStmt, Puma::CT_SwitchStmt, Puma::CT_IfStmt, Puma::CT_IfElseStmt, Puma::CT_BreakStmt, Puma::CT_ContinueStmt, Puma::CT_GotoStmt, Puma::CT_ReturnStmt, Puma::CT_WhileStmt, Puma::CT_DoStmt, Puma::CT_ForStmt, Puma::CT_Condition, Puma::CT_ClassDef, Puma::CT_UnionDef, Puma::CT_MembList, Puma::CT_MembInitList, Puma::CT_MembInit, Puma::CT_BaseSpecList, Puma::CT_AccessSpec, Puma::CT_BaseSpec, Puma::CT_AccessDecl, Puma::CT_UsingDecl, Puma::CT_Any, Puma::CT_AnyList, Puma::CT_AnyExtension, Puma::CT_AnyCondition, Puma::CT_GnuAsmSpec, Puma::CT_GnuAsmDef, Puma::CT_GnuAsmOperand, Puma::CT_GnuAsmOperands, Puma::CT_GnuAsmClobbers, Puma::CT_GnuAttribute, Puma::CT_GnuStatementExpr, Puma::CT_GnuTypeof, Puma::CT_GnuLocalLabelStmt, Puma::CT_GnuCaseStmt, and Puma::CT_AsmBlock.

◆ Parent()

virtual CTree * Puma::CTree::Parent ( ) const
inlinevirtual

Get the parent node.

Returns
The parent node or NULL.

◆ ReplaceSon() [1/3]

void Puma::CTree::ReplaceSon ( CTree *& son,
CTree * old_son,
CTree * new_son )
protected

Replace a son if it equals the given son.

Parameters
sonThe actual son.
old_sonThe son to replace, must match the actual son.
new_sonThe new son, overwrites the actual son.

◆ ReplaceSon() [2/3]

void Puma::CTree::ReplaceSon ( CTree ** sons,
int len,
CTree * old_son,
CTree * new_son )
protected

Replace a son.

Parameters
sonsThe sons array.
lenLength of the sons array.
old_sonThe son to replace.
new_sonThe new son.

◆ ReplaceSon() [3/3]

virtual void Puma::CTree::ReplaceSon ( CTree * old_son,
CTree * new_son )
inlinevirtual

Replace a son.

Parameters
old_sonThe son to replace.
new_sonThe son with which to replace.

Reimplemented in Puma::CT_StaticAssert, Puma::CT_DelayedParse, Puma::CT_List, Puma::CT_ImplicitCall, Puma::CT_Integer, Puma::CT_Character, Puma::CT_Float, Puma::CT_Bool, Puma::CT_BracedExpr, Puma::CT_BinaryExpr, Puma::CT_MembPtrExpr, Puma::CT_UnaryExpr, Puma::CT_DeleteExpr, Puma::CT_NewExpr, Puma::CT_IfThenExpr, Puma::CT_CmpdLiteral, Puma::CT_ConstructExpr, Puma::CT_ThrowExpr, Puma::CT_IndexExpr, Puma::CT_CallExpr, Puma::CT_CastExpr, Puma::CT_StaticCast, Puma::CT_ImplicitCast, Puma::CT_TypeidExpr, Puma::CT_SizeofExpr, Puma::CT_AlignofExpr, Puma::CT_TypeTraitExpr, Puma::CT_OffsetofExpr, Puma::CT_IndexDesignator, Puma::CT_MembDesignator, Puma::CT_PrimDeclSpec, Puma::CT_NamedType, Puma::CT_ClassSpec, Puma::CT_ExceptionSpec, Puma::CT_ObjDecl, Puma::CT_TemplateDecl, Puma::CT_NonTypeParamDecl, Puma::CT_TypeParamDecl, Puma::CT_EnumDef, Puma::CT_Enumerator, Puma::CT_FctDef, Puma::CT_AsmDef, Puma::CT_Handler, Puma::CT_LinkageSpec, Puma::CT_ArgDecl, Puma::CT_NamespaceDef, Puma::CT_NamespaceAliasDef, Puma::CT_UsingDirective, Puma::CT_InitDeclarator, Puma::CT_BracedDeclarator, Puma::CT_ArrayDelimiter, Puma::CT_ArrayDeclarator, Puma::CT_FctDeclarator, Puma::CT_RefDeclarator, Puma::CT_PtrDeclarator, Puma::CT_MembPtrDeclarator, Puma::CT_BitFieldDeclarator, Puma::CT_LabelStmt, Puma::CT_DefaultStmt, Puma::CT_TryStmt, Puma::CT_CaseStmt, Puma::CT_ExprStmt, Puma::CT_DeclStmt, Puma::CT_SwitchStmt, Puma::CT_IfStmt, Puma::CT_IfElseStmt, Puma::CT_BreakStmt, Puma::CT_ContinueStmt, Puma::CT_GotoStmt, Puma::CT_ReturnStmt, Puma::CT_WhileStmt, Puma::CT_DoStmt, Puma::CT_ForStmt, Puma::CT_Condition, Puma::CT_ClassDef, Puma::CT_MembInit, Puma::CT_AccessSpec, Puma::CT_BaseSpec, Puma::CT_AccessDecl, Puma::CT_UsingDecl, Puma::CT_Any, Puma::CT_AnyExtension, Puma::CT_AnyCondition, Puma::CT_GnuAsmSpec, Puma::CT_GnuAsmDef, Puma::CT_GnuAsmOperand, Puma::CT_GnuStatementExpr, Puma::CT_GnuTypeof, Puma::CT_GnuCaseStmt, and Puma::CT_AsmBlock.

◆ SemObject()

◆ SemScope()

◆ SemValue()

virtual CSemValue * Puma::CTree::SemValue ( ) const
inlinevirtual

◆ SetParent() [1/2]

void Puma::CTree::SetParent ( const CTree * parent)
inlineprotected

Set the parent tree node.

Parameters
parentThe new parent tree node.

◆ SetParent() [2/2]

void Puma::CTree::SetParent ( CTree * node,
const CTree * parent )
inlineprotected

Set the parent tree node of the given tree node.

Parameters
nodeThe tree node.
parentThe new parent.

◆ Son() [1/2]

CTree * Puma::CTree::Son ( CTree *const * sons,
int len,
int n ) const
protected

Get the n-th son from given sons array.

Skips empty (NULL) array items.

Parameters
sonsThe sons array.
lenLength of the sons array.
nIndex of the son.
Returns
The n-th son or NULL.

◆ Son() [2/2]

virtual CTree * Puma::CTree::Son ( int n) const
inlinevirtual

Get the n-th son.

Parameters
nThe index of the son.
Returns
The n-th son or NULL.

Reimplemented in Puma::CT_StaticAssert, Puma::CT_DelayedParse, Puma::CT_List, Puma::CT_ImplicitCall, Puma::CT_Integer, Puma::CT_Character, Puma::CT_Float, Puma::CT_Bool, Puma::CT_BracedExpr, Puma::CT_PrivateName, Puma::CT_BinaryExpr, Puma::CT_MembPtrExpr, Puma::CT_UnaryExpr, Puma::CT_DeleteExpr, Puma::CT_NewExpr, Puma::CT_IfThenExpr, Puma::CT_CmpdLiteral, Puma::CT_ConstructExpr, Puma::CT_ThrowExpr, Puma::CT_IndexExpr, Puma::CT_CallExpr, Puma::CT_CastExpr, Puma::CT_StaticCast, Puma::CT_ImplicitCast, Puma::CT_TypeidExpr, Puma::CT_SizeofExpr, Puma::CT_AlignofExpr, Puma::CT_TypeTraitExpr, Puma::CT_OffsetofExpr, Puma::CT_IndexDesignator, Puma::CT_MembDesignator, Puma::CT_PrimDeclSpec, Puma::CT_NamedType, Puma::CT_ClassSpec, Puma::CT_ExceptionSpec, Puma::CT_ObjDecl, Puma::CT_TemplateDecl, Puma::CT_NonTypeParamDecl, Puma::CT_TypeParamDecl, Puma::CT_EnumDef, Puma::CT_Enumerator, Puma::CT_FctDef, Puma::CT_AsmDef, Puma::CT_Handler, Puma::CT_LinkageSpec, Puma::CT_ArgDecl, Puma::CT_NamespaceDef, Puma::CT_NamespaceAliasDef, Puma::CT_UsingDirective, Puma::CT_InitDeclarator, Puma::CT_BracedDeclarator, Puma::CT_ArrayDelimiter, Puma::CT_ArrayDeclarator, Puma::CT_FctDeclarator, Puma::CT_RefDeclarator, Puma::CT_PtrDeclarator, Puma::CT_MembPtrDeclarator, Puma::CT_BitFieldDeclarator, Puma::CT_LabelStmt, Puma::CT_DefaultStmt, Puma::CT_TryStmt, Puma::CT_CaseStmt, Puma::CT_ExprStmt, Puma::CT_DeclStmt, Puma::CT_SwitchStmt, Puma::CT_IfStmt, Puma::CT_IfElseStmt, Puma::CT_BreakStmt, Puma::CT_ContinueStmt, Puma::CT_GotoStmt, Puma::CT_ReturnStmt, Puma::CT_WhileStmt, Puma::CT_DoStmt, Puma::CT_ForStmt, Puma::CT_Condition, Puma::CT_ClassDef, Puma::CT_MembInit, Puma::CT_AccessSpec, Puma::CT_BaseSpec, Puma::CT_AccessDecl, Puma::CT_UsingDecl, Puma::CT_Any, Puma::CT_AnyExtension, Puma::CT_AnyCondition, Puma::CT_GnuAsmSpec, Puma::CT_GnuAsmDef, Puma::CT_GnuAsmOperand, Puma::CT_GnuStatementExpr, Puma::CT_GnuTypeof, Puma::CT_GnuCaseStmt, and Puma::CT_AsmBlock.

◆ Sons() [1/2]

virtual int Puma::CTree::Sons ( ) const
pure virtual

Get the number of sons.

Implemented in Puma::CT_StaticAssert, Puma::CT_DelayedParse, Puma::CT_Error, Puma::CT_Token, Puma::CT_List, Puma::CT_Expression, Puma::CT_ImplicitCall, Puma::CT_Integer, Puma::CT_Character, Puma::CT_Float, Puma::CT_Bool, Puma::CT_BracedExpr, Puma::CT_PrivateName, Puma::CT_BinaryExpr, Puma::CT_MembPtrExpr, Puma::CT_UnaryExpr, Puma::CT_DeleteExpr, Puma::CT_NewExpr, Puma::CT_IfThenExpr, Puma::CT_CmpdLiteral, Puma::CT_ConstructExpr, Puma::CT_ThrowExpr, Puma::CT_IndexExpr, Puma::CT_CallExpr, Puma::CT_CastExpr, Puma::CT_StaticCast, Puma::CT_ImplicitCast, Puma::CT_TypeidExpr, Puma::CT_SizeofExpr, Puma::CT_AlignofExpr, Puma::CT_TypeTraitExpr, Puma::CT_OffsetofExpr, Puma::CT_IndexDesignator, Puma::CT_MembDesignator, Puma::CT_PrimDeclSpec, Puma::CT_NamedType, Puma::CT_ClassSpec, Puma::CT_ExceptionSpec, Puma::CT_ObjDecl, Puma::CT_TemplateDecl, Puma::CT_NonTypeParamDecl, Puma::CT_TypeParamDecl, Puma::CT_EnumDef, Puma::CT_Enumerator, Puma::CT_FctDef, Puma::CT_AsmDef, Puma::CT_Handler, Puma::CT_LinkageSpec, Puma::CT_ArgDecl, Puma::CT_NamespaceDef, Puma::CT_NamespaceAliasDef, Puma::CT_UsingDirective, Puma::CT_InitDeclarator, Puma::CT_BracedDeclarator, Puma::CT_ArrayDelimiter, Puma::CT_ArrayDeclarator, Puma::CT_FctDeclarator, Puma::CT_RefDeclarator, Puma::CT_PtrDeclarator, Puma::CT_MembPtrDeclarator, Puma::CT_BitFieldDeclarator, Puma::CT_LabelStmt, Puma::CT_DefaultStmt, Puma::CT_TryStmt, Puma::CT_CaseStmt, Puma::CT_ExprStmt, Puma::CT_DeclStmt, Puma::CT_SwitchStmt, Puma::CT_IfStmt, Puma::CT_IfElseStmt, Puma::CT_BreakStmt, Puma::CT_ContinueStmt, Puma::CT_GotoStmt, Puma::CT_ReturnStmt, Puma::CT_WhileStmt, Puma::CT_DoStmt, Puma::CT_ForStmt, Puma::CT_Condition, Puma::CT_ClassDef, Puma::CT_MembInit, Puma::CT_AccessSpec, Puma::CT_BaseSpec, Puma::CT_AccessDecl, Puma::CT_UsingDecl, Puma::CT_Any, Puma::CT_AnyExtension, Puma::CT_AnyCondition, Puma::CT_GnuAsmSpec, Puma::CT_GnuAsmDef, Puma::CT_GnuAsmOperand, Puma::CT_GnuStatementExpr, Puma::CT_GnuTypeof, Puma::CT_GnuLocalLabelStmt, Puma::CT_GnuCaseStmt, and Puma::CT_AsmBlock.

◆ Sons() [2/2]

int Puma::CTree::Sons ( CTree *const * sons,
int len ) const
protected

Get the number of sons in the given sons array.

Skips empty (NULL) array items.

Parameters
sonsThe sons array.
lenLength of the sons array.

◆ token()

virtual Token * Puma::CTree::token ( ) const
virtual

Get the first token of the syntactic construct represented by this sub-tree.

Returns
The token or NULL.

Reimplemented in Puma::CT_Token.

◆ token_node()

virtual CT_Token * Puma::CTree::token_node ( ) const
virtual

Get the CT_Token node of the first token of the syntactic construct represented by this sub-tree.

Returns
The token node or NULL.

Reimplemented in Puma::CT_Token.

◆ Type()

virtual CTypeInfo * Puma::CTree::Type ( ) const
inlinevirtual

◆ Value()

virtual CExprValue * Puma::CTree::Value ( ) const
inlinevirtual

Get the calculated value of the expression.

Returns
The value object or NULL.

Reimplemented in Puma::CT_ExprList, Puma::CT_Expression, Puma::CT_String, Puma::CT_SimpleName, Puma::CT_QualName, Puma::CT_DesignatorSeq, Puma::CT_ArgDecl, Puma::CT_ArrayDeclarator, and Puma::CT_AnyExtension.

Member Data Documentation

◆ alloc

int Puma::CTree::alloc
static

◆ release

int Puma::CTree::release
static