diff --git a/src/builtin/fiber.zig b/src/builtin/fiber.zig index b75b2916..5a049370 100644 --- a/src/builtin/fiber.zig +++ b/src/builtin/fiber.zig @@ -25,7 +25,7 @@ pub fn cancel(ctx: *NativeCtx) c_int { pub fn isMain(ctx: *NativeCtx) c_int { const self = ObjFiber.cast(ctx.vm.peek(0).obj()).?; - ctx.vm.push(Value.fromBoolean(ctx.vm.main_fiber == self.fiber)); + ctx.vm.push(Value.fromBoolean(self.fiber.parent_fiber == null)); return 1; } diff --git a/src/lib/buzz_api.zig b/src/lib/buzz_api.zig index 66de5e1c..548a6b4f 100644 --- a/src/lib/buzz_api.zig +++ b/src/lib/buzz_api.zig @@ -392,7 +392,6 @@ pub const ObjPattern = opaque { pub const ObjFiber = opaque { pub extern fn bz_getFiberProperty(vm: *VM, property_idx: usize) Value; - pub extern fn bz_isMainFiber(self: *ObjFiber, vm: *VM) Value; }; pub const ObjForeignContainer = opaque { diff --git a/src/lib/std.buzz b/src/lib/std.buzz index bb2e6f1c..2dd16f29 100644 --- a/src/lib/std.buzz +++ b/src/lib/std.buzz @@ -55,4 +55,4 @@ export extern fun currentFiber() > fib<any, any?>; || Print message and exit program extern fun buzzPanic(str message) > void; -export buzzPanic as panic; \ No newline at end of file +export buzzPanic as panic; diff --git a/src/vm.zig b/src/vm.zig index 72028aad..87ce5fa5 100644 --- a/src/vm.zig +++ b/src/vm.zig @@ -445,7 +445,6 @@ pub const VM = struct { gc: *GarbageCollector, current_fiber: *Fiber, current_ast: Ast, - main_fiber: *Fiber, globals: std.ArrayList(Value), globals_count: usize = 0, import_registry: *ImportRegistry, @@ -462,7 +461,6 @@ pub const VM = struct { .globals = std.ArrayList(Value).init(gc.allocator), .current_ast = undefined, .current_fiber = undefined, - .main_fiber = undefined, .flavor = flavor, .reporter = Reporter{ .allocator = gc.allocator, diff --git a/tests/038-fibers.buzz b/tests/038-fibers.buzz index 8fedee5b..45286dd5 100644 --- a/tests/038-fibers.buzz +++ b/tests/038-fibers.buzz @@ -18,6 +18,8 @@ test "fiber" { std.assert(sum == 45, message: "Sum is good"); std.assert(resolve &count(10) == "Counting is done!", message: "Resolve without any resume"); + + std.assert(std.currentFiber().isMain(), message: "We recognize main fiber"); } | returns str, yields int