Add Fiber.abort() method.

This commit is contained in:
Bob Nystrom
2015-01-01 10:40:14 -08:00
parent 93ced56a7a
commit c967439ead
4 changed files with 19 additions and 0 deletions

View File

@ -224,6 +224,15 @@ DEF_NATIVE(fiber_new)
RETURN_OBJ(newFiber);
}
DEF_NATIVE(fiber_abort)
{
if (!validateString(vm, args, 1, "Error message")) return PRIM_ERROR;
// Move the error message to the return position.
args[0] = args[1];
return PRIM_ERROR;
}
DEF_NATIVE(fiber_call)
{
ObjFiber* runFiber = AS_FIBER(args[0]);
@ -1048,6 +1057,7 @@ void wrenInitializeCore(WrenVM* vm)
vm->fiberClass = defineClass(vm, "Fiber");
NATIVE(vm->fiberClass->obj.classObj, " instantiate", fiber_instantiate);
NATIVE(vm->fiberClass->obj.classObj, "new ", fiber_new);
NATIVE(vm->fiberClass->obj.classObj, "abort ", fiber_abort);
NATIVE(vm->fiberClass->obj.classObj, "yield", fiber_yield);
NATIVE(vm->fiberClass->obj.classObj, "yield ", fiber_yield1);
NATIVE(vm->fiberClass, "call", fiber_call);

7
test/fiber/abort.wren Normal file
View File

@ -0,0 +1,7 @@
var fiber = new Fiber {
Fiber.abort("Error message.")
}
IO.print(fiber.try) // expect: Error message.
IO.print(fiber.isDone) // expect: true
IO.print(fiber.error) // expect: Error message.

View File

@ -0,0 +1 @@
Fiber.abort("Abort!") // expect runtime error: Abort!

View File

@ -0,0 +1 @@
Fiber.abort(123) // expect runtime error: Error message must be a string.