P4C
The P4 Compiler
Loading...
Searching...
No Matches
bindVariables.h
1#ifndef FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_
2#define FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_
3
4#include "frontends/p4/typeChecking/typeChecker.h"
5#include "frontends/p4/typeMap.h"
6#include "ir/ir.h"
7
8namespace P4 {
9
10// Insert explicit type specializations where they are missing
11class DoBindTypeVariables : public Transform {
13 TypeMap *typeMap;
14 const IR::Type *getVarValue(const IR::Type_Var *var, const IR::Node *errorPosition) const;
15 const IR::Node *insertTypes(const IR::Node *node);
16
17 public:
18 explicit DoBindTypeVariables(TypeMap *typeMap) : typeMap(typeMap) {
19 CHECK_NULL(typeMap);
20 setName("DoBindTypeVariables");
21 newTypes = new IR::IndexedVector<IR::Node>();
22 }
23 const IR::Node *postorder(IR::Expression *expression) override;
24 const IR::Node *postorder(IR::Declaration_Instance *decl) override;
25 const IR::Node *postorder(IR::MethodCallExpression *expression) override;
26 const IR::Node *postorder(IR::ConstructorCallExpression *expression) override;
27 const IR::Node *postorder(IR::P4Parser *parser) override { return insertTypes(parser); }
28 const IR::Node *postorder(IR::P4Control *control) override { return insertTypes(control); }
29};
30
31class BindTypeVariables : public PassManager {
32 public:
33 explicit BindTypeVariables(TypeMap *typeMap) {
34 CHECK_NULL(typeMap);
35 passes.push_back(new ClearTypeMap(typeMap));
36 passes.push_back(new TypeInference(typeMap, false)); // may insert casts
37 passes.push_back(new DoBindTypeVariables(typeMap));
38 passes.push_back(new ClearTypeMap(typeMap, true));
39 setName("BindTypeVariables");
40 }
41};
42
43} // namespace P4
44
45#endif /* FRONTENDS_P4_TYPECHECKING_BINDVARIABLES_H_ */
Definition typeChecker.h:32
Definition bindVariables.h:11
Definition indexed_vector.h:40
Definition node.h:95
Definition visitor.h:424
Definition typeChecker.h:78
Definition typeMap.h:41
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24