#import "modules/std.sx";
SPECIAL_VALUE :u8: 42;

resolve :: (x: u8) -> s32 {
    return 12 + x;
}

Foo :: struct {
    a : u2; // this will have 0 as default
    b : u8 = SPECIAL_VALUE; 
    c : u8 = ---; // default for c is undefined
    d : u8 = #run xx resolve(5); // converts s32 to u8
}

main :: () {
    a : Foo; // default value of 0
    print("a 0 : {}\n", a);
    a.a = 1; 
    // a.c is still undefined at this point
    a.c = 8;
    print("a 1 : {}\n", a);

    large: f64 = 5989.5;
    b : Foo = ---; // undefined
    b.a = 1;
    b.c = xx large; // converts f64 to u8
    // expect stdout : "b: Foo{a:1, b: 42, c: 7, d: 12}"
    print("b: {}", b);
    print("\n");

    f := Pack.{1,0,3,5,9,100,3.5};
    print("{}\n", f);
}

Pack :: struct {
    a: u1;
    b: u2;
    c: u8;    
    d: u32;
    f: u64;
    v: s32;
    x: f32;
}
