~tieong/ziglings

49ce260748a54d6737be1a2407c2f5377f175339 — Dave Gauer 2 years ago 4c7eebb
Added ex91 - closing in on async!
3 files changed, 55 insertions(+), 0 deletions(-)

M build.zig
A exercises/091_async8.zig
A patches/patches/091_async8.patch
M build.zig => build.zig +4 -0
@@ 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.

A exercises/091_async8.zig => exercises/091_async8.zig +35 -0
@@ 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", .{});
}

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