P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::CheckExternInvocationCommon Class Referenceabstract

Base class which can be used to prepare classes for checking constraints for invocations of externs (both methods and pure functions) in parsers and control blocks. More...

#include <checkExternInvocationCommon.h>

Inheritance diagram for P4::CheckExternInvocationCommon:
[legend]

Public Member Functions

bool preorder (const IR::MethodCallExpression *expr) override
 
- Public Member Functions inherited from P4::Inspector
const IR::Nodeapply_visitor (const IR::Node *, const char *name=0) override
 
profile_t init_apply (const IR::Node *root) override
 
virtual void loop_revisit (const IR::Node *)
 
virtual void postorder (const IR::Node *)
 
virtual bool preorder (const IR::Node *)
 
virtual void revisit (const IR::Node *)
 
void revisit_visited ()
 
bool visit_in_progress (const IR::Node *n) const
 
void visitAgain () const override
 
void visitOnce () const override
 
- Public Member Functions inherited from P4::Visitor
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
 
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::ResolutionContext
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::DeclarationLookup

Protected Member Functions

 CheckExternInvocationCommon (TypeMap *typeMap)
 
virtual void checkExtern (const ExternFunction *extFunction, const IR::MethodCallExpression *expr)
 Method for checking constraints of extern functions given by parameters.
 
virtual void checkExtern (const ExternMethod *extMethod, const IR::MethodCallExpression *expr)
 Method for checking constraints of extern method given by parameters.
 
void checkPipeConstraints (cstring extType, bitvec bv, const IR::MethodCallExpression *expr, cstring extName, cstring pipe)
 Check if the invocation of extern object method or extern function is valid in the block where it is invoked.
 
cstring extractBlock (bitvec vec)
 Get the name of the block which is represented by bit set in the bitvec.
 
virtual cstring getBlockName (int bit)=0
 Get the name of the block which is represented in bit vector (bitvec) by bit with index given by 'bit' parameter.
 
virtual void initPipeConstraints ()=0
 Method used to initialize the constraints.
 
void setPipeConstraints (cstring extType, bitvec vec)
 Set the pipe (parser/control block) constraints.
 
- 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)
 
- Protected Member Functions inherited from P4::ResolutionContext
 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 Attributes

std::map< cstring, bitvecpipeConstraints
 
TypeMaptypeMap
 
- Protected Attributes inherited from P4::Visitor
bool dontForwardChildrenBeforePreorder = false
 
bool joinFlows = false
 
bool visitDagOnce = true
 
- Protected Attributes inherited from P4::ResolutionContext
bool anyOrder = false
 

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

Base class which can be used to prepare classes for checking constraints for invocations of externs (both methods and pure functions) in parsers and control blocks.

This class contains basic operations which should be common for checkers used for various targets and architectures.

Example class which inherits from this base class can be seen in backends/dpdk/dpdkCheckExternInvocation.h.

Member Function Documentation

◆ checkExtern() [1/2]

virtual void P4::CheckExternInvocationCommon::checkExtern ( const ExternFunction * extFunction,
const IR::MethodCallExpression * expr )
inlineprotectedvirtual

Method for checking constraints of extern functions given by parameters.

If there are no constraints for extern functions, inheriting class does not need to implement this method.

Parameters
extMethodPointer to object representing extern function.
exprPointer to function call expression.

◆ checkExtern() [2/2]

void BFN::CheckExternInvocationCommon::checkExtern ( const ExternMethod * extMethod,
const IR::MethodCallExpression * expr )
inlineprotectedvirtual

Method for checking constraints of extern method given by parameters.

If there are no constraints for extern methods, inheriting class does not need to implement this method.

Parameters
extMethodPointer to object representing extern method.
exprPointer to method call expression.

Reimplemented in BFN::CheckExternInvocationCommon.

◆ checkPipeConstraints()

void P4::CheckExternInvocationCommon::checkPipeConstraints ( cstring extType,
bitvec bv,
const IR::MethodCallExpression * expr,
cstring extName,
cstring pipe )
inlineprotected

Check if the invocation of extern object method or extern function is valid in the block where it is invoked.

Parameters
extTypeName of the extern object or extern function.
bvBit vector which has set the bit representing the block in which the extern object method or extern function is invoked.
exprMethod or function call expression.
extNameName of extern object in case of extern object method invocation. Empty string ("") in case of extern function invocation.
pipeName of the parser or control block in which the method or the function is invoked.

◆ extractBlock()

cstring P4::CheckExternInvocationCommon::extractBlock ( bitvec vec)
inlineprotected

Get the name of the block which is represented by bit set in the bitvec.

Parameters
vecBit vector.
Returns
cstring Name of the block represented by index of set bit in the bitvec.

◆ getBlockName()

virtual cstring P4::CheckExternInvocationCommon::getBlockName ( int bit)
protectedpure virtual

Get the name of the block which is represented in bit vector (bitvec) by bit with index given by 'bit' parameter.

Parameters
bitIndex of bit which represents the block in bit vector.
Returns
cstring Name of the block represented by index with 'bit' parameter value.

Implemented in BFN::CheckExternInvocationCommon.

◆ initPipeConstraints()

virtual void P4::CheckExternInvocationCommon::initPipeConstraints ( )
protectedpure virtual

Method used to initialize the constraints.

Method setPipeConstraints() can be used in implementation of initPipeConstraints() method to initialize the constraints.

Method initPipeConstraints() should be called in the constructor of inheriting class.

◆ setPipeConstraints()

void P4::CheckExternInvocationCommon::setPipeConstraints ( cstring extType,
bitvec vec )
inlineprotected

Set the pipe (parser/control block) constraints.

Should be used in the initPipeConstraints() method.

Parameters
extTypeName of the extern object or function for which we set constraints.
vecBit vector representing the blocks (parser/control) in which the use of extern object method or function is valid.