// types — integer limits. Mirrors Hare's types::limits (I8_MAX, …) // platform-fixed for amd64. Numeric helpers live in lib/math, matching // Hare's split between types::limits and math::. package types; export def I8_MAX: i8 = 127; export def I16_MAX: i16 = 32767; export def I32_MAX: i32 = 2147483647; export def I64_MAX: i64 = 9223372036854775807; export def I8_MIN: i8 = -128; export def I16_MIN: i16 = -32768; export def I32_MIN: i32 = -2147483648; export def I64_MIN: i64 = -9223372036854775808; export def U8_MAX: u8 = 255; export def U16_MAX: u16 = 65535; export def U32_MAX: u32 = 4294967295; export def U64_MAX: u64 = 18446744073709551615; export def U8_MIN: u8 = 0; export def U16_MIN: u16 = 0; export def U32_MIN: u32 = 0; export def U64_MIN: u64 = 0; // int/uint are machine-word (Go-style, type.c:58); limits derived from // size(int) per #114 + user ruling; cf Go math.MaxInt; diverges from // Hare's per-arch literal (arch+x86_64.ha) because ww's int is 64-bit. export def INT_MAX: int = (1 << (size(int)*8 - 1)) - 1; export def INT_MIN: int = -1 << (size(int)*8 - 1); export def UINT_MIN: uint = 0; export def UINT_MAX: uint = ~(0: uint); // size is 8B on amd64; no cast needed (size ∈ unsigned class per #113). export def SIZE_MIN: size = U64_MIN; export def SIZE_MAX: size = U64_MAX; // uintptr not in the unsigned class, so the cast is required (Hare's form). export def UINTPTR_MIN: uintptr = U64_MIN: uintptr; export def UINTPTR_MAX: uintptr = U64_MAX: uintptr; export def RUNE_MIN: rune = '\0'; // Hare spells this `'\U0010ffff'` (ref/hare/types/limits.ha:57); ww's lexer // has no \U/\u escape (cmd/wcc/lex.c escape(): \xHH only, max 0xFF) so the // codepoint is written as an int-cast — same value, forced spelling. #50. export def RUNE_MAX: rune = 0x10ffff: rune;