![]() |
P4C
The P4 Compiler
|
This translator emits deparser externs. More...
#include <ebpfDeparser.h>
Public Member Functions | |
DeparserBodyTranslator (const EBPFDeparser *deparser) | |
bool | preorder (const IR::MethodCallExpression *expression) override |
![]() | |
ControlBodyTranslator (const EBPFControl *control) | |
virtual void | compileEmit (const IR::Vector< IR::Argument > *args) |
virtual void | compileEmitField (const IR::Expression *expr, cstring field, unsigned alignment, EBPFType *type) |
Handle the packet_out.emit method. | |
bool | preorder (const IR::ExitStatement *) override |
bool | preorder (const IR::IfStatement *statement) override |
bool | preorder (const IR::MethodCallExpression *expression) override |
bool | preorder (const IR::PathExpression *expression) override |
bool | preorder (const IR::ReturnStatement *) override |
bool | preorder (const IR::StructExpression *expr) override |
bool | preorder (const IR::SwitchStatement *statement) override |
virtual void | processApply (const P4::ApplyMethod *method) |
void | processCustomExternFunction (const P4::ExternFunction *function, EBPFTypeFactory *typeFactory) |
virtual void | processFunction (const P4::ExternFunction *function) |
virtual void | processMethod (const P4::ExternMethod *method) |
![]() | |
CodeGenInspector (P4::ReferenceMap *refMap, P4::TypeMap *typeMap) | |
precedence of current IR::Operation | |
bool | comparison (const IR::Operation_Relation *comp) |
void | copyPointerVariables (CodeGenInspector *other) |
void | copySubstitutions (CodeGenInspector *other) |
void | emitAndConvertByteOrder (const IR::Expression *expr, cstring byte_order) |
void | emitAssignStatement (const IR::Type *ltype, const IR::Expression *lexpr, cstring lpath, const IR::Expression *rexpr) |
void | emitTCAssignmentEndianessConversion (const IR::Expression *lexpr, const IR::Expression *rexpr) |
void | emitTCBinaryOperation (const IR::Operation_Binary *b, bool isScalar) |
bool | isPointerVariable (cstring name) |
bool | notSupported (const IR::Expression *expression) |
bool | preorder (const IR::ArrayIndex *a) override |
bool | preorder (const IR::AssignmentStatement *s) override |
bool | preorder (const IR::BlockStatement *s) override |
bool | preorder (const IR::BoolLiteral *b) override |
bool | preorder (const IR::Cast *c) override |
bool | preorder (const IR::Constant *expression) override |
bool | preorder (const IR::Declaration_Variable *decl) override |
bool | preorder (const IR::EmptyStatement *s) override |
bool | preorder (const IR::Equ *e) override |
bool | preorder (const IR::ExitStatement *s) override |
This is correct only after inlining. | |
bool | preorder (const IR::Expression *expression) override |
bool | preorder (const IR::IfStatement *s) override |
bool | preorder (const IR::ListExpression *expression) override |
bool | preorder (const IR::Mask *expression) override |
bool | preorder (const IR::Member *e) override |
bool | preorder (const IR::MethodCallExpression *expression) override |
bool | preorder (const IR::MethodCallStatement *s) override |
bool | preorder (const IR::Mux *a) override |
bool | preorder (const IR::Neq *e) override |
bool | preorder (const IR::Operation_Binary *b) override |
bool | preorder (const IR::Operation_Unary *u) override |
bool | preorder (const IR::Path *path) override |
bool | preorder (const IR::PathExpression *expression) override |
bool | preorder (const IR::Range *expression) override |
bool | preorder (const IR::ReturnStatement *s) override |
bool | preorder (const IR::Slice *expression) override |
bool | preorder (const IR::StringLiteral *expression) override |
bool | preorder (const IR::StructExpression *expr) override |
bool | preorder (const IR::Type_Enum *type) override |
bool | preorder (const IR::Type_Typedef *type) override |
void | setBuilder (CodeBuilder *builder) |
void | substitute (const IR::Parameter *p, const IR::Parameter *with) |
void | useAsPointerVariable (cstring name) |
void | widthCheck (const IR::Node *node) const |
![]() | |
const IR::Node * | apply_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 |
![]() | |
virtual bool | check_global (cstring) |
virtual void | clear_globals () |
virtual Visitor * | clone () const |
virtual ControlFlowVisitor * | controlFlowVisitor () |
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 Visitor & | flow_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 Context * | getChildContext () const |
int | getChildrenVisited () const |
const Context * | getContext () const |
int | getContextDepth () const |
const IR::Node * | getCurrentNode () const |
template<class T > | |
const T * | getCurrentNode () const |
const IR::Node * | getOriginal () 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 Visitor & | setCalledBy (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>>, 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 |
Protected Attributes | |
const EBPFDeparser * | deparser |
![]() | |
const EBPFControl * | control |
P4::P4CoreLibrary & | p4lib |
std::vector< cstring > | saveAction |
std::set< const IR::Parameter * > | toDereference |
![]() | |
std::set< cstring > | asPointerVariables |
CodeBuilder * | builder |
int | commentDescriptionDepth = 0 |
P4::ReferenceMap * | refMap |
std::map< const IR::Parameter *, const IR::Parameter * > | substitution |
P4::TypeMap * | typeMap |
![]() | |
bool | dontForwardChildrenBeforePreorder = false |
bool | joinFlows = false |
bool | visitDagOnce = true |
Additional Inherited Members | |
![]() | |
typedef Visitor_Context | Context |
![]() | |
static cstring | demangle (const char *) |
static bool | warning_enabled (const Visitor *visitor, int warning_kind) |
![]() | |
int | expressionPrecedence |
![]() | |
const Visitor * | called_by = nullptr |
cstring | internalName |
SplitFlowVisit_base *& | split_link |
SplitFlowVisit_base * | split_link_mem = nullptr |
![]() | |
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) |
This translator emits deparser externs.