diff --git a/src/ast/statements/let.cpp b/src/ast/statements/let.cpp index 29ee789..12b132f 100644 --- a/src/ast/statements/let.cpp +++ b/src/ast/statements/let.cpp @@ -1,16 +1,16 @@ #include "let.hpp" namespace ast { - let::let(token::token token) + let_stmt::let_stmt(token::token token) : token(std::move(token)), name(nullptr), value(nullptr) {} - std::string let::token_literal() const { + std::string let_stmt::token_literal() const { return token.literal; } - let::~let() { + let_stmt::~let_stmt() { delete name; delete value; }; diff --git a/src/ast/statements/let.hpp b/src/ast/statements/let.hpp index 3dc7d3b..6632cf4 100644 --- a/src/ast/statements/let.hpp +++ b/src/ast/statements/let.hpp @@ -5,8 +5,8 @@ #include "token/token.hpp" namespace ast { - struct let : statement { - let(token::token token); + struct let_stmt : statement { + let_stmt(token::token token); token::token token; identifier* name; @@ -14,6 +14,6 @@ namespace ast { std::string token_literal() const override; - ~let(); + ~let_stmt(); }; } // namespace ast diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp index cd3de65..69c35dc 100644 --- a/src/parser/parser.cpp +++ b/src/parser/parser.cpp @@ -35,6 +35,8 @@ namespace parser { switch (current.type) { case token::type::LET: return parse_let(); + case token::type::RETURN: + return parse_return(); default: return nullptr; } @@ -49,8 +51,8 @@ namespace parser { return false; } - ast::let* parser::parse_let() { - ast::let* stmt = new ast::let(current); + ast::let_stmt* parser::parse_let() { + ast::let_stmt* stmt = new ast::let_stmt(current); if (!expect_next(token::type::IDENTIFIER)) { delete stmt; diff --git a/src/parser/parser.hpp b/src/parser/parser.hpp index a72d7f3..d53949f 100644 --- a/src/parser/parser.hpp +++ b/src/parser/parser.hpp @@ -3,6 +3,7 @@ #include "ast/ast.hpp" #include "ast/errors/error.hpp" #include "ast/statements/let.hpp" +#include "ast/statements/return.hpp" #include "lexer/lexer.hpp" #include "token/token.hpp" @@ -20,7 +21,8 @@ namespace parser { void next_token(); ast::statement* parse_statement(); - ast::let* parse_let(); + ast::let_stmt* parse_let(); + ast::return_stmt* parse_return(); bool expect_next(token::type); void next_error(token::type); }; diff --git a/test/parser/let.cpp b/test/parser/let.cpp index c10f4f6..b0f8743 100644 --- a/test/parser/let.cpp +++ b/test/parser/let.cpp @@ -10,8 +10,8 @@ void test_let_statement(ast::statement* stmt, const std::string name) { REQUIRE(stmt->token_literal() == "let"); - ast::let* let_stmt; - REQUIRE_NOTHROW(let_stmt = dynamic_cast(stmt)); + ast::let_stmt* let_stmt; + REQUIRE_NOTHROW(let_stmt = dynamic_cast(stmt)); REQUIRE_MESSAGE( let_stmt != nullptr, "Couldn't cast statement to a let statement" diff --git a/test/parser/return.cpp b/test/parser/return.cpp index 45d283b..e15da9d 100644 --- a/test/parser/return.cpp +++ b/test/parser/return.cpp @@ -27,8 +27,8 @@ return 103213;\ for (const auto stmt : program->statements) { REQUIRE(stmt->token_literal() == "return"); - ast::let* let_stmt; - REQUIRE_NOTHROW(let_stmt = dynamic_cast(stmt)); + ast::let_stmt* let_stmt; + REQUIRE_NOTHROW(let_stmt = dynamic_cast(stmt)); REQUIRE_MESSAGE( let_stmt != nullptr, "Couldn't cast statement to a return statement"