// Comptime `#run` formatting of an `Any` that holds a `Type`. // // `print("{}", at)` where `at: Any` holds a `Type` value routes through // `format` → `any_to_string`, whose `type := type_of(val)` lowers (for an // `.any` operand) to `struct_get(val, 0)` — reading the Any-Type's tag. // At runtime a `Type` value is the aggregate `{ tag=.any, value=tid }`, // so the read works and the type's name prints. The comptime interpreter // stores a first-class `Type` as a bare `.type_tag`, so the struct_get // must mirror that same `{ .any, tid }` layout — otherwise it bails and // the `#run` truncates. Reflection over the same `Any` (`type_name`, // `type_is_unsigned`) already works; the value-print must match. // // Regression (issue 0096): a comptime `#run` print of an `Any`-held // `Type` silently stopped (omitted `value=` + every later line) yet still // built with exit 0. #import "modules/std.sx"; ct_probe :: () { print("before\n"); x : u64 = 1; t : Type = type_of(x); at : Any = t; print("name={}\n", type_name(at)); print("unsigned={}\n", type_is_unsigned(at)); print("value={}\n", at); print("after\n"); } #run ct_probe(); main :: () {}