From 54c048b0a0ea5ee2136c4d4193660d4934eab925 Mon Sep 17 00:00:00 2001 From: Dave Gauer Date: Wed, 12 May 2021 21:04:58 -0400 Subject: [PATCH] add ex085 async 2 --- build.zig | 4 ++++ exercises/085_async2.zig | 29 +++++++++++++++++++++++++++++ patches/patches/085_async2.patch | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 exercises/085_async2.zig create mode 100644 patches/patches/085_async2.patch diff --git a/build.zig b/build.zig index fc831b8..707c212 100644 --- a/build.zig +++ b/build.zig @@ -418,6 +418,10 @@ const exercises = [_]Exercise{ .output = "foo() A", .hint = "Read the facts. Use the facts.", }, + .{ + .main_file = "085_async2.zig", + .output = "Hello async!", + }, }; /// Check the zig version to make sure it can compile the examples properly. diff --git a/exercises/085_async2.zig b/exercises/085_async2.zig new file mode 100644 index 0000000..0ca322e --- /dev/null +++ b/exercises/085_async2.zig @@ -0,0 +1,29 @@ +// +// So, 'suspend' returns control to the place from which it was +// called (the "call site"). How do we control back to the +// suspended function? +// +// For that, we have a new keyword called 'resume' which takes an +// async function invocation's frame and returns control to it. +// +// fn fooThatSuspends() void { +// suspend; +// } +// +// var foo_frame = async fooThatSuspends(); +// resume foo_frame; +// +// See if you can make this program print "Hello async!". +// +const print = @import("std").debug.print; + +pub fn main() void { + var foo_frame = async foo(); +} + +fn foo() void { + print("Hello ", .{}); + suspend; + print("async!\n", .{}); +} + diff --git a/patches/patches/085_async2.patch b/patches/patches/085_async2.patch new file mode 100644 index 0000000..cc71293 --- /dev/null +++ b/patches/patches/085_async2.patch @@ -0,0 +1,2 @@ +21a22 +> resume foo_frame;