#import "modules/std.sx";

Overlay :: union {
    f: f32;
    i: i32;
}

Vec2 :: union {
    data: [2]f32;
    struct { x, y: f32; };
}

main :: () {
    // Basic union: type punning
    o :Overlay = ---;
    o.f = 3.14;
    print("f={}\n", o.f);
    print("i={}\n", o.i);

    // Union with anonymous struct: member promotion
    v :Vec2 = ---;
    v.x = 1.0;
    v.y = 2.0;
    print("x={}\n", v.x);
    print("y={}\n", v.y);
    print("data[0]={}\n", v.data[0]);
    print("data[1]={}\n", v.data[1]);
}
