From 75804780c9cf6bb66fff9ca77b1c0a7b51bd6486 Mon Sep 17 00:00:00 2001 From: Lenny Truong Date: Thu, 19 Dec 2019 16:36:28 -0800 Subject: [PATCH 1/2] Add ability to have a commented statement --- include/verilogAST.hpp | 8 ++++++-- src/verilogAST.cpp | 38 +++++++++++++++++++++++--------------- tests/basic.cpp | 7 +++++++ 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/include/verilogAST.hpp b/include/verilogAST.hpp index e52819e..c46d7c9 100644 --- a/include/verilogAST.hpp +++ b/include/verilogAST.hpp @@ -304,9 +304,13 @@ class SingleLineComment : public StructuralStatement, public BehavioralStatement { public: std::string value; + std::unique_ptr statement; // optional - SingleLineComment(std::string value) : value(value){}; - std::string toString() { return "// " + value; }; + SingleLineComment(std::string value) + : value(value), statement(std::unique_ptr{}){}; + SingleLineComment(std::string value, std::unique_ptr statement) + : value(value), statement(std::move(statement)){}; + std::string toString(); ~SingleLineComment(){}; }; diff --git a/src/verilogAST.cpp b/src/verilogAST.cpp index 6fd0a97..c63a41c 100644 --- a/src/verilogAST.cpp +++ b/src/verilogAST.cpp @@ -186,19 +186,19 @@ std::string BinaryOp::toString() { std::string lstr = left->toString(); std::string rstr = right->toString(); // TODO Precedence logic, for now we just insert parens if not symbol or num - if (dynamic_cast(left.get())) { - } else if (dynamic_cast(left.get())) { - } else if (dynamic_cast(left.get())) { - } else if (dynamic_cast(left.get())) { + if (dynamic_cast(left.get())) { + } else if (dynamic_cast(left.get())) { + } else if (dynamic_cast(left.get())) { + } else if (dynamic_cast(left.get())) { } else { - lstr = "(" + lstr + ")"; + lstr = "(" + lstr + ")"; } - if (dynamic_cast(right.get())) { - } else if (dynamic_cast(right.get())) { - } else if (dynamic_cast(right.get())) { - } else if (dynamic_cast(right.get())) { + if (dynamic_cast(right.get())) { + } else if (dynamic_cast(right.get())) { + } else if (dynamic_cast(right.get())) { + } else if (dynamic_cast(right.get())) { } else { - rstr = "(" + rstr + ")"; + rstr = "(" + rstr + ")"; } return lstr + ' ' + op_str + ' ' + rstr; } @@ -242,12 +242,12 @@ std::string UnaryOp::toString() { } std::string operand_str = operand->toString(); // TODO Precedence logic, for now we just insert parens if not symbol or num - if (dynamic_cast(operand.get())) { - } else if (dynamic_cast(operand.get())) { - } else if (dynamic_cast(operand.get())) { - } else if (dynamic_cast(operand.get())) { + if (dynamic_cast(operand.get())) { + } else if (dynamic_cast(operand.get())) { + } else if (dynamic_cast(operand.get())) { + } else if (dynamic_cast(operand.get())) { } else { - operand_str = "(" + operand_str + ")"; + operand_str = "(" + operand_str + ")"; } return op_str + ' ' + operand_str; } @@ -460,4 +460,12 @@ std::unique_ptr make_vector(std::unique_ptr id, std::move(lsb)); } +std::string SingleLineComment::toString() { + std::string result = ""; + if (this->statement) { + result += this->statement->toString() + " "; + } + return result + "// " + value; +}; + } // namespace verilogAST diff --git a/tests/basic.cpp b/tests/basic.cpp index 4830450..a2dcc99 100644 --- a/tests/basic.cpp +++ b/tests/basic.cpp @@ -394,6 +394,13 @@ TEST(BasicTests, Comment) { vAST::BlockComment block_comment("Test comment\non multiple lines"); EXPECT_EQ(block_comment.toString(), "/*\nTest comment\non multiple lines\n*/"); + std::unique_ptr cont_assign = + std::make_unique( + std::make_unique("a"), + std::make_unique("b")); + vAST::SingleLineComment stmt_with_comment("Test comment", + std::move(cont_assign)); + EXPECT_EQ(stmt_with_comment.toString(), "assign a = b; // Test comment"); } } // namespace From 18b4f33f066e64f477fcdd4822396e80fd6fb418 Mon Sep 17 00:00:00 2001 From: Lenny Truong Date: Thu, 19 Dec 2019 16:40:50 -0800 Subject: [PATCH 2/2] Fix extraneous parens --- src/verilogAST.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/verilogAST.cpp b/src/verilogAST.cpp index c63a41c..457a067 100644 --- a/src/verilogAST.cpp +++ b/src/verilogAST.cpp @@ -466,6 +466,6 @@ std::string SingleLineComment::toString() { result += this->statement->toString() + " "; } return result + "// " + value; -}; +} } // namespace verilogAST