renamed let to let_stmt

This commit is contained in:
Karma Riuk
2025-07-07 17:44:11 +02:00
parent 39eafe2360
commit b98424aa5f
6 changed files with 17 additions and 13 deletions

View File

@@ -1,16 +1,16 @@
#include "let.hpp" #include "let.hpp"
namespace ast { namespace ast {
let::let(token::token token) let_stmt::let_stmt(token::token token)
: token(std::move(token)), : token(std::move(token)),
name(nullptr), name(nullptr),
value(nullptr) {} value(nullptr) {}
std::string let::token_literal() const { std::string let_stmt::token_literal() const {
return token.literal; return token.literal;
} }
let::~let() { let_stmt::~let_stmt() {
delete name; delete name;
delete value; delete value;
}; };

View File

@@ -5,8 +5,8 @@
#include "token/token.hpp" #include "token/token.hpp"
namespace ast { namespace ast {
struct let : statement { struct let_stmt : statement {
let(token::token token); let_stmt(token::token token);
token::token token; token::token token;
identifier* name; identifier* name;
@@ -14,6 +14,6 @@ namespace ast {
std::string token_literal() const override; std::string token_literal() const override;
~let(); ~let_stmt();
}; };
} // namespace ast } // namespace ast

View File

@@ -35,6 +35,8 @@ namespace parser {
switch (current.type) { switch (current.type) {
case token::type::LET: case token::type::LET:
return parse_let(); return parse_let();
case token::type::RETURN:
return parse_return();
default: default:
return nullptr; return nullptr;
} }
@@ -49,8 +51,8 @@ namespace parser {
return false; return false;
} }
ast::let* parser::parse_let() { ast::let_stmt* parser::parse_let() {
ast::let* stmt = new ast::let(current); ast::let_stmt* stmt = new ast::let_stmt(current);
if (!expect_next(token::type::IDENTIFIER)) { if (!expect_next(token::type::IDENTIFIER)) {
delete stmt; delete stmt;

View File

@@ -3,6 +3,7 @@
#include "ast/ast.hpp" #include "ast/ast.hpp"
#include "ast/errors/error.hpp" #include "ast/errors/error.hpp"
#include "ast/statements/let.hpp" #include "ast/statements/let.hpp"
#include "ast/statements/return.hpp"
#include "lexer/lexer.hpp" #include "lexer/lexer.hpp"
#include "token/token.hpp" #include "token/token.hpp"
@@ -20,7 +21,8 @@ namespace parser {
void next_token(); void next_token();
ast::statement* parse_statement(); ast::statement* parse_statement();
ast::let* parse_let(); ast::let_stmt* parse_let();
ast::return_stmt* parse_return();
bool expect_next(token::type); bool expect_next(token::type);
void next_error(token::type); void next_error(token::type);
}; };

View File

@@ -10,8 +10,8 @@
void test_let_statement(ast::statement* stmt, const std::string name) { void test_let_statement(ast::statement* stmt, const std::string name) {
REQUIRE(stmt->token_literal() == "let"); REQUIRE(stmt->token_literal() == "let");
ast::let* let_stmt; ast::let_stmt* let_stmt;
REQUIRE_NOTHROW(let_stmt = dynamic_cast<ast::let*>(stmt)); REQUIRE_NOTHROW(let_stmt = dynamic_cast<ast::let_stmt*>(stmt));
REQUIRE_MESSAGE( REQUIRE_MESSAGE(
let_stmt != nullptr, let_stmt != nullptr,
"Couldn't cast statement to a let statement" "Couldn't cast statement to a let statement"

View File

@@ -27,8 +27,8 @@ return 103213;\
for (const auto stmt : program->statements) { for (const auto stmt : program->statements) {
REQUIRE(stmt->token_literal() == "return"); REQUIRE(stmt->token_literal() == "return");
ast::let* let_stmt; ast::let_stmt* let_stmt;
REQUIRE_NOTHROW(let_stmt = dynamic_cast<ast::let*>(stmt)); REQUIRE_NOTHROW(let_stmt = dynamic_cast<ast::let_stmt*>(stmt));
REQUIRE_MESSAGE( REQUIRE_MESSAGE(
let_stmt != nullptr, let_stmt != nullptr,
"Couldn't cast statement to a return statement" "Couldn't cast statement to a return statement"