Make a list variable

This commit is contained in:
2025-05-13 14:05:29 +10:00
parent de3941337c
commit 87bf540458
3 changed files with 28 additions and 4 deletions

View File

@@ -97,7 +97,6 @@ void Interpreter::interpret(vector<Token> tokenList) {
}
// Allow users to get elements from list objects
for (int i = 0; i < currentInstruction.size(); i++) {
log.debug("Trying to find a list object");
if (currentInstruction[i].keyword == keywords::LISTOBJ || currentInstruction[i].value.type == valtype::LIST) {
log.debug("Found a list object");
if (i + 3 < currentInstruction.size()) {
@@ -262,7 +261,7 @@ void Interpreter::interpret(vector<Token> tokenList) {
}
// Find lists and create list objects
for (int i = 0; i < currentInstruction.size(); i++) {
if (currentInstruction[i].keyword == keywords::OSQUA) {
if (currentInstruction[i].keyword == keywords::OSQUA && currentInstruction[i + 1].keyword != keywords::CSQUA) {
log.debug("Making a list");
int startIndex = i;
currentInstruction.erase(currentInstruction.begin() + i);
@@ -434,6 +433,20 @@ void Interpreter::executeCode(vector<Token> tokens) {
Token typeToken = tokens[i];
Token nameToken = tokens[i + 1];
Token valueToken = tokens[i + 2];
/*
if (tokens[i + 3].keyword == keywords::OSQUA && tokens[i + 4].keyword == keywords::CSQUA) {
log.debug("Creating a list variable");
valueToken = tokens[i + 5];
if (valueToken.keyword != keywords::LISTOBJ) syntaxError.generalError("Trying to add a non-list to a list variable");
else {
string varName = get<string>(nameToken.value.value);
Value newValue;
newValue.type = valtype::LIST;
newValue.value = get<List>(valueToken.value.value);
break;
}
}
*/
i += 2;
@@ -447,8 +460,17 @@ void Interpreter::executeCode(vector<Token> tokens) {
string varName = get<string>(nameToken.value.value);
Value newValue;
if (valueToken.keyword == keywords::LISTOBJ) {
if (typeToken.value.type == get<List>(valueToken.value.value).type) {
newValue.type = valtype::LIST;
newValue.value = get<List>(valueToken.value.value);
} else {
syntaxError.fnTypeMismatch("let (listobj)", {log.getTypeString(get<List>(valueToken.value.value).type)}, valueToken.type, "Variable name is " + varName);
}
}
// Check the type declaration matches the value
if (typeToken.keyword == keywords::INT && valueToken.type == valtype::INT) {
else if (typeToken.keyword == keywords::INT && valueToken.type == valtype::INT) {
newValue.type = valtype::INT;
newValue.value = get<int>(valueToken.value.value);
}