From 94e2e024c9e987f900009f9ee0c508b379d9bbc8 Mon Sep 17 00:00:00 2001 From: Ingvar August Wedervang Date: Sun, 15 Sep 2024 11:24:12 +0200 Subject: [PATCH] return datatype added to function node --- compiler_lib/node.h | 3 +++ compiler_lib/parser.cpp | 1 + unit_test/test.cpp | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/compiler_lib/node.h b/compiler_lib/node.h index 7a17c23..62020b4 100644 --- a/compiler_lib/node.h +++ b/compiler_lib/node.h @@ -72,6 +72,8 @@ class node void setDatatype(std::shared_ptr < datatype > dtype) { m_datatype = dtype; } std::shared_ptr < datatype > getDatatype() {return m_datatype; } + void setReturnDatatype(std::shared_ptr < datatype > dtype) { m_return_datatype = dtype; } + std::shared_ptr < datatype > getReturnDatatype() {return m_return_datatype; } void addStatement(std::shared_ptr statement); // void setStatements(std::list < std::shared_ptr < node > > statements); std::list < std::shared_ptr < node > > getStatements() { return m_statements; } @@ -100,6 +102,7 @@ class node //used by: function nodes std::shared_ptr < node > m_body_node; + std::shared_ptr < datatype > m_return_datatype; nodeType m_node_type; filePosition m_file_position; diff --git a/compiler_lib/parser.cpp b/compiler_lib/parser.cpp index 201cee5..7efa05c 100644 --- a/compiler_lib/parser.cpp +++ b/compiler_lib/parser.cpp @@ -224,6 +224,7 @@ void parser::parseVariableOrFunction() { //parsing function int a(){} _node->setNodeType(nodeType::NODE_TYPE_FUNCTION); + _node->setReturnDatatype(datatype); pushNode(_node); //_node is popped inside parseFunction parseFunction(); return; //function node allready pushed diff --git a/unit_test/test.cpp b/unit_test/test.cpp index 50cbbe2..d689f61 100644 --- a/unit_test/test.cpp +++ b/unit_test/test.cpp @@ -676,8 +676,12 @@ TEST(parser, functionWithSecondScope) { EXPECT_EQ(_node->getStringValue(), "main"); EXPECT_EQ(_node->getBodyNode()->getBodySize(), 12); + EXPECT_EQ(_node->getReturnDatatype()->getDatatypeSize(), 4); + EXPECT_EQ(_node->getReturnDatatype()->getPrimitiveType(), primitiveType::DATA_TYPE_INTEGER); + std::list < std::shared_ptr < node > > statements = _node->getBodyNode()->getStatements(); EXPECT_EQ(statements.size(), 2); + std::shared_ptr < node > nested_body_node = statements.back(); // { int var_val; var_val + 50; int var_b; } statements.pop_back(); @@ -687,5 +691,6 @@ TEST(parser, functionWithSecondScope) { std::list < std::shared_ptr < node > > nested_statements = nested_body_node->getStatements(); EXPECT_EQ(nested_statements.size(), 3); + }