From e020b9480f2faba9fce76cb7acf584eee8aba845 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: Mon, 16 Jul 2018 17:40:51 +0900 Subject: [PATCH] [nest] Add variable expression node (#664) This commit adds 'nest::expr::VarNode' class which represents index variable exression in nest IR. Signed-off-by: Jonghyun Park --- contrib/nest/include/nest/Expr.h | 2 ++ contrib/nest/include/nest/expr/Node.def | 1 + contrib/nest/include/nest/expr/VarNode.h | 36 ++++++++++++++++++++++++++++++++ contrib/nest/src/expr/VarNode.test.cpp | 31 +++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 contrib/nest/include/nest/expr/VarNode.h create mode 100644 contrib/nest/src/expr/VarNode.test.cpp diff --git a/contrib/nest/include/nest/Expr.h b/contrib/nest/include/nest/Expr.h index d7447d3..8c84c06 100644 --- a/contrib/nest/include/nest/Expr.h +++ b/contrib/nest/include/nest/Expr.h @@ -4,4 +4,6 @@ #include "nest/expr/Node.h" #include "nest/expr/Visitor.h" +#include "nest/expr/VarNode.h" + #endif // __NEST_EXPR_H__ diff --git a/contrib/nest/include/nest/expr/Node.def b/contrib/nest/include/nest/expr/Node.def index 64c522f..a2c0a0c 100644 --- a/contrib/nest/include/nest/expr/Node.def +++ b/contrib/nest/include/nest/expr/Node.def @@ -3,3 +3,4 @@ #endif // EXPR(Tag) +EXPR(Var) diff --git a/contrib/nest/include/nest/expr/VarNode.h b/contrib/nest/include/nest/expr/VarNode.h new file mode 100644 index 0000000..dcd13e6 --- /dev/null +++ b/contrib/nest/include/nest/expr/VarNode.h @@ -0,0 +1,36 @@ +#ifndef __NEXT_EXPR_VAR_NODE_H__ +#define __NEXT_EXPR_VAR_NODE_H__ + +#include "nest/VarID.h" + +#include "nest/expr/Forward.h" +#include "nest/expr/Visitor.h" +#include "nest/expr/Node.h" + +namespace nest +{ +namespace expr +{ + +class VarNode final : public Node +{ +public: + VarNode(const VarID &id) : _id{id} + { + // DO NOTHING + } + +public: + const VarNode *asVar(void) const override { return this; } + +public: + const VarID &id(void) const { return _id; } + +private: + VarID const _id; +}; + +} // namespace expr +} // namespace nest + +#endif // __NEXT_EXPR_VAR_NODE_H__ diff --git a/contrib/nest/src/expr/VarNode.test.cpp b/contrib/nest/src/expr/VarNode.test.cpp new file mode 100644 index 0000000..810490c --- /dev/null +++ b/contrib/nest/src/expr/VarNode.test.cpp @@ -0,0 +1,31 @@ +#include "nest/expr/VarNode.h" + +#include + +#include + +TEST(VAR_NODE, ctor) +{ + auto make = [](uint32_t n) { + const nest::VarID id{n}; + + return std::make_shared(id); + }; + + auto node = make(4); + + // NOTE 'id' should be copied + ASSERT_EQ(node->id().value(), 4); +} + +TEST(VAR_NODE, cast) +{ + const nest::VarID id{0}; + + auto derived = std::make_shared(id); + std::shared_ptr base = derived; + + // NOTE Cast method should be overrided + ASSERT_NE(derived.get(), nullptr); + ASSERT_EQ(base->asVar(), derived.get()); +} -- 2.7.4