From e659dd58d602ec5fefac53dd996b69e11be1e790 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: Thu, 19 Jul 2018 08:25:32 +0900 Subject: [PATCH] [nest] Add 'AddNode' class (#701) This commit adds 'AddNode' class under 'nest::expr' namespace, which expressions the addition of two arithmetic values. Signed-off-by: Jonghyun Park --- contrib/nest/include/nest/Expr.h | 1 + contrib/nest/include/nest/expr/AddNode.h | 37 ++++++++++++++++++++++++++++++++ contrib/nest/include/nest/expr/Node.def | 1 + contrib/nest/src/expr/AddNode.test.cpp | 27 +++++++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 contrib/nest/include/nest/expr/AddNode.h create mode 100644 contrib/nest/src/expr/AddNode.test.cpp diff --git a/contrib/nest/include/nest/Expr.h b/contrib/nest/include/nest/Expr.h index aef73b3..9fc09cb 100644 --- a/contrib/nest/include/nest/Expr.h +++ b/contrib/nest/include/nest/Expr.h @@ -6,6 +6,7 @@ #include "nest/expr/VarNode.h" #include "nest/expr/DerefNode.h" +#include "nest/expr/AddNode.h" #include diff --git a/contrib/nest/include/nest/expr/AddNode.h b/contrib/nest/include/nest/expr/AddNode.h new file mode 100644 index 0000000..b15d344 --- /dev/null +++ b/contrib/nest/include/nest/expr/AddNode.h @@ -0,0 +1,37 @@ +#ifndef __NEST_EXPR_ADD_NODE_H__ +#define __NEST_EXPR_ADD_NODE_H__ + +#include "nest/expr/Node.h" + +#include + +namespace nest +{ +namespace expr +{ + +class AddNode final : public Node +{ +public: + AddNode(const std::shared_ptr &lhs, const std::shared_ptr &rhs) + : _lhs{lhs}, _rhs{rhs} + { + // DO NOTHING + } + +public: + const AddNode *asAdd(void) const override { return this; } + +public: + const std::shared_ptr &lhs(void) const { return _lhs; } + const std::shared_ptr &rhs(void) const { return _rhs; } + +private: + std::shared_ptr const _lhs; + std::shared_ptr const _rhs; +}; + +} // namespace expr +} // namespace nest + +#endif // __NEST_EXPR_ADD_NODE_H__ diff --git a/contrib/nest/include/nest/expr/Node.def b/contrib/nest/include/nest/expr/Node.def index 1c4dd21..baf9aaa 100644 --- a/contrib/nest/include/nest/expr/Node.def +++ b/contrib/nest/include/nest/expr/Node.def @@ -5,3 +5,4 @@ // EXPR(Tag) EXPR(Var) EXPR(Deref) +EXPR(Add) diff --git a/contrib/nest/src/expr/AddNode.test.cpp b/contrib/nest/src/expr/AddNode.test.cpp new file mode 100644 index 0000000..0b2c778 --- /dev/null +++ b/contrib/nest/src/expr/AddNode.test.cpp @@ -0,0 +1,27 @@ +#include "nest/expr/AddNode.h" + +#include + +#include + +namespace +{ +struct DummyNode final : public nest::expr::Node +{ +}; +} + +TEST(ADD_NODE, cast) +{ + auto left = std::make_shared(); + auto right = std::make_shared(); + + auto derived = std::make_shared(left, right); + std::shared_ptr base = derived; + + ASSERT_NE(derived.get(), nullptr); + ASSERT_EQ(base->asAdd(), derived.get()); + + ASSERT_EQ(derived->lhs().get(), left.get()); + ASSERT_EQ(derived->rhs().get(), right.get()); +} -- 2.7.4