LLVM 22.0.0git
ForwardTemplateReference Struct Reference

A forward-reference to a template argument that was not known at the point where the template parameter name was parsed in a mangling. More...

#include "llvm/Demangle/ItaniumDemangle.h"

Inheritance diagram for ForwardTemplateReference:
[legend]

Public Member Functions

 ForwardTemplateReference (size_t Index_)
template<typename Fn>
void match (Fn F) const =delete
bool hasRHSComponentSlow (OutputBuffer &OB) const override
bool hasArraySlow (OutputBuffer &OB) const override
bool hasFunctionSlow (OutputBuffer &OB) const override
const NodegetSyntaxNode (OutputBuffer &OB) const override
void printLeft (OutputBuffer &OB) const override
void printRight (OutputBuffer &OB) const override
Public Member Functions inherited from Node
 Node (Kind K_, Prec Precedence_=Prec::Primary, Cache RHSComponentCache_=Cache::No, Cache ArrayCache_=Cache::No, Cache FunctionCache_=Cache::No)
 Node (Kind K_, Cache RHSComponentCache_, Cache ArrayCache_=Cache::No, Cache FunctionCache_=Cache::No)
template<typename Fn>
void visit (Fn F) const
 Visit the most-derived object corresponding to this object.
bool hasRHSComponent (OutputBuffer &OB) const
bool hasArray (OutputBuffer &OB) const
bool hasFunction (OutputBuffer &OB) const
Kind getKind () const
Prec getPrecedence () const
Cache getRHSComponentCache () const
Cache getArrayCache () const
Cache getFunctionCache () const
void printAsOperand (OutputBuffer &OB, Prec P=Prec::Default, bool StrictlyWorse=false) const
void print (OutputBuffer &OB) const
virtual bool printInitListAsType (OutputBuffer &, const NodeArray &) const
virtual std::string_view getBaseName () const
virtual ~Node ()=default
DEMANGLE_DUMP_METHOD void dump () const

Public Attributes

size_t Index
NodeRef = nullptr
bool Printing = false

Additional Inherited Members

Public Types inherited from Node
enum  Kind : uint8_t
enum class  Cache : uint8_t { Yes , No , Unknown }
 Three-way bool to track a cached value. More...
enum class  Prec : uint8_t {
  Primary , Postfix , Unary , Cast ,
  PtrMem , Multiplicative , Additive , Shift ,
  Spaceship , Relational , Equality , And ,
  Xor , Ior , AndIf , OrIf ,
  Conditional , Assign , Comma , Default
}
 Operator precedence for expression nodes. More...
Protected Attributes inherited from Node
Cache RHSComponentCache: 2
 Tracks if this node has a component on its right side, in which case we need to call printRight.
Cache ArrayCache: 2
 Track if this node is a (possibly qualified) array type.
Cache FunctionCache: 2
 Track if this node is a (possibly qualified) function type.

Detailed Description

A forward-reference to a template argument that was not known at the point where the template parameter name was parsed in a mangling.

This is created when demangling the name of a specialization of a conversion function template:

struct A {
template<typename T> operator T*();
};
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
#define T

When demangling a specialization of the conversion function template, we encounter the name of the template (including the T) before we reach the template argument list, so we cannot substitute the parameter name for the corresponding argument while parsing. Instead, we create a ForwardTemplateReference node that is resolved after we parse the template arguments.

Definition at line 1579 of file ItaniumDemangle.h.

Constructor & Destructor Documentation

◆ ForwardTemplateReference()

ForwardTemplateReference::ForwardTemplateReference ( size_t Index_)
inline

Definition at line 1589 of file ItaniumDemangle.h.

References Index, Node::Node(), and Node::Unknown.

Member Function Documentation

◆ getSyntaxNode()

const Node * ForwardTemplateReference::getSyntaxNode ( OutputBuffer & OB) const
inlineoverridevirtual

Reimplemented from Node.

Definition at line 1617 of file ItaniumDemangle.h.

References Node::Node(), Node::OutputBuffer, Printing, and Ref.

◆ hasArraySlow()

bool ForwardTemplateReference::hasArraySlow ( OutputBuffer & OB) const
inlineoverridevirtual

Reimplemented from Node.

Definition at line 1605 of file ItaniumDemangle.h.

References Node::OutputBuffer, Printing, and Ref.

◆ hasFunctionSlow()

bool ForwardTemplateReference::hasFunctionSlow ( OutputBuffer & OB) const
inlineoverridevirtual

Reimplemented from Node.

Definition at line 1611 of file ItaniumDemangle.h.

References Node::OutputBuffer, Printing, and Ref.

◆ hasRHSComponentSlow()

bool ForwardTemplateReference::hasRHSComponentSlow ( OutputBuffer & OB) const
inlineoverridevirtual

Reimplemented from Node.

Definition at line 1599 of file ItaniumDemangle.h.

References Node::OutputBuffer, Printing, and Ref.

◆ match()

template<typename Fn>
void ForwardTemplateReference::match ( Fn F) const
delete

References F.

◆ printLeft()

void ForwardTemplateReference::printLeft ( OutputBuffer & OB) const
inlineoverridevirtual

Implements Node.

Definition at line 1624 of file ItaniumDemangle.h.

References Node::OutputBuffer, Printing, and Ref.

◆ printRight()

void ForwardTemplateReference::printRight ( OutputBuffer & OB) const
inlineoverridevirtual

Reimplemented from Node.

Definition at line 1630 of file ItaniumDemangle.h.

References Node::OutputBuffer, Printing, and Ref.

Member Data Documentation

◆ Index

size_t ForwardTemplateReference::Index

Definition at line 1580 of file ItaniumDemangle.h.

Referenced by ForwardTemplateReference().

◆ Printing

bool ForwardTemplateReference::Printing = false
mutable

◆ Ref

Node* ForwardTemplateReference::Ref = nullptr

The documentation for this struct was generated from the following file: