From 5022c5d9afb9b1a8de6d61dfc673cf17b1cf2930 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Mon, 29 Jul 2019 12:36:48 +0200
Subject: [PATCH] Add ASTNodeExpressionBuilder class

Also removed useless nesting to the `language` namespace
---
 .../ASTNodeAffectationExpressionBuilder.cpp      |  5 +----
 .../ASTNodeAffectationExpressionBuilder.hpp      |  3 ---
 .../ASTNodeBinaryOperatorExpressionBuilder.cpp   |  4 ----
 .../ASTNodeBinaryOperatorExpressionBuilder.hpp   |  3 ---
 src/language/ASTNodeExpressionBuilder.cpp        | 16 ++++------------
 src/language/ASTNodeExpressionBuilder.hpp        |  9 ++++++---
 src/language/ASTNodeIncDecExpressionBuilder.cpp  |  3 ---
 src/language/ASTNodeIncDecExpressionBuilder.hpp  |  3 ---
 .../ASTNodeUnaryOperatorExpressionBuilder.cpp    |  3 ---
 .../ASTNodeUnaryOperatorExpressionBuilder.hpp    |  3 ---
 src/language/PugsParser.cpp                      |  2 +-
 11 files changed, 12 insertions(+), 42 deletions(-)

diff --git a/src/language/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ASTNodeAffectationExpressionBuilder.cpp
index 60e4a5964..89a86a295 100644
--- a/src/language/ASTNodeAffectationExpressionBuilder.cpp
+++ b/src/language/ASTNodeAffectationExpressionBuilder.cpp
@@ -2,8 +2,6 @@
 #include <PEGGrammar.hpp>
 #include <SymbolTable.hpp>
 
-namespace language
-{
 template <typename Op>
 struct AffOp;
 
@@ -145,7 +143,7 @@ class AffectationToStringProcessor final : public INodeProcessor
       }
     }
   }
-};   // namespace language
+};
 
 ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode& n)
 {
@@ -256,4 +254,3 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode
     throw parse_error("unexpected error: undefined affectation operator", std::vector{n.begin()});
   }
 }
-}   // namespace language
diff --git a/src/language/ASTNodeAffectationExpressionBuilder.hpp b/src/language/ASTNodeAffectationExpressionBuilder.hpp
index 424ebed63..412e3e048 100644
--- a/src/language/ASTNodeAffectationExpressionBuilder.hpp
+++ b/src/language/ASTNodeAffectationExpressionBuilder.hpp
@@ -3,12 +3,9 @@
 
 #include <ASTNode.hpp>
 
-namespace language
-{
 struct ASTNodeAffectationExpressionBuilder
 {
   ASTNodeAffectationExpressionBuilder(ASTNode& node);
 };
-}   // namespace language
 
 #endif   // AST_NODE_AFFECTATION_EXPRESSION_BUILDER_HPP
diff --git a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
index c6cd1e4af..8309bf1b4 100644
--- a/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
+++ b/src/language/ASTNodeBinaryOperatorExpressionBuilder.cpp
@@ -4,8 +4,6 @@
 
 #include <type_traits>
 
-namespace language
-{
 template <typename Op>
 struct BinOp;
 
@@ -370,5 +368,3 @@ ASTNodeBinaryOperatorExpressionBuilder::ASTNodeBinaryOperatorExpressionBuilder(A
     throw parse_error("unexpected error: undefined binary operator", std::vector{n.begin()});
   }
 }
-
-}   // namespace language
diff --git a/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp b/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp
index 3f38260f1..f6709c2db 100644
--- a/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp
+++ b/src/language/ASTNodeBinaryOperatorExpressionBuilder.hpp
@@ -3,12 +3,9 @@
 
 #include <ASTNode.hpp>
 
-namespace language
-{
 struct ASTNodeBinaryOperatorExpressionBuilder
 {
   ASTNodeBinaryOperatorExpressionBuilder(ASTNode& node);
 };
-}   // namespace language
 
 #endif   // AST_NODE_BINARY_OPERATOR_EXPRESSION_BUILDER_HPP
diff --git a/src/language/ASTNodeExpressionBuilder.cpp b/src/language/ASTNodeExpressionBuilder.cpp
index 703fd104e..93068490c 100644
--- a/src/language/ASTNodeExpressionBuilder.cpp
+++ b/src/language/ASTNodeExpressionBuilder.cpp
@@ -8,8 +8,6 @@
 #include <PEGGrammar.hpp>
 #include <SymbolTable.hpp>
 
-namespace language
-{
 class ASTNodeList final : public INodeProcessor
 {
   ASTNode& m_node;
@@ -261,10 +259,8 @@ class OStreamObject final : public INodeProcessor
   }
 };
 
-namespace internal
-{
 void
-build_node_type(ASTNode& n)
+ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
 {
   if (n.is_root() or n.is<language::bloc>()) {
     n.m_node_processor = std::make_unique<ASTNodeList>(n);
@@ -343,20 +339,16 @@ build_node_type(ASTNode& n)
   }
 
   for (auto& child : n.children) {
-    internal::build_node_type(*child);
+    this->_buildExpression(*child);
   }
 }
-}   // namespace internal
 
-void
-build_node_type(ASTNode& n)
+ASTNodeExpressionBuilder::ASTNodeExpressionBuilder(ASTNode& n)
 {
   Assert(n.is_root());
-  Assert(n.is<void>());
   n.m_node_processor = std::make_unique<ASTNodeList>(n);
   for (auto& child : n.children) {
-    internal::build_node_type(*child);
+    this->_buildExpression(*child);
   }
   std::cout << " - build node types\n";
 }
-}   // namespace language
diff --git a/src/language/ASTNodeExpressionBuilder.hpp b/src/language/ASTNodeExpressionBuilder.hpp
index 861aac073..bf6d5a79a 100644
--- a/src/language/ASTNodeExpressionBuilder.hpp
+++ b/src/language/ASTNodeExpressionBuilder.hpp
@@ -3,9 +3,12 @@
 
 #include <ASTNode.hpp>
 
-namespace language
+class ASTNodeExpressionBuilder
 {
-void build_node_type(ASTNode& n);
-}
+  void _buildExpression(ASTNode& n);
+
+ public:
+  ASTNodeExpressionBuilder(ASTNode& n);
+};
 
 #endif   // AST_NODE_EXPRESSION_BUILDER_HPP
diff --git a/src/language/ASTNodeIncDecExpressionBuilder.cpp b/src/language/ASTNodeIncDecExpressionBuilder.cpp
index ec11df799..cae715aef 100644
--- a/src/language/ASTNodeIncDecExpressionBuilder.cpp
+++ b/src/language/ASTNodeIncDecExpressionBuilder.cpp
@@ -2,8 +2,6 @@
 #include <PEGGrammar.hpp>
 #include <SymbolTable.hpp>
 
-namespace language
-{
 template <typename Op>
 struct IncDecOp;
 
@@ -163,4 +161,3 @@ ASTNodeIncDecExpressionBuilder::ASTNodeIncDecExpressionBuilder(ASTNode& n)
     throw parse_error("unexpected error: undefined increment/decrement operator", std::vector{n.begin()});
   }
 }
-}   // namespace language
diff --git a/src/language/ASTNodeIncDecExpressionBuilder.hpp b/src/language/ASTNodeIncDecExpressionBuilder.hpp
index 6816a087c..5ca8938d9 100644
--- a/src/language/ASTNodeIncDecExpressionBuilder.hpp
+++ b/src/language/ASTNodeIncDecExpressionBuilder.hpp
@@ -3,12 +3,9 @@
 
 #include <ASTNode.hpp>
 
-namespace language
-{
 struct ASTNodeIncDecExpressionBuilder
 {
   ASTNodeIncDecExpressionBuilder(ASTNode& node);
 };
-}   // namespace language
 
 #endif   // AST_NODE_INC_DEC_EXPRESSION_BUILDER_HPP
diff --git a/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp b/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp
index 60160b95e..9112ad553 100644
--- a/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp
+++ b/src/language/ASTNodeUnaryOperatorExpressionBuilder.cpp
@@ -2,8 +2,6 @@
 #include <PEGGrammar.hpp>
 #include <SymbolTable.hpp>
 
-namespace language
-{
 template <typename Op>
 struct UnaryOp;
 
@@ -117,4 +115,3 @@ ASTNodeUnaryOperatorExpressionBuilder::ASTNodeUnaryOperatorExpressionBuilder(AST
     throw parse_error("unexpected error: undefined unary operator", std::vector{n.begin()});
   }
 }
-}   // namespace language
diff --git a/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp b/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp
index 59ad3022e..3e75ef2ef 100644
--- a/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp
+++ b/src/language/ASTNodeUnaryOperatorExpressionBuilder.hpp
@@ -3,12 +3,9 @@
 
 #include <ASTNode.hpp>
 
-namespace language
-{
 struct ASTNodeUnaryOperatorExpressionBuilder
 {
   ASTNodeUnaryOperatorExpressionBuilder(ASTNode& node);
 };
-}   // namespace language
 
 #endif   // AST_NODE_UNARY_OPERATOR_EXPRESSION_BUILDER_HPP
diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp
index f37b16f8a..3c5b8ec4c 100644
--- a/src/language/PugsParser.cpp
+++ b/src/language/PugsParser.cpp
@@ -75,7 +75,7 @@ parser(const std::string& filename)
     ASTNodeDeclarationToAffectationConverter{*root_node};
     ASTNodeDeclarationCleaner{*root_node};
 
-    language::build_node_type(*root_node);
+    ASTNodeExpressionBuilder{*root_node};
 
     std::cout << ASTPrinter{*root_node} << '\n';
 
-- 
GitLab