Browse Source

Added ex91 - closing in on async!

Dave Gauer 3 years ago
parent
commit
49ce260748
3 changed files with 55 additions and 0 deletions
  1. 4 0
      build.zig
  2. 35 0
      exercises/091_async8.zig
  3. 16 0
      patches/patches/091_async8.patch

+ 4 - 0
build.zig

@@ -443,6 +443,10 @@ const exercises = [_]Exercise{
         .main_file = "090_async7.zig",
         .output = "beef? BEEF!",
     },
+    .{
+        .main_file = "091_async8.zig",
+        .output = "ABCDEF",
+    },
 };
 
 /// Check the zig version to make sure it can compile the examples properly.

+ 35 - 0
exercises/091_async8.zig

@@ -0,0 +1,35 @@
+//
+// You have doubtless noticed that 'suspend' requires a block
+// expression like so:
+//
+//     suspend {}
+//
+// The suspend block executes when a function suspends. To get
+// sense for when this happens, please make the following
+// program print the string
+//
+//     "ABCDEF"
+//
+const print = @import("std").debug.print;
+
+pub fn main() void {
+    print("A", .{});
+
+    var frame = async suspendable();
+
+    print("X", .{});
+
+    resume frame;
+
+    print("F", .{});
+}
+
+fn suspendable() void {
+    print("X", .{});
+
+    suspend {
+        print("X", .{});
+    }
+
+    print("X", .{});
+}

+ 16 - 0
patches/patches/091_async8.patch

@@ -0,0 +1,16 @@
+20c20
+<     print("X", .{});
+---
+>     print("D", .{});
+28c28
+<     print("X", .{});
+---
+>     print("B", .{});
+31c31
+<         print("X", .{});
+---
+>         print("C", .{});
+34c34
+<     print("X", .{});
+---
+>     print("E", .{});