diff --git a/include/ast.hpp b/include/ast.hpp index 3c3321d..23cd246 100644 --- a/include/ast.hpp +++ b/include/ast.hpp @@ -13,4 +13,4 @@ #include "ast_constant.hpp" #include "ast_context.hpp" -extern ast::Node* ParseAST(std::string file_name); +ast::NodePtr ParseAST(std::string file_name); diff --git a/include/ast_direct_declarator.hpp b/include/ast_direct_declarator.hpp index 389ff9f..d14cbe2 100644 --- a/include/ast_direct_declarator.hpp +++ b/include/ast_direct_declarator.hpp @@ -10,7 +10,7 @@ class DirectDeclarator : public Node NodePtr identifier_; public: - DirectDeclarator(Node* identifier) : identifier_(identifier){}; + DirectDeclarator(NodePtr identifier) : identifier_(std::move(identifier)){}; void EmitRISC(std::ostream& stream, Context& context) const override; void Print(std::ostream& stream) const override; diff --git a/include/ast_function_definition.hpp b/include/ast_function_definition.hpp index f96c33d..e98730f 100644 --- a/include/ast_function_definition.hpp +++ b/include/ast_function_definition.hpp @@ -13,7 +13,7 @@ class FunctionDefinition : public Node NodePtr compound_statement_; public: - FunctionDefinition(TypeSpecifier declaration_specifiers, Node* declarator, Node* compound_statement) : declaration_specifiers_(declaration_specifiers), declarator_(declarator), compound_statement_(compound_statement){}; + FunctionDefinition(TypeSpecifier declaration_specifiers, NodePtr declarator, NodePtr compound_statement) : declaration_specifiers_(declaration_specifiers), declarator_(std::move(declarator)), compound_statement_(std::move(compound_statement)){}; void EmitRISC(std::ostream& stream, Context& context) const override; void Print(std::ostream& stream) const override; diff --git a/include/ast_identifier.hpp b/include/ast_identifier.hpp index d0539ae..41da20e 100644 --- a/include/ast_identifier.hpp +++ b/include/ast_identifier.hpp @@ -10,7 +10,7 @@ class Identifier : public Node std::string identifier_; public: - Identifier(std::string identifier) : identifier_(identifier){}; + Identifier(std::string identifier) : identifier_(std::move(identifier)){}; void EmitRISC(std::ostream& stream, Context& context) const override; void Print(std::ostream& stream) const override; diff --git a/include/ast_jump_statement.hpp b/include/ast_jump_statement.hpp index a0d0108..e83cfcc 100644 --- a/include/ast_jump_statement.hpp +++ b/include/ast_jump_statement.hpp @@ -10,7 +10,7 @@ class ReturnStatement : public Node NodePtr expression_; public: - ReturnStatement(Node* expression) : expression_(expression) {} + ReturnStatement(NodePtr expression) : expression_(std::move(expression)) {} void EmitRISC(std::ostream& stream, Context& context) const override; void Print(std::ostream& stream) const override; diff --git a/include/ast_node.hpp b/include/ast_node.hpp index 76b4fbd..4025b5f 100644 --- a/include/ast_node.hpp +++ b/include/ast_node.hpp @@ -27,9 +27,9 @@ class NodeList : public Node std::vector nodes_; public: - NodeList(Node* first_node) { nodes_.emplace_back(first_node); } + NodeList(NodePtr first_node) { nodes_.push_back(std::move(first_node)); } - void PushBack(Node* item); + void PushBack(NodePtr item); virtual void EmitRISC(std::ostream& stream, Context& context) const override; virtual void Print(std::ostream& stream) const override; }; diff --git a/src/ast_node.cpp b/src/ast_node.cpp index 50fecfb..74ef492 100644 --- a/src/ast_node.cpp +++ b/src/ast_node.cpp @@ -2,9 +2,9 @@ namespace ast { -void NodeList::PushBack(Node* item) +void NodeList::PushBack(NodePtr item) { - nodes_.emplace_back(item); + nodes_.push_back(std::move(item)); } void NodeList::EmitRISC(std::ostream& stream, Context& context) const diff --git a/src/compiler.cpp b/src/compiler.cpp index 2794b94..865673b 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -39,7 +39,7 @@ int main(int argc, char **argv) NodePtr Parse(const CommandLineArguments& args) { std::cout << "Parsing: " << args.compile_source_path << std::endl; - NodePtr root{ ParseAST(args.compile_source_path) }; + NodePtr root = ParseAST(args.compile_source_path); std::cout << "AST parsing complete" << std::endl; return root; } diff --git a/src/parser.y b/src/parser.y index f3f286e..c28d352 100644 --- a/src/parser.y +++ b/src/parser.y @@ -63,7 +63,7 @@ external_declaration function_definition : declaration_specifiers declarator compound_statement { - $$ = new FunctionDefinition($1, $2, $3); + $$ = new FunctionDefinition($1, NodePtr($2), NodePtr($3)); } ; @@ -87,7 +87,7 @@ direct_declarator delete $1; } | direct_declarator '(' ')' { - $$ = new DirectDeclarator($1); + $$ = new DirectDeclarator(NodePtr($1)); } ; @@ -100,8 +100,8 @@ compound_statement ; statement_list - : statement { $$ = new NodeList($1); } - | statement_list statement { $1->PushBack($2); $$=$1; } + : statement { $$ = new NodeList(NodePtr($1)); } + | statement_list statement { $1->PushBack(NodePtr($2)); $$=$1; } ; jump_statement @@ -109,7 +109,7 @@ jump_statement $$ = new ReturnStatement(nullptr); } | RETURN expression ';' { - $$ = new ReturnStatement($2); + $$ = new ReturnStatement(NodePtr($2)); } ; @@ -187,7 +187,7 @@ expression Node* g_root; -Node* ParseAST(std::string file_name) +NodePtr ParseAST(std::string file_name) { yyin = fopen(file_name.c_str(), "r"); if(yyin == NULL){ @@ -198,5 +198,5 @@ Node* ParseAST(std::string file_name) yyparse(); fclose(yyin); yylex_destroy(); - return g_root; + return NodePtr(g_root); }