Fixed the lines marked as 'URGENT'

This commit is contained in:
2024-11-23 10:07:05 +11:00
parent 7d4ea4881f
commit 0b559ecb74
4 changed files with 16 additions and 10 deletions

View File

@@ -27,9 +27,6 @@ repl: source
.PHONY: tests .PHONY: tests
tests: clean test-cases test-integrations tests: clean test-cases test-integrations
#.PHONY: test-all
#test-all: clean test-cases test-integrations
.PHONY: test-cases .PHONY: test-cases
test-cases: test-cases:
$(MAKE) -C $(TOY_CASESDIR) -k $(MAKE) -C $(TOY_CASESDIR) -k
@@ -62,6 +59,10 @@ test-cases-valgrind:
test-integrations-valgrind: test-integrations-valgrind:
$(MAKE) -C $(TOY_INTEGRATIONSDIR) valgrind -k $(MAKE) -C $(TOY_INTEGRATIONSDIR) valgrind -k
#Run all tests
.PHONY: tests-all
tests-all: clean tests tests-gdb tests-valgrind
#TODO: mustfail tests #TODO: mustfail tests
#util targets #util targets

View File

@@ -1,5 +1,5 @@
//TODO: mustfails
var a = 0; var a = 0;
var b = a = a + 1, 6; var b = a = a + 1, 6;

View File

@@ -182,7 +182,7 @@ Toy_String* Toy_concatStrings(Toy_Bucket** bucketHandle, Toy_String* left, Toy_S
ret->as.node.left = left; ret->as.node.left = left;
ret->as.node.right = right; ret->as.node.right = right;
incrementRefCount(left);//URGENT: improve incrementRefCount(left);
incrementRefCount(right); incrementRefCount(right);
return ret; return ret;
@@ -253,12 +253,12 @@ static int deepCompareUtil(Toy_String* left, Toy_String* right, const char** lef
} }
//BUGFIX: if we're not currently iterating through the left leaf (and leftHead is not null), skip out //BUGFIX: if we're not currently iterating through the left leaf (and leftHead is not null), skip out
if (left->type == TOY_STRING_LEAF && (*leftHead) != NULL && (**leftHead) != '\0' && ((*leftHead) < left->as.leaf.data || (*leftHead) > (left->as.leaf.data + strlen(left->as.leaf.data))) ) { //URGENT: replace strlen with the stored lengths if (left->type == TOY_STRING_LEAF && (*leftHead) != NULL && (**leftHead) != '\0' && ((*leftHead) < left->as.leaf.data || (*leftHead) > (left->as.leaf.data + left->length)) ) {
return result; return result;
} }
//BUGFIX: if we're not currently iterating through the right leaf (and rightHead is not null), skip out //BUGFIX: if we're not currently iterating through the right leaf (and rightHead is not null), skip out
if (right->type == TOY_STRING_LEAF && (*rightHead) != NULL && (**rightHead) != '\0' && ((*rightHead) < right->as.leaf.data || (*rightHead) > (right->as.leaf.data + strlen(right->as.leaf.data))) ) { if (right->type == TOY_STRING_LEAF && (*rightHead) != NULL && (**rightHead) != '\0' && ((*rightHead) < right->as.leaf.data || (*rightHead) > (right->as.leaf.data + right->length)) ) {
return result; return result;
} }
@@ -328,7 +328,7 @@ int Toy_compareStrings(Toy_String* left, Toy_String* right) {
exit(-1); exit(-1);
} }
return strcmp(left->as.name.data, right->as.name.data); //URGENT: strncmp return strncmp(left->as.name.data, right->as.name.data, left->length);
} }
//util pointers //util pointers
@@ -343,7 +343,7 @@ unsigned int Toy_hashString(Toy_String* str) {
return str->cachedHash; return str->cachedHash;
} }
else if (str->type == TOY_STRING_NODE) { else if (str->type == TOY_STRING_NODE) {
//TODO: I wonder if it would be possible to discretely swap the composite node string with a new leaf string here? Would that speed up other parts of the code by not having to walk the tree in future? //TODO: I wonder if it would be possible to discretely swap the composite node string with a new leaf string here? Would that speed up other parts of the code by not having to walk the tree in future? - needs to be benchmarked
char* buffer = Toy_getStringRawBuffer(str); char* buffer = Toy_getStringRawBuffer(str);
str->cachedHash = hashCString(buffer); str->cachedHash = hashCString(buffer);
free(buffer); free(buffer);

View File

@@ -282,7 +282,7 @@ static void processArithmetic(Toy_VM* vm, Toy_OpcodeType opcode) {
} }
static void processComparison(Toy_VM* vm, Toy_OpcodeType opcode) { static void processComparison(Toy_VM* vm, Toy_OpcodeType opcode) {
Toy_Value right = Toy_popStack(&vm->stack); //URGENT: These are not freed correctly Toy_Value right = Toy_popStack(&vm->stack);
Toy_Value left = Toy_popStack(&vm->stack); Toy_Value left = Toy_popStack(&vm->stack);
//most things can be equal, so handle it separately //most things can be equal, so handle it separately
@@ -297,6 +297,8 @@ static void processComparison(Toy_VM* vm, Toy_OpcodeType opcode) {
Toy_pushStack(&vm->stack, TOY_VALUE_FROM_BOOLEAN(!equal) ); Toy_pushStack(&vm->stack, TOY_VALUE_FROM_BOOLEAN(!equal) );
} }
Toy_freeValue(left);
Toy_freeValue(right);
return; return;
} }
@@ -330,6 +332,9 @@ static void processComparison(Toy_VM* vm, Toy_OpcodeType opcode) {
else { else {
Toy_pushStack(&vm->stack, TOY_VALUE_FROM_BOOLEAN(false)); Toy_pushStack(&vm->stack, TOY_VALUE_FROM_BOOLEAN(false));
} }
Toy_freeValue(left);
Toy_freeValue(right);
} }
static void processLogical(Toy_VM* vm, Toy_OpcodeType opcode) { static void processLogical(Toy_VM* vm, Toy_OpcodeType opcode) {