From 7d4ea4881f4a0c433feacb3a91b57027b7ed4818 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 22 Nov 2024 18:21:47 +1100 Subject: [PATCH] WIP: Fixed print bug, tests incomplete, read more I was sidetracked by a strange display bug - turns out it was caused by pointers - this commit fixes it. The tests for if-then-else still aren't finished, but I'm knocking off as it's past my time limit. I've marked 'TODO' and 'URGENT' using comments, so finding the issues should be easy. --- source/toy_vm.c | 4 +-- tests/cases/test_string.c | 2 +- .../test_keyword_if_then_else.toy | 34 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/source/toy_vm.c b/source/toy_vm.c index 79de834..4ab61a1 100644 --- a/source/toy_vm.c +++ b/source/toy_vm.c @@ -68,7 +68,7 @@ static void processRead(Toy_VM* vm) { int len = (int)READ_BYTE(vm); //grab the jump as an integer - unsigned int jump = vm->module[ vm->jumpsAddr + READ_INT(vm) ]; + unsigned int jump = *((int*)(vm->module + vm->jumpsAddr + READ_INT(vm))); //jumps are relative to the data address char* cstring = (char*)(vm->module + vm->dataAddr + jump); @@ -282,7 +282,7 @@ static void processArithmetic(Toy_VM* vm, Toy_OpcodeType opcode) { } static void processComparison(Toy_VM* vm, Toy_OpcodeType opcode) { - Toy_Value right = Toy_popStack(&vm->stack); + Toy_Value right = Toy_popStack(&vm->stack); //URGENT: These are not freed correctly Toy_Value left = Toy_popStack(&vm->stack); //most things can be equal, so handle it separately diff --git a/tests/cases/test_string.c b/tests/cases/test_string.c index c09a458..d2c45f3 100644 --- a/tests/cases/test_string.c +++ b/tests/cases/test_string.c @@ -654,7 +654,7 @@ int test_string_equality() { Toy_Bucket* bucket = Toy_allocateBucket(1024); Toy_String* helloWorldOne = Toy_createNameStringLength(&bucket, "Hello world", strlen("Hello world"), TOY_VALUE_UNKNOWN, false); Toy_String* helloWorldTwo = Toy_createNameStringLength(&bucket, "Hello world", strlen("Hello world"), TOY_VALUE_UNKNOWN, false); - Toy_String* helloEveryone = Toy_createNameStringLength(&bucket, "Hello everyone", strlen("Hello everyone"), TOY_VALUE_UNKNOWN, false); //TODO: compare types? + Toy_String* helloEveryone = Toy_createNameStringLength(&bucket, "Hello everyone", strlen("Hello everyone"), TOY_VALUE_UNKNOWN, false); int result = 0; //for print the errors diff --git a/tests/integrations/test_keyword_if_then_else.toy b/tests/integrations/test_keyword_if_then_else.toy index 33d9144..5934f8d 100644 --- a/tests/integrations/test_keyword_if_then_else.toy +++ b/tests/integrations/test_keyword_if_then_else.toy @@ -1,26 +1,26 @@ //literals if (true) { - print "Success"; + print "Success 1"; } else { - print "Failure"; + print "Failure 1"; } //false literals if (false) { - print "Failure"; + print "Failure 2"; } else { - print "Success"; + print "Success 2"; } //conditionals if (1 < 2) { - print "Success"; + print "Success 3"; } if (1 > 2) { - print "Failure"; + print "Failure 3"; } @@ -28,39 +28,39 @@ if (1 > 2) { var a = 42; if (a) { - print "Success"; + print "Success 4"; } else { - print "Failure"; + print "Failure 4"; } if (a == 42) { - print "Success"; + print "Success 5"; } else { - print "Failure"; + print "Failure 5"; } //concatenated strings if ("foo" .. "bar" == "foobar") { - print "Success"; + print "Success 6"; } else { - print "Failure"; + print "Failure 6"; } if ("foobar" == "foo" .. "bar") { - print "Success"; + print "Success 7"; } else { - print "Failure"; + print "Failure 7"; } if ("fizz" .. "le" == "fi" .. "zzle") { - print "Success"; + print "Success 8"; } else { - print "Failure"; -} \ No newline at end of file + print "Failure 8"; +}