static void getSlots(WrenVM* vm) { bool result = true; if (wrenGetSlotBool(vm, 1) != true) result = false; // TODO: Test wrenGetSlotForeign(). int length; const char* bytes = wrenGetSlotBytes(vm, 2, &length); if (length != 5) result = false; if (memcmp(bytes, "by\0te", length) != 0) result = false; if (wrenGetSlotDouble(vm, 3) != 12.34) result = false; if (strcmp(wrenGetSlotString(vm, 4), "str") != 0) result = false; WrenHandle* handle = wrenGetSlotHandle(vm, 5); if (result) { // Otherwise, return the value so we can tell if we captured it correctly. wrenSetSlotHandle(vm, 0, handle); wrenReleaseHandle(vm, handle); } else { // If anything failed, return false. wrenSetSlotBool(vm, 0, false); } }
void resetStackAfterForeignConstructRunTests(WrenVM* vm) { wrenEnsureSlots(vm, 1); wrenGetVariable(vm, "main", "Test", 0); WrenHandle* testClass = wrenGetSlotHandle(vm, 0); WrenHandle* callConstruct = wrenMakeCallHandle(vm, "callConstruct()"); WrenHandle* afterConstruct = wrenMakeCallHandle(vm, "afterConstruct(_,_)"); wrenEnsureSlots(vm, 1); wrenSetSlotHandle(vm, 0, testClass); wrenCall(vm, callConstruct); wrenEnsureSlots(vm, 3); wrenSetSlotHandle(vm, 0, testClass); wrenSetSlotDouble(vm, 1, 1.0); wrenSetSlotDouble(vm, 2, 2.0); wrenCall(vm, afterConstruct); wrenReleaseHandle(vm, testClass); wrenReleaseHandle(vm, callConstruct); wrenReleaseHandle(vm, afterConstruct); }
static void setSlots(WrenVM* vm) { WrenHandle* handle = wrenGetSlotHandle(vm, 1); wrenSetSlotBool(vm, 1, true); wrenSetSlotBytes(vm, 2, "by\0te", 5); wrenSetSlotDouble(vm, 3, 1.5); wrenSetSlotString(vm, 4, "str"); // TODO: wrenSetSlotNull(). // Read the slots back to make sure they were set correctly. bool result = true; if (wrenGetSlotBool(vm, 1) != true) result = false; int length; const char* bytes = wrenGetSlotBytes(vm, 2, &length); if (length != 5) result = false; if (memcmp(bytes, "by\0te", length) != 0) result = false; if (wrenGetSlotDouble(vm, 3) != 1.5) result = false; if (strcmp(wrenGetSlotString(vm, 4), "str") != 0) result = false; if (result) { // Move the value into the return position. wrenSetSlotHandle(vm, 0, handle); } else { // If anything failed, return false. wrenSetSlotBool(vm, 0, false); } wrenReleaseHandle(vm, handle); }