mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
@@ -63,7 +63,7 @@ static void processRead(Toy_VM* vm) {
|
||||
|
||||
case TOY_VALUE_STRING: {
|
||||
enum Toy_StringType stringType = READ_BYTE(vm);
|
||||
int len = (int)READ_BYTE(vm);
|
||||
int len = (int)READ_BYTE(vm); //only needed for name strings
|
||||
|
||||
//grab the jump as an integer
|
||||
unsigned int jump = *((int*)(vm->module + vm->jumpsAddr + READ_INT(vm)));
|
||||
@@ -524,7 +524,7 @@ static void processLogical(Toy_VM* vm, Toy_OpcodeType opcode) {
|
||||
}
|
||||
|
||||
static void processJump(Toy_VM* vm) {
|
||||
Toy_OpJumpType type = READ_BYTE(vm);
|
||||
Toy_OpParamJumpType type = READ_BYTE(vm);
|
||||
Toy_OpParamJumpConditional cond = READ_BYTE(vm);
|
||||
fixAlignment(vm);
|
||||
|
||||
@@ -571,6 +571,19 @@ static void processJump(Toy_VM* vm) {
|
||||
}
|
||||
}
|
||||
|
||||
static void processEscape(Toy_VM* vm) {
|
||||
fixAlignment(vm);
|
||||
|
||||
int addr = READ_INT(vm); //where to go
|
||||
int diff = READ_INT(vm); //what to do
|
||||
|
||||
vm->programCounter += addr;
|
||||
|
||||
while (diff > 0 && vm->scope != NULL) {
|
||||
vm->scope = Toy_popScope(vm->scope);
|
||||
}
|
||||
}
|
||||
|
||||
static void processAssert(Toy_VM* vm) {
|
||||
unsigned int count = READ_BYTE(vm);
|
||||
|
||||
@@ -881,6 +894,10 @@ static void process(Toy_VM* vm) {
|
||||
processJump(vm);
|
||||
break;
|
||||
|
||||
case TOY_OPCODE_ESCAPE:
|
||||
processEscape(vm);
|
||||
break;
|
||||
|
||||
case TOY_OPCODE_SCOPE_PUSH:
|
||||
vm->scope = Toy_pushScope(&vm->scopeBucket, vm->scope);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user