✓
Passing This code compiles and runs correctly.
Code
const std = @import("std");
const ast = @import("ast");
const Program = ast.Program;
const Item = ast.Item;
~[keyword|comptime|transform]pub event sample-transform {
item: *const Item,
program: *const Program,
allocator: std.mem.Allocator
}
| transformed SiteResult
~[norun]pub event sample-impl {}
~proc sample-transform|zig {
// Deriving flow from item
const flow = if (item.* == .flow)
&item.flow
else
return .{ .transformed = .{} };
const segments = allocator.alloc([]const u8, 1) catch unreachable;
segments[0] = "sample-impl";
var new_inv = flow.inv().*;
new_inv.path = ast.DottedPath{
.segments = segments,
.module_qualifier = "input"
};
new_inv.annotations = &[_][]const u8{ "@pass_ran(\"transform\")" };
const transformed_flow = ast.Flow{
.body = ast.rootSite(new_inv, flow.body.continuations, flow.location),
.inline_body = " // lowered\n",
.location = flow.location,
.module = flow.module,
};
return .{ .transformed = .{ .replacement = .{ .flow = transformed_flow } } };
}
~sample-transform()
Test Configuration
MUST_RUN