Skip to content

Commit

Permalink
If-then-else is working, untested
Browse files Browse the repository at this point in the history
  • Loading branch information
Ratstail91 committed Nov 20, 2024
1 parent 34577ec commit b2b2ca7
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 5 deletions.
38 changes: 36 additions & 2 deletions scripts/cond.toy
Original file line number Diff line number Diff line change
@@ -1,10 +1,44 @@


//literals
if (true) {
print "Success";
}

else {
print "Failed";
}

//false literals
if (false) {
print "Failed";
}
else {
print "Success";
}

//conditionals
if (1 < 2) {
print "Success";
}
if (1 > 2) {
print "Failure";
}


//variables
var a = 42;

if (a) {
print "Success";
}
else {
print "Failure";
}


if (a == 42) {
print "Success";
}
else {
print "Failure";
}

19 changes: 19 additions & 0 deletions scripts/gdb_init
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
set breakpoint pending on

break toy_vm.c:547

command 1
print opcode
continue
end

break toy_vm.c:373

command 2
printf "JUMP %d %d %d\n", type, cond, param
continue
end

break toy_vm.c:375


6 changes: 3 additions & 3 deletions source/toy_routine.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,18 +332,18 @@ static unsigned int writeInstructionIfThenElse(Toy_Routine** rt, Toy_AstIfThenEl
unsigned int elseEndAddr = SKIP_INT(rt, code); //parameter to be written later

//specify the starting position for the else branch
OVERWRITE_INT(rt, code, thenEndAddr, CURRENT_ADDRESS(rt, code) - thenEndAddr);
OVERWRITE_INT(rt, code, thenEndAddr, CURRENT_ADDRESS(rt, code) - (thenEndAddr + 4));

//emit the else branch
writeRoutineCode(rt, ast.elseBranch);

//specify the ending position for the else branch
OVERWRITE_INT(rt, code, elseEndAddr, CURRENT_ADDRESS(rt, code) - elseEndAddr);
OVERWRITE_INT(rt, code, elseEndAddr, CURRENT_ADDRESS(rt, code) - (elseEndAddr + 4));
}

else {
//without an else branch, set the jump destination and move on
OVERWRITE_INT(rt, code, thenEndAddr, CURRENT_ADDRESS(rt, code) - thenEndAddr);
OVERWRITE_INT(rt, code, thenEndAddr, CURRENT_ADDRESS(rt, code) - (thenEndAddr + 4));
}

return 0;
Expand Down

0 comments on commit b2b2ca7

Please sign in to comment.