19class DeclarationGenerator :
public Generator {
21 explicit DeclarationGenerator(
const SmithTarget &target) : Generator(target) {}
23 virtual ~DeclarationGenerator() =
default;
25 virtual IR::StatOrDecl *generateRandomStatementOrDeclaration(
bool is_in_func);
29 virtual IR::P4Action *genActionDeclaration();
31 virtual IR::Declaration_Constant *genConstantDeclaration();
35 virtual IR::P4Control *genControlDeclaration();
37 virtual IR::Declaration_Instance *genControlDeclarationInstance();
39 virtual IR::Type *genDerivedTypeDeclaration();
47 virtual IR::Type_Enum *genEnumDeclaration(
cstring name);
49 virtual IR::Type_SerEnum *genSerEnumDeclaration(
cstring name);
51 virtual IR::Type *genEnumTypeDeclaration(
int type);
53 virtual IR::Method *genExternDeclaration();
55 virtual IR::Function *genFunctionDeclaration();
57 static IR::Type_Header *genEthernetHeaderType();
59 virtual IR::Type_Header *genHeaderTypeDeclaration();
61 virtual IR::Type_HeaderUnion *genHeaderUnionDeclaration();
63 static constexpr size_t MAX_HEADER_STACK_SIZE = 10;
65 virtual IR::Type *genHeaderStackType();
67 virtual IR::Type_Struct *genStructTypeDeclaration();
69 virtual IR::Type_Struct *genHeaderStruct();
71 virtual IR::Type_Declaration *genTypeDeclaration();
73 virtual const IR::Type *genType();
75 virtual IR::Type_Typedef *genTypeDef();
77 virtual IR::Type_Newtype *genNewtype();
79 virtual IR::Type *genTypeDefOrNewType();
81 virtual IR::Declaration_Variable *genVariableDeclaration();
83 virtual IR::Parameter *genTypedParameter(
bool if_none_dir);
85 virtual IR::Parameter *genParameter(IR::Direction dir,
cstring p_name,
cstring t_name);
87 virtual IR::ParameterList *genParameterList();