P4C
The P4 Compiler
Loading...
Searching...
No Matches
eliminateNewtype.h
1/*
2 * Copyright 2018 VMware, Inc.
3 * SPDX-FileCopyrightText: 2018 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_ELIMINATENEWTYPE_H_
9#define MIDEND_ELIMINATENEWTYPE_H_
10
11#include "frontends/p4/typeChecking/typeChecker.h"
12#include "ir/ir.h"
13
14namespace P4 {
15
22class DoReplaceNewtype final : public Transform {
23 const TypeMap *typeMap;
24
25 public:
26 explicit DoReplaceNewtype(const TypeMap *typeMap) : typeMap(typeMap) {
27 setName("DoReplaceNewtype");
28 }
29 const IR::Node *postorder(IR::Type_Newtype *type) override {
30 return new IR::Type_Typedef(type->srcInfo, type->name, type->type);
31 }
32 const IR::Node *postorder(IR::Cast *expression) override;
33};
34
35class EliminateNewtype final : public PassManager {
36 public:
37 explicit EliminateNewtype(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
38 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
39 passes.push_back(typeChecking);
40 passes.push_back(new DoReplaceNewtype(typeMap));
41 passes.push_back(new ClearTypeMap(typeMap));
42 setName("EliminateNewtype");
43 }
44};
45
46} // namespace P4
47
48#endif /* MIDEND_ELIMINATENEWTYPE_H_ */
Definition typeChecker.h:32
Definition eliminateNewtype.h:22
Definition node.h:53
Definition visitor.h:442
Definition typeChecker.h:55
Definition typeMap.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13