Make a list variable
This commit is contained in:
@@ -1 +1,3 @@
|
||||
printlist ["This is an element in the list" "And this is another" "Oh look another list element" "How fun!"];
|
||||
let str dingus ["Element 1" "Element 2" "Element 3"];
|
||||
println dingus[1];
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -32,7 +32,7 @@ enum class valtype {
|
||||
};
|
||||
|
||||
enum class keywords {
|
||||
IF, ELSE, WHILE, INT, DEC, STR, BOOL, FUN, RETURN,
|
||||
IF, ELSE, WHILE, INT, DEC, STR, BOOL, LIST, FUN, RETURN,
|
||||
OPARE, CPARE, OBRAC, CBRAC, OSQUA, CSQUA, COMMA,
|
||||
SET, ADDTO, SUBTRACTFROM, MULTIPLYTO, DIVIDEFROM,
|
||||
ADD, SUBTRACT, MULTIPLY, DIVIDE,
|
||||
|
Reference in New Issue
Block a user