Tested matrix manipulation

This commit is contained in:
2022-09-04 10:27:16 +01:00
parent 36154b25ac
commit 6787cfff55
4 changed files with 115 additions and 7 deletions

View File

@@ -190,7 +190,17 @@ int _get(Interpreter* interpreter, LiteralArray* arguments) {
Literal obj = arguments->literals[0];
Literal key = arguments->literals[1];
parseIdentifierToValue(interpreter, &obj);
bool freeObj = false;
if (IS_IDENTIFIER(obj)) {
parseIdentifierToValue(interpreter, &obj);
freeObj = true;
}
bool freeKey = false;
if (IS_IDENTIFIER(key)) {
parseIdentifierToValue(interpreter, &key);
freeKey = true;
}
switch(obj.type) {
case LITERAL_ARRAY: {
@@ -205,7 +215,15 @@ int _get(Interpreter* interpreter, LiteralArray* arguments) {
}
pushLiteralArray(&interpreter->stack, AS_ARRAY(obj)->literals[AS_INTEGER(key)]);
freeLiteral(obj);
if (freeObj) {
freeLiteral(obj);
}
if (freeKey) {
freeLiteral(key);
}
return 1;
}
@@ -213,7 +231,15 @@ int _get(Interpreter* interpreter, LiteralArray* arguments) {
Literal dict = getLiteralDictionary(AS_DICTIONARY(obj), key);
pushLiteralArray(&interpreter->stack, dict);
freeLiteral(dict);
freeLiteral(obj);
if (freeObj) {
freeLiteral(obj);
}
if (freeKey) {
freeLiteral(key);
}
return 1;
}
@@ -241,7 +267,12 @@ int _push(Interpreter* interpreter, LiteralArray* arguments) {
}
parseIdentifierToValue(interpreter, &obj);
parseIdentifierToValue(interpreter, &val);
bool freeVal = false;
if (IS_IDENTIFIER(val)) {
parseIdentifierToValue(interpreter, &val);
freeVal = true;
}
switch(obj.type) {
case LITERAL_ARRAY: {
@@ -267,6 +298,10 @@ int _push(Interpreter* interpreter, LiteralArray* arguments) {
freeLiteral(obj);
if (freeVal) {
freeLiteral(val);
}
return 0;
}

View File

@@ -362,7 +362,7 @@ int hashLiteral(Literal lit) {
case LITERAL_ARRAY: {
unsigned int res = 0;
for (int i = 0; i < AS_DICTIONARY(lit)->count; i++) {
for (int i = 0; i < AS_ARRAY(lit)->count; i++) {
res += hashLiteral(AS_ARRAY(lit)->literals[i]);
}
return hash(res);