// Backtick raw-identifier escape at the `::` declaration sites: a leading
// backtick makes a CONSTANT name and a FUNCTION name raw, so a reserved type
// spelling (`i2`, `u8`) can be declared and used. Complements examples/0151
// (var / param / field / global). The backtick fn is callable both via the
// backtick (`` `u8(5) ``) and bare (`u8(5)`) — the bare reserved-name callee
// resolves to the raw fn because its declaration is raw (issue 0089). A *bare*
// `i2 :: …` / `u8 :: …` declaration is still the reserved-name error (see
// examples/1140).
// Regression (issue 0089).
#import "modules/std.sx";

// Constant whose name is a reserved type spelling.
`i2 :: 2.5;

// Function whose name is a reserved type spelling.
`u8 :: (n: i64) -> i64 { return n + 7; }

main :: () -> i32 {
    print("const    = {}\n", `i2);
    print("fn tick  = {}\n", `u8(5));
    print("fn bare  = {}\n", u8(5));
    return 0;
}
