P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::ResolutionContext Class Reference

Visitor mixin for looking up names in enclosing scopes from the Visitor::Context. More...

#include <resolveReferences.h>

Inherits P4::Visitor, and P4::DeclarationLookup.

Inherited by P4::AbstractInliner< ActionsInlineList, AInlineWorkList >, P4::AbstractInliner< FunctionsInlineList, FunctionsInlineWorkList >, P4::AbstractInliner< InlineList, InlineSummary >, P4::AbstractInliner< P4::InlineList, InlineWorkList >, BFN::ControlFlowVisitor [virtual], ComputeDefUse, ComputeDefUse::SetupJoinPoints, P4::AbstractInliner< InlineList, InlineWorkList >, P4::CheckExternInvocationCommon, P4::CollectUsedDeclarations [private], P4::ComputeDefUse, P4::ComputeDefUse::SetupJoinPoints, P4::ComputeParserCG, P4::ConstantTypeSubstitution [private], P4::CreateStructInitializers, P4::Deprecated, P4::DiscoverActionsInlining, P4::DiscoverFunctionsInlining, P4::DoCheckConstants, P4::DoCheckCoreMethods, P4::DoConstantFolding, P4::DoDefaultArguments, P4::DoExpandEmit, P4::DoExpandLookahead, P4::DoLocalCopyPropagation [private], P4::DoOrderArguments, P4::DoRemoveAssertAssume, P4::DoRemoveExits, P4::DoRemoveMiss, P4::DoReplaceTypedef, P4::DoSimplifyControlFlow, P4::DoSimplifyExpressions, P4::DoStaticAssert, P4::DoTableHit, P4::DontcareArgs, P4::EliminateSubparserCalls, P4::EntryPriorities, P4::FindActionParameters, P4::FindFunctionSpecializations, P4::FindGlobalActionUses, P4::FindRepeatedActionUses, P4::FindSpecializations, P4::FunctionsInliner::isLocalExpression [private], P4::HasTableApply, P4::InstantiateDirectCalls, P4::IsValid, P4::KeySideEffect, P4::LocalizeActions, P4::MoveInitializers, P4::P4Fmt::P4Formatter [private], P4::P4Tools::P4ProgramDCGCreator [private], P4::ReadsWrites, P4::RemoveComplexExpressions, P4::RemoveNestedStructs, P4::RemoveUnusedDeclarations [private], P4::RenameSymbols, P4::ReplaceStructs [private], P4::ResolveReferences [private], P4::SubstituteParameters, P4::ToP4 [private], P4::TypeInferenceBase, P4::UnrollLoops, P4::hasSideEffects, and TableMutex.

Public Member Functions

const IR::IDeclarationgetDeclaration (const IR::Path *path, bool notNull=false) const
 
const IR::IDeclarationgetDeclaration (const IR::This *, bool notNull=false) const
 
auto getDeclarations (const IR::INamespace *ns) const
 Returns the set of decls that exist in the given namespace.
 
auto getDeclsByName (const IR::INamespace *ns, cstring name) const
 Returns the set of decls with the given name that exist in the given namespace.
 
std::vector< const IR::IDeclaration * > resolve (const IR::ID &name, ResolutionType type) const
 Resolve references for name, restricted to type declarations.
 
virtual const IR::IDeclarationresolvePath (const IR::Path *path, bool isType) const
 
const IR::Type * resolveType (const IR::Type *type) const
 Resolve a refrence to a type type.
 
const IR::IDeclarationresolveUnique (const IR::ID &name, ResolutionType type, const IR::INamespace *=nullptr) const
 Resolve reference for name, restricted to type declarations, and expect one result.
 
- Public Member Functions inherited from P4::Visitor
virtual const IR::Nodeapply_visitor (const IR::Node *n, const char *name=0)=0
 
virtual bool check_clone (const Visitor *a)
 
virtual bool check_global (cstring)
 
virtual void clear_globals ()
 
virtual Visitorclone () const
 
virtual ControlFlowVisitorcontrolFlowVisitor ()
 
virtual void end_apply ()
 
virtual void end_apply (const IR::Node *root)
 
virtual void erase_global (cstring)
 
template<class T >
const T * findContext () const
 
template<class T >
const T * findContext (const Context *&c) const
 
template<class T >
const T * findOrigCtxt () const
 
template<class T >
const T * findOrigCtxt (const Context *&c) const
 
virtual Visitorflow_clone ()
 
virtual void flow_merge (Visitor &)
 
virtual bool flow_merge_closure (Visitor &)
 
virtual void flow_merge_global_from (cstring)
 
virtual void flow_merge_global_to (cstring)
 
const ContextgetChildContext () const
 
int getChildrenVisited () const
 
const ContextgetContext () const
 
int getContextDepth () const
 
const IR::NodegetCurrentNode () const
 
template<class T >
const T * getCurrentNode () const
 
const IR::NodegetOriginal () const
 
template<class T >
const T * getOriginal () const
 
template<class T >
const T * getParent () const
 
virtual bool has_flow_joins () const
 
virtual profile_t init_apply (const IR::Node *root)
 
profile_t init_apply (const IR::Node *root, const Context *parent_context)
 
bool isInContext (const IR::Node *n) const
 
virtual const char * name () const
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (const IR::Vector< T > &v, const char *name=0)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name, int cidx)
 
template<class T >
void parallel_visit (IR::Vector< T > &v, const char *name=0)
 
void print_context () const
 
const VisitorsetCalledBy (const Visitor *visitor)
 
void setName (const char *name)
 
void visit (const IR::Node &n, const char *name, int cidx)
 
void visit (const IR::Node &n, const char *name=0)
 
void visit (const IR::Node *&n, const char *name, int cidx)
 
void visit (const IR::Node *&n, const char *name=0)
 
void visit (const IR::Node *const &n, const char *name, int cidx)
 
void visit (const IR::Node *const &n, const char *name=0)
 
void visit (IR::Node &n, const char *name, int cidx)
 
void visit (IR::Node &n, const char *name=0)
 
void visit (IR::Node *&, const char *=0, int=0)
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_pointer_v<T>>, class... Args>
void warn (const int kind, const char *format, const T &node, Args &&...args)
 The const ref variant of the above.
 
template<class T , typename = std::enable_if_t<Util::has_SourceInfo_v<T>>, class... Args>
void warn (const int kind, const char *format, const T *node, Args &&...args)
 
bool warning_enabled (int warning_kind) const
 
- Public Member Functions inherited from P4::DeclarationLookup

Protected Member Functions

 ResolutionContext (bool ao)
 
std::vector< const IR::IDeclaration * > lookup (const IR::INamespace *ns, const IR::ID &name, ResolutionType type) const
 
std::vector< const IR::IDeclaration * > lookupMatchKind (const IR::ID &name) const
 
const IR::Vector< IR::Argument > * methodArguments (cstring name) const
 We are resolving a method call. Find the arguments from the context.
 
- Protected Member Functions inherited from P4::Visitor
virtual void init_join_flows (const IR::Node *)
 
virtual bool join_flows (const IR::Node *)
 
virtual void post_join_flows (const IR::Node *, const IR::Node *)
 
void visit_children (const IR::Node *, std::function< void()> fn)
 
virtual void visitAgain () const
 
virtual void visitOnce () const
 

Protected Attributes

bool anyOrder = false
 
- Protected Attributes inherited from P4::Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 

Additional Inherited Members

- Public Types inherited from P4::Visitor
typedef Visitor_Context Context
 
- Static Public Member Functions inherited from P4::Visitor
static cstring demangle (const char *)
 
static bool warning_enabled (const Visitor *visitor, int warning_kind)
 
- Public Attributes inherited from P4::Visitor
const Visitorcalled_by = nullptr
 
cstring internalName
 
SplitFlowVisit_base *& split_link
 
SplitFlowVisit_basesplit_link_mem = nullptr
 

Detailed Description

Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.

Member Function Documentation

◆ getDeclaration() [1/2]

const IR::IDeclaration * P4::ResolutionContext::getDeclaration ( const IR::Path * path,
bool notNull = false ) const
virtual

Implements P4::DeclarationLookup.

◆ getDeclaration() [2/2]

const IR::IDeclaration * P4::ResolutionContext::getDeclaration ( const IR::This * pointer,
bool notNull = false ) const
virtual

Implements P4::DeclarationLookup.

◆ resolvePath()

const IR::IDeclaration * P4::ResolutionContext::resolvePath ( const IR::Path * path,
bool isType ) const
virtual

Resolve path; if isType is true then resolution will only return type nodes.