P4C
The P4 Compiler
Loading...
Searching...
No Matches
declarations.h
1/*
2 * SPDX-FileCopyrightText: 2024 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_SMITH_COMMON_DECLARATIONS_H_
8#define BACKENDS_P4TOOLS_MODULES_SMITH_COMMON_DECLARATIONS_H_
9
10#include <cstddef>
11
12#include "backends/p4tools/modules/smith/common/generator.h"
13#include "ir/indexed_vector.h"
14#include "ir/ir.h"
15#include "lib/cstring.h"
16
17namespace P4::P4Tools::P4Smith {
18
19class DeclarationGenerator : public Generator {
20 public:
21 explicit DeclarationGenerator(const SmithTarget &target) : Generator(target) {}
22
23 virtual ~DeclarationGenerator() = default;
24
25 virtual IR::StatOrDecl *generateRandomStatementOrDeclaration(bool is_in_func);
26
27 virtual IR::Vector<IR::Annotation> genAnnotation();
28
29 virtual IR::P4Action *genActionDeclaration();
30
31 virtual IR::Declaration_Constant *genConstantDeclaration();
32
33 virtual IR::IndexedVector<IR::Declaration> genLocalControlDecls();
34
35 virtual IR::P4Control *genControlDeclaration();
36
37 virtual IR::Declaration_Instance *genControlDeclarationInstance();
38
39 virtual IR::Type *genDerivedTypeDeclaration();
40
41 virtual IR::IndexedVector<IR::Declaration_ID> genIdentifierList(size_t len);
42
43 virtual IR::IndexedVector<IR::SerEnumMember> genSpecifiedIdentifier(size_t len);
44
45 virtual IR::IndexedVector<IR::SerEnumMember> genSpecifiedIdentifierList(size_t len);
46
47 virtual IR::Type_Enum *genEnumDeclaration(cstring name);
48
49 virtual IR::Type_SerEnum *genSerEnumDeclaration(cstring name);
50
51 virtual IR::Type *genEnumTypeDeclaration(int type);
52
53 virtual IR::Method *genExternDeclaration();
54
55 virtual IR::Function *genFunctionDeclaration();
56
57 static IR::Type_Header *genEthernetHeaderType();
58
59 virtual IR::Type_Header *genHeaderTypeDeclaration();
60
61 virtual IR::Type_HeaderUnion *genHeaderUnionDeclaration();
62
63 static constexpr size_t MAX_HEADER_STACK_SIZE = 10;
64
65 virtual IR::Type *genHeaderStackType();
66
67 virtual IR::Type_Struct *genStructTypeDeclaration();
68
69 virtual IR::Type_Struct *genHeaderStruct();
70
71 virtual IR::Type_Declaration *genTypeDeclaration();
72
73 virtual const IR::Type *genType();
74
75 virtual IR::Type_Typedef *genTypeDef();
76
77 virtual IR::Type_Newtype *genNewtype();
78
79 virtual IR::Type *genTypeDefOrNewType();
80
81 virtual IR::Declaration_Variable *genVariableDeclaration();
82
83 virtual IR::Parameter *genTypedParameter(bool if_none_dir);
84
85 virtual IR::Parameter *genParameter(IR::Direction dir, cstring p_name, cstring t_name);
86
87 virtual IR::ParameterList *genParameterList();
88};
89
90} // namespace P4::P4Tools::P4Smith
91
92#endif /* BACKENDS_P4TOOLS_MODULES_SMITH_COMMON_DECLARATIONS_H_ */
Definition indexed_vector.h:31
Definition ir/vector.h:59
Definition p4tools/modules/smith/core/target.h:23
Definition cstring.h:85