P4C
The P4 Compiler
Loading...
Searching...
No Matches
cloner.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef FRONTENDS_P4_CLONER_H_
9#define FRONTENDS_P4_CLONER_H_
10
11#include "ir/ir.h"
12
13namespace P4 {
14
17class CloneExpressions : public Transform {
18 public:
19 CloneExpressions() {
20 visitDagOnce = false;
21 setName("CloneExpressions");
22 }
23 const IR::Node *postorder(IR::PathExpression *path) override {
24 path->path = path->path->clone();
25 return path;
26 }
27
28 // Clone expressions of the form Member(TypeNameExpression)
29 const IR::Node *postorder(IR::Member *member) override {
30 if (member->expr->is<IR::TypeNameExpression>()) {
31 return new IR::Member(member->expr->clone(), member->member);
32 }
33 return member;
34 }
35
36 template <typename T>
37 const T *clone(const IR::Node *node) {
38 return node->apply(*this)->to<T>();
39 }
40};
41
42} // namespace P4
43
44#endif /* FRONTENDS_P4_CLONER_H_ */
Definition node.h:44
Definition visitor.h:433
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
T * to() noexcept
Definition rtti.h:226