P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
BMV2::ExpressionConverter Class Referenceabstract
Inheritance diagram for BMV2::ExpressionConverter:

Public Member Functions

 ExpressionConverter (P4::ReferenceMap *refMap, P4::TypeMap *typeMap, ProgramStructure *structure, cstring scalarsName)
 
Util::IJsonconvert (const IR::Expression *e, bool doFixup=true, bool wrap=true, bool convertBool=false)
 
Util::IJsonconvertLeftValue (const IR::Expression *e)
 
virtual Util::IJsonconvertParam (const IR::Parameter *param, cstring fieldName)=0
 
Util::IJsonconvertWithConstantWidths (const IR::Expression *e)
 
const IR::Parameter * enclosingParamReference (const IR::Expression *expression)
 Non-null if the expression refers to a parameter from the enclosing control.
 
Util::IJsonfixLocal (Util::IJson *json)
 
Util::IJsonget (const IR::Expression *expression) const
 
bool isArrayIndexRuntime (const IR::Expression *e)
 
void mapExpression (const IR::Expression *expression, Util::IJson *json)
 
void postorder (const IR::AddSat *expression) override
 
void postorder (const IR::ArrayIndex *expression) override
 
void postorder (const IR::BoolLiteral *expression) override
 
void postorder (const IR::Cast *expression) override
 
void postorder (const IR::Constant *expression) override
 
void postorder (const IR::Expression *expression) override
 
void postorder (const IR::IntMod *expression) override
 
void postorder (const IR::ListExpression *expression) override
 
void postorder (const IR::Member *expression) override
 
void postorder (const IR::MethodCallExpression *expression) override
 
void postorder (const IR::Mux *expression) override
 
void postorder (const IR::Operation_Binary *expression) override
 
void postorder (const IR::Operation_Unary *expression) override
 
void postorder (const IR::PathExpression *expression) override
 
void postorder (const IR::Slice *expression) override
 
void postorder (const IR::StringLiteral *expression) override
 
void postorder (const IR::StructExpression *expression) override
 
void postorder (const IR::SubSat *expression) override
 
void postorder (const IR::TypeNameExpression *expression) override
 

Public Attributes

bool simpleExpressionsOnly
 

Member Function Documentation

◆ convert()

Util::IJson * BMV2::ExpressionConverter::convert ( const IR::Expression * e,
bool doFixup = true,
bool wrap = true,
bool convertBool = false )

Convert an expression into JSON

Parameters
eexpression to convert
doFixupInsert masking operations for operands to ensure that the result matches the specification. BMv2 does arithmetic using unbounded precision, but the spec requires fixed precision, specified by the types.
wrapWrap the result into an additiona JSON expression block. See the BMv2 JSON spec.
convertBoolWrap the result into a cast from boolean to data (b2d JSON).

Member Data Documentation

◆ simpleExpressionsOnly

bool BMV2::ExpressionConverter::simpleExpressionsOnly

If this is 'true' we fail to convert complex expressions. This is used for table key expressions, for example.