diff --git a/scripts/cond.toy b/scripts/cond.toy index 712350e..1c83e6e 100644 --- a/scripts/cond.toy +++ b/scripts/cond.toy @@ -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"; +} + diff --git a/scripts/gdb_init b/scripts/gdb_init new file mode 100644 index 0000000..c6d1223 --- /dev/null +++ b/scripts/gdb_init @@ -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 + + diff --git a/source/toy_routine.c b/source/toy_routine.c index 52ad707..9036ee9 100644 --- a/source/toy_routine.c +++ b/source/toy_routine.c @@ -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;