050 runtime eval autodischarge

✓ Passing This code compiles and runs correctly.

Code

// Test: std.runtime:eval invokes auto-discharge cleanup events

~import "$std/runtime"
~import "$std/io"

const std = @import("std");

~pub event open_handle {}
| opened { handle: []const u8[opened!] }

~proc open_handle {
    std.debug.print("OPEN\n", .{});
    return .{ .opened = .{ .handle = "h1" } };
}

~pub event close_handle { handle: []const u8[!opened] }
| closed {}

~proc close_handle {
    std.debug.print("CLOSE\n", .{});
    return .{ .closed = .{} };
}

~std.runtime:register(scope: "api") {
    open_handle(1)
    close_handle(1)
}

const TEST_SOURCE = "~open_handle()";

~std.runtime:parse.source(source: TEST_SOURCE, file_name: "runtime_eval_autodischarge.kz", allocator: std.heap.page_allocator)
| parsed p |> std.runtime:eval(ast: p.ast, scope: "api")
    | result _ |> std.io:print.ln("OK")
    | exhausted _ |> std.io:print.ln("EXHAUSTED")
    | validation_error _ |> std.io:print.ln("VALIDATION ERROR")
    | event_denied _ |> std.io:print.ln("EVENT DENIED")
    | dispatch_error _ |> std.io:print.ln("DISPATCH ERROR")
    | scope_not_found _ |> std.io:print.ln("SCOPE NOT FOUND")
| parse_error _ |> std.io:print.ln("PARSE ERROR")
input.kz

Expected Output

[EVAL] Starting execution of pre-parsed flow
[EVAL] Validation passed
OPEN
[EVAL] Execution complete, branch: opened
CLOSE
[AUTO-DISCHARGE] Invoked 'close_handle' for handle 'h1' [main:opened]
OK

Test Configuration

MUST_RUN