Skip to content
Snippets Groups Projects
Commit 46349766 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Remove empty blocks and function declarations

parent 4842f603
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -10,7 +10,7 @@ ASTNodeDeclarationCleaner::_removeDeclarationNode(ASTNode& n)
{
std::stack<size_t> declaration_ids;
for (size_t i_child = 0; i_child < n.children.size(); ++i_child) {
if (n.children[i_child]->is<language::declaration>()) {
if (n.children[i_child]->is<language::declaration>() or n.children[i_child]->is<language::let_declaration>()) {
declaration_ids.push(i_child);
}
}
......
#include <ASTNodeEmptyBlockCleaner.hpp>
#include <PEGGrammar.hpp>
#include <PugsAssert.hpp>
#include <stack>
void
ASTNodeEmptyBlockCleaner::_removeEmptyBlockNode(ASTNode& n)
{
for (auto& child : n.children) {
this->_removeEmptyBlockNode(*child);
}
std::stack<size_t> empty_block_ids;
for (size_t i_child = 0; i_child < n.children.size(); ++i_child) {
if (n.children[i_child]->is<language::block>()) {
if (n.children[i_child]->children.size() == 0)
empty_block_ids.push(i_child);
}
}
while (empty_block_ids.size() > 0) {
size_t i_removed = empty_block_ids.top();
empty_block_ids.pop();
for (size_t i = i_removed; i + 1 < n.children.size(); ++i) {
n.children[i] = std::move(n.children[i + 1]);
}
n.children.pop_back();
}
}
ASTNodeEmptyBlockCleaner::ASTNodeEmptyBlockCleaner(ASTNode& n)
{
Assert(n.is_root());
this->_removeEmptyBlockNode(n);
}
#ifndef AST_NODE_EMPTY_BLOCK_CLEANER_HPP
#define AST_NODE_EMPTY_BLOCK_CLEANER_HPP
#include <ASTNode.hpp>
class ASTNodeEmptyBlockCleaner
{
private:
void _removeEmptyBlockNode(ASTNode& node);
public:
ASTNodeEmptyBlockCleaner(ASTNode& root_node);
};
#endif // AST_NODE_EMPTY_BLOCK_CLEANER_HPP
......@@ -16,6 +16,7 @@ add_library(
ASTNodeDataTypeChecker.cpp
ASTNodeDeclarationToAffectationConverter.cpp
ASTNodeDeclarationCleaner.cpp
ASTNodeEmptyBlockCleaner.cpp
ASTNodeExpressionBuilder.cpp
ASTNodeIncDecExpressionBuilder.cpp
ASTNodeJumpPlacementChecker.cpp
......
......@@ -29,6 +29,8 @@
#include <ASTSymbolInitializationChecker.hpp>
#include <ASTSymbolTableBuilder.hpp>
#include <ASTNodeEmptyBlockCleaner.hpp>
#include <ASTNodeDeclarationCleaner.hpp>
#include <ASTNodeDeclarationToAffectationConverter.hpp>
......@@ -75,6 +77,7 @@ parser(const std::string& filename)
// optimizations
ASTNodeDeclarationToAffectationConverter{*root_node};
ASTNodeDeclarationCleaner{*root_node};
ASTNodeEmptyBlockCleaner{*root_node};
ASTNodeExpressionBuilder{*root_node};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment