fn extern "c" printf(fmt: ptr[u8], ..) i32 type M() type Ref extern(a: &M, b: Ref2) type Ref2 extern(c: &M) type Mixed extern(a: Ref) type Point extern(x: int, y: int) fn main() unit = { let m = M() let m2 = m // let m3 = m // Error: use after move // let r3 = &m2 // Runtime error: Drop with refs let m3 = m2 let mixed = Mixed(Ref(&m3, Ref2(&m3))) let mixed2 = mixed.a let mixed2c = mixed.a.b.c print-point(Point(1, 2)) print-point(Point(x: 420, y: 69)) print-point(Point(5, y: 10)) } fn print-point(p: Point) unit = { unsafe printf("Point(%d, %d)\n".ptr, p.x, p.y) }