✓
Passing This code compiles and runs correctly.
Code
// TEST: Reject state mismatch - passing wrong state to event
//
// If an event requires [connected] state on input, passing a connection
// without that state (or in a different state) must be rejected.
//
// This is a type error: *Connection[connected] != *Connection
//
// EXPECTED: Compiler error KORU030 - phantom state mismatch
const Connection = struct { id: i32 };
// Event that requires connection in [connected] state
~pub event query { conn: *Connection[connected], sql: []const u8 }
| done
~proc query {
return .{ .done = .{} };
}
// Event that produces a connection WITHOUT any state annotation
~pub event get_raw_connection {}
| ok *Connection
~proc get_raw_connection {
return .{ .ok = undefined };
}
// Try to pass unqualified *Connection to event expecting *Connection[connected]
~get_raw_connection()
| ok c |>
query(conn: c.conn, sql: "SELECT 1")
| done |> _
pub fn main() void {}
Error Verification
Expected Error Pattern
Phantom state mismatchActual Compiler Output ✓ Pattern matched
error[KORU030]: Phantom state mismatch: argument 'conn' has no tracked phantom state, but event requires '[connected]'. The value must be in state 'input:connected'.
--> phantom_semantic_check:30:0
❌ Compiler coordination error: Phantom semantic validation failed
error: CompilerCoordinationFailed
/Users/larsde/src/koru/tests/regression/300_ADVANCED_FEATURES/330_PHANTOM_TYPES/330_060_reject_state_mismatch_on_input/backend.zig:9407:17: 0x104e6e4af in emit (backend)
return error.CompilerCoordinationFailed;
^
/Users/larsde/src/koru/tests/regression/300_ADVANCED_FEATURES/330_PHANTOM_TYPES/330_060_reject_state_mismatch_on_input/backend.zig:9491:28: 0x104e6f2b7 in main (backend)
const generated_code = try RuntimeEmitter.emit(compile_allocator, final_ast);
^Test Configuration
MUST_FAIL