006 transitive file import

✓ Passing This code compiles and runs correctly.

Code

// Test 155: Transitive File Import
//
// Tests that A -> B -> C import chain works:
// - input.kz imports helper.kz
// - helper.kz imports base.kz
// - input.kz uses helper, helper uses base
//
// KEY TEST: Does the compiler correctly handle transitive imports?
// Does base.kz get emitted even though input.kz doesn't directly import it?

const std = @import("std");

// Import helper (which itself imports base)
~import "$app/helper"

// Use helper's quadruple event (which uses base's double event internally)
~app.helper:quadruple(x: 5)
| done _ |> _

// Expected: 5 * 4 = 20
// (quadruple calls double twice: 5 -> 10 -> 20)
input.kz

Imported Files

// Base module - lowest level in import chain
// Defines a simple pure operation

const std = @import("std");

~pub event double { x: i32 }
| doubled { result: i32 }

~proc double {
    const result = x * 2;
    return .{ .doubled = .{ .result = result } };
}
base.kz
// Helper module - middle level in import chain
// Imports base.kz and builds on its functionality

const std = @import("std");

// TRANSITIVE IMPORT: helper imports base
~import "$app/base"

// Define quadruple by calling base's double twice
~pub event quadruple { x: i32 }
| done { result: i32 }

~quadruple =
    app.base:double(x: x)
    | doubled d1 |> app.base:double(x: d1.result)
        | doubled d2 |> done { result: d2.result }
helper.kz

Test Configuration

MUST_RUN