From 558e0191ba5a5b0ab99825de7d7d2219387e559e Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Sat, 19 Apr 2025 18:36:42 +0000
Subject: [PATCH] constats variable type implementation
---
src/Interpreter/DeclareVariableStatementNode.hpp | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/Interpreter/DeclareVariableStatementNode.hpp b/src/Interpreter/DeclareVariableStatementNode.hpp
index 4b4fe5d..e2fbe54 100644
--- a/src/Interpreter/DeclareVariableStatementNode.hpp
+++ b/src/Interpreter/DeclareVariableStatementNode.hpp
@@ -20,17 +20,20 @@
Symbols::Variables::Type variableType_;
std::unique_ptr<ExpressionNode> expression_;
std::string ns;
+ bool isConst_;
public:
+ // isConst: if true, declares a constant; otherwise a mutable variable
DeclareVariableStatementNode(std::string name, const std::string & ns, Symbols::Variables::Type type,
- std::unique_ptr<ExpressionNode> expr, const std::string & file_name, int file_line,
- size_t line_column) :
+ std::unique_ptr<ExpressionNode> expr, const std::string & file_name,
+ int file_line, size_t line_column, bool isConst = false) :
StatementNode(file_name, file_line, line_column),
variableName_(std::move(name)),
variableType_(type),
expression_(std::move(expr)),
- ns(ns) {}
+ ns(ns),
+ isConst_(isConst) {}
void interpret(Interpreter & interpreter) const override {
try {
@@ -47,7 +50,13 @@
"': expected '" + expected + "' but got '" + actual + "'",
filename_, line_, column_);
}
- const auto variable = Symbols::SymbolFactory::createVariable(variableName_, value, ns, variableType_);
+ // Create a constant or variable symbol
+ std::shared_ptr<Symbols::Symbol> variable;
+ if (isConst_) {
+ variable = Symbols::SymbolFactory::createConstant(variableName_, value, ns);
+ } else {
+ variable = Symbols::SymbolFactory::createVariable(variableName_, value, ns, variableType_);
+ }
Symbols::SymbolContainer::instance()->add(variable);
} catch (const Exception &) {
throw;
--
Gitblit v1.9.3