|
Bond 0.9
C++ Bond Runtime Library API Documentation
|
Base class for named entities that participate in symbol lookup. More...
#include <bond/compiler/parsenodes.h>
Public Types | |
| enum | SymbolType { TYPE_NAMESPACE , TYPE_STRUCT , TYPE_ENUM , TYPE_LOCALSCOPE , TYPE_VALUE , TYPE_FUNCTION } |
| Identifies the concrete symbol category. More... | |
Public Member Functions | |
| virtual | ~Symbol () |
| Destroys a Symbol object. | |
| virtual const Token * | GetContextToken () const override |
| Returns the token used as source context for diagnostics. | |
| virtual SymbolType | GetSymbolType () const =0 |
| Returns the concrete symbol type. | |
| virtual const Token * | GetName () const |
| Returns the symbol name token. | |
| virtual TypeAndValue * | GetTypeAndValue () |
| Returns the symbol's type-and-value metadata. | |
| virtual const TypeAndValue * | GetTypeAndValue () const |
| Returns the symbol's type-and-value metadata. | |
| virtual bool | IsResolved () const |
| Returns true when symbol resolution has completed for this symbol. | |
| bool | IsTypeDefinition () const |
| Returns true if this symbol defines a type, i.e. it is a struct or an enum. | |
| Symbol * | GetParentSymbol () |
| Returns the enclosing symbol. | |
| const Symbol * | GetParentSymbol () const |
| Returns the enclosing symbol. | |
| void | SetParentSymbol (Symbol *parent) |
| Sets the enclosing symbol. | |
| Symbol * | FindSymbol (const StringView &name) |
| Finds a directly contained symbol by name. | |
| const Symbol * | FindSymbol (const StringView &name) const |
| Finds a directly contained symbol by name. | |
| Symbol * | FindSymbol (const Token *name) |
| Finds a directly contained symbol by token text. | |
| const Symbol * | FindSymbol (const Token *name) const |
| Finds a directly contained symbol by token text. | |
| Symbol * | FindSymbol (const QualifiedIdentifier *identifier) |
| Finds a symbol referenced by a qualified identifier. | |
| const Symbol * | FindSymbol (const QualifiedIdentifier *identifier) const |
| Finds a symbol referenced by a qualified identifier. | |
| Symbol * | FindSymbol (const QualifiedIdentifier *identifier, bool &isAmbiguous) |
| Finds a symbol referenced by a qualified identifier, flagging ambiguous matches. | |
| const Symbol * | FindSymbol (const QualifiedIdentifier *identifier, bool &isAmbiguous) const |
| Finds a symbol referenced by a qualified identifier, flagging ambiguous matches. | |
| void | InsertSymbol (Symbol *symbol) |
| Inserts a symbol at the front of this symbol's child list and sets this symbol as its parent. | |
| bool | IsAnonymous () const |
| Returns true if this symbol has no explicit name. | |
| bool | Matches (const StringView &name) const |
| Returns true if this symbol's name matches the given text. | |
| virtual Symbol * | Resolve () |
| Returns the symbol that lookups through this symbol should ultimately resolve to. | |
| virtual const Symbol * | Resolve () const |
| Returns the symbol that lookups through this symbol should ultimately resolve to. | |
| virtual UsingDirective * | GetUsingNamespaceList () |
| Returns the list of namespaces opened in this scope via using-directives. | |
| virtual const UsingDirective * | GetUsingNamespaceList () const |
| Returns the list of namespaces opened in this scope via using-directives. | |
| virtual void | AddUsingNamespace (UsingDirective *usingDirective) |
| Opens a namespace into this scope, making its members visible to unqualified lookup. | |
| Public Member Functions inherited from Bond::ListParseNode | |
| virtual | ~ListParseNode () |
| Destroys a ListParseNode object. | |
| ListParseNode * | GetNextNode () |
| Returns the next node in the list. | |
| const ListParseNode * | GetNextNode () const |
| Returns the next node in the list. | |
| void | SetNextNode (ListParseNode *next) |
| Sets the next node in the list. | |
| Public Member Functions inherited from Bond::ParseNode | |
| virtual | ~ParseNode () |
| Destroys a ParseNode object. | |
| virtual void | Accept (ParseNodeVisitor &visitor)=0 |
| Dispatches this node to the given visitor. | |
| virtual void | Accept (ParseNodeVisitor &visitor) const =0 |
| Dispatches this node to the given visitor. | |
Protected Member Functions | |
| Symbol () | |
| Protected Member Functions inherited from Bond::ListParseNode | |
| ListParseNode () | |
| Protected Member Functions inherited from Bond::ParseNode | |
| ParseNode () | |
Base class for named entities that participate in symbol lookup.
|
inlinevirtual |
Destroys a Symbol object.
|
inlineprotected |
|
inlinevirtual |
Opens a namespace into this scope, making its members visible to unqualified lookup.
| usingDirective | Using-directive node to link into this scope's opened-namespace list. |
Reimplemented in Bond::CompoundStatement, Bond::ForStatement, and Bond::SwitchSection.
| Symbol * Bond::Symbol::FindSymbol | ( | const QualifiedIdentifier * | identifier | ) |
Finds a symbol referenced by a qualified identifier.
| identifier | Qualified identifier to resolve. |
| const Symbol * Bond::Symbol::FindSymbol | ( | const QualifiedIdentifier * | identifier | ) | const |
Finds a symbol referenced by a qualified identifier.
| identifier | Qualified identifier to resolve. |
| Symbol * Bond::Symbol::FindSymbol | ( | const QualifiedIdentifier * | identifier, |
| bool & | isAmbiguous ) |
Finds a symbol referenced by a qualified identifier, flagging ambiguous matches.
Performs unqualified lookup of the first segment, walking outward from this symbol. As in C++, the members of a namespace opened by a using-directive are treated as members of the nearest namespace that encloses both the directive and the opened namespace.
| identifier | Qualified identifier to resolve. |
| isAmbiguous | Set to true if the identifier resolves ambiguously at some scope level. |
| const Symbol * Bond::Symbol::FindSymbol | ( | const QualifiedIdentifier * | identifier, |
| bool & | isAmbiguous ) const |
Finds a symbol referenced by a qualified identifier, flagging ambiguous matches.
| identifier | Qualified identifier to resolve. |
| isAmbiguous | Set to true if the identifier resolves ambiguously at some scope level. |
| Symbol * Bond::Symbol::FindSymbol | ( | const StringView & | name | ) |
Finds a directly contained symbol by name.
| name | Name to search for. |
| const Symbol * Bond::Symbol::FindSymbol | ( | const StringView & | name | ) | const |
Finds a directly contained symbol by name.
| name | Name to search for. |
Finds a directly contained symbol by token text.
| name | Name token to search for. |
Finds a directly contained symbol by token text.
| name | Name token to search for. |
|
inlineoverridevirtual |
Returns the token used as source context for diagnostics.
Implements Bond::ParseNode.
Reimplemented in Bond::ForStatement.
|
inlinevirtual |
Returns the symbol name token.
Reimplemented in Bond::EnumDeclaration, Bond::Enumerator, Bond::FunctionDefinition, Bond::NamedInitializer, Bond::NamespaceDefinition, Bond::Parameter, Bond::StructDeclaration, and Bond::UsingDeclaration.
|
inline |
Returns the enclosing symbol.
|
inline |
Returns the enclosing symbol.
|
pure virtual |
Returns the concrete symbol type.
Implemented in Bond::CompoundStatement, Bond::EnumDeclaration, Bond::Enumerator, Bond::ForStatement, Bond::FunctionDefinition, Bond::NamedInitializer, Bond::NamespaceDefinition, Bond::Parameter, Bond::StructDeclaration, Bond::SwitchSection, and Bond::UsingDeclaration.
|
inlinevirtual |
Returns the symbol's type-and-value metadata.
Reimplemented in Bond::Enumerator, Bond::FunctionDefinition, Bond::NamedInitializer, Bond::Parameter, and Bond::UsingDeclaration.
|
inlinevirtual |
Returns the symbol's type-and-value metadata.
Reimplemented in Bond::Enumerator, Bond::FunctionDefinition, Bond::NamedInitializer, Bond::Parameter, and Bond::UsingDeclaration.
|
inlinevirtual |
Returns the list of namespaces opened in this scope via using-directives.
Reimplemented in Bond::CompoundStatement, Bond::ForStatement, and Bond::SwitchSection.
|
inlinevirtual |
Returns the list of namespaces opened in this scope via using-directives.
Reimplemented in Bond::CompoundStatement, Bond::ForStatement, and Bond::SwitchSection.
| void Bond::Symbol::InsertSymbol | ( | Symbol * | symbol | ) |
Inserts a symbol at the front of this symbol's child list and sets this symbol as its parent.
| symbol | Symbol to insert. |
|
inline |
Returns true if this symbol has no explicit name.
|
inlinevirtual |
Returns true when symbol resolution has completed for this symbol.
Reimplemented in Bond::StructDeclaration, and Bond::UsingDeclaration.
| bool Bond::Symbol::IsTypeDefinition | ( | ) | const |
Returns true if this symbol defines a type, i.e. it is a struct or an enum.
| bool Bond::Symbol::Matches | ( | const StringView & | name | ) | const |
Returns true if this symbol's name matches the given text.
| name | Name to compare against. |
|
inlinevirtual |
Returns the symbol that lookups through this symbol should ultimately resolve to.
Overridden by UsingDeclaration so that a using-declaration alias is never observed outside of symbol lookup; every other symbol resolves to itself.
Reimplemented in Bond::UsingDeclaration.
|
inlinevirtual |
Returns the symbol that lookups through this symbol should ultimately resolve to.
Reimplemented in Bond::UsingDeclaration.
| void Bond::Symbol::SetParentSymbol | ( | Symbol * | parent | ) |
Sets the enclosing symbol.
| parent | Parent symbol to assign. |