From c5c4b167f654e9d83db5e1299288e596c6c9be81 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Tue, 17 Jul 2018 16:53:15 +0900 Subject: [PATCH] [nest] Add 'DerefNode' class (#685) This commit adds 'DerefNode' class under nest::expr namesapce. 'DerefNode' class serves as an internal representation of the dereference expression (read a value from a domain with specific indicies). Signed-off-by: Jonghyun Park --- contrib/nest/include/nest/Expr.h | 1 + contrib/nest/include/nest/expr/DerefNode.h | 38 ++++++++++++++++++++++++++++++ contrib/nest/include/nest/expr/Node.def | 1 + contrib/nest/src/expr/DerefNode.test.cpp | 23 ++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 contrib/nest/include/nest/expr/DerefNode.h create mode 100644 contrib/nest/src/expr/DerefNode.test.cpp diff --git a/contrib/nest/include/nest/Expr.h b/contrib/nest/include/nest/Expr.h index 66b2e43..aef73b3 100644 --- a/contrib/nest/include/nest/Expr.h +++ b/contrib/nest/include/nest/Expr.h @@ -5,6 +5,7 @@ #include "nest/expr/Visitor.h" #include "nest/expr/VarNode.h" +#include "nest/expr/DerefNode.h" #include diff --git a/contrib/nest/include/nest/expr/DerefNode.h b/contrib/nest/include/nest/expr/DerefNode.h new file mode 100644 index 0000000..c6ef591 --- /dev/null +++ b/contrib/nest/include/nest/expr/DerefNode.h @@ -0,0 +1,38 @@ +#ifndef __NEXT_EXPR_DEREF_NODE_H__ +#define __NEXT_EXPR_DEREF_NODE_H__ + +#include "nest/DomainID.h" + +#include "nest/expr/Subscript.h" + +namespace nest +{ +namespace expr +{ + +class DerefNode final : public Node +{ +public: + template + DerefNode(const DomainID &id, Args &&... indicies) + : _id{id}, _sub{std::forward(indicies)...} + { + // DO NOTHING + } + +public: + const DerefNode *asDeref(void) const override { return this; } + +public: + const DomainID &id(void) const { return _id; } + const Subscript &sub(void) const { return _sub; } + +private: + DomainID const _id; + Subscript const _sub; +}; + +} // namespace expr +} // namespace nest + +#endif // __NEXT_EXPR_DEREF_NODE_H__ diff --git a/contrib/nest/include/nest/expr/Node.def b/contrib/nest/include/nest/expr/Node.def index a2c0a0c..1c4dd21 100644 --- a/contrib/nest/include/nest/expr/Node.def +++ b/contrib/nest/include/nest/expr/Node.def @@ -4,3 +4,4 @@ // EXPR(Tag) EXPR(Var) +EXPR(Deref) diff --git a/contrib/nest/src/expr/DerefNode.test.cpp b/contrib/nest/src/expr/DerefNode.test.cpp new file mode 100644 index 0000000..37543ad --- /dev/null +++ b/contrib/nest/src/expr/DerefNode.test.cpp @@ -0,0 +1,23 @@ +#include "nest/expr/DerefNode.h" + +#include + +#include + +namespace +{ +struct DummyNode final : public nest::expr::Node +{ +}; +} + +TEST(DEREF_NODE, cast) +{ + const nest::DomainID dom_id{0}; + + auto derived = std::make_shared(dom_id, std::make_shared()); + std::shared_ptr base = derived; + + ASSERT_NE(derived.get(), nullptr); + ASSERT_EQ(base->asDeref(), derived.get()); +} -- 2.7.4