Releases
v3.8.2
Compare
Sorry, something went wrong.
No results found
3.8.2 (2026-06-30)
Bug Fixes
cli: cap update download at 256 MiB to prevent disk exhaustion (#1980 ) (2b14809 )
cli: redact home directory from C compiler path in ez report (#1983 ) (26eeeb0 )
cli: reject path traversal sequences in ez pz project name (#1979 ) (badd948 )
cli: remove unsupported sized integer/float types from ez man docs (#1976 ) (f660865 )
cli: restrict update download URLs to trusted GitHub release origin (#1978 ) (599f8c2 )
codegen: cast dividend to int64_t in div/mod overflow check to silence Wtautological-constant-out-of-range-compare (2b753be )
codegen: cast of negative float to uint/u64 now panics with P0091 (#1964 ) (37f4d51 )
codegen: emit T * const for const pointer variables, not const T * (#1937 ) (381b662 )
codegen: fixed-size array [T, N] with partial init now has length N (#1965 ) (9810873 )
codegen: map compound assignment now reads existing value before applying op (#1971 ) (c19d6e8 )
codegen: promote integer literals to double in [float]/[f32]/[f64] array literals (#1963 ) (c4c39b8 )
codegen: string(Error) now returns the error message instead of leaking C error (#1977 ) (72d3f2d )
consolidate reserved name lists into shared reserved.h (#1954 ) (a42a410 )
leaks: print clear PASS/FAIL summary at end of make leaks output (#1975 ) (141b947 )
lexer: catch physical newline in string literal as E1023 (#1959 ) (683203b )
parser: accept complex types in multi-return destructuring positions 2+ (#1962 ) (a2b0454 )
parser: emit E2086 when in/not_in/!in has no left-hand value (#1960 ) (de90608 )
parser: support blank identifier _ as for loop variable in range iteration (#1972 ) (3dc99b3 )
runtime: drain overlong input() lines to prevent stdin contamination (#1981 ) (0576927 )
runtime: use pre-addition overflow check in ez_string_concat to eliminate signed UB (#1984 ) (c1af77d )
scripts: handle escaped quotes in error message extraction (790e2cf )
typechecker: allow range(n, n) as empty sequence per spec start <= end (#1969 ) (f4683f9 )
typechecker: reject == / != on tagged enums with E3124 (#1967 ) (ce02e3e )
typechecker: reject for_each with both positions as _ with E3123 (#1966 ) (7bda22b )
typechecker: reject tagged enum passed to print functions with E5038 (#1968 ) (d83c720 )
typechecker: replace misleading 'only structs' phrasing in E3013 messages (b0d1695 )
Performance Improvements
codegen: collapse buf_append_indent loop into a single buf_appendn call (#1953 ) (b27f4ed )
codegen: eliminate double vsnprintf in emitf for short emissions (#1952 ) (aaa214d )
codegen: replace linear scan in is_c_keyword with bsearch (#1956 ) (d2ac0a2 )
error: add cached error/warning counters to DiagnosticList (#1943 ) (b7ac109 )
error: build line-offset index in diag_set_source (#1942 ) (e0c5a5a )
error: replace single-file source cache with 4-slot LRU cache (#1947 ) (48ee72e )
imports: limit rewrite_labels outer pass to original main-program nodes (#1946 ) (22b8643 )
imports: replace O(n) import-seen scan with FNV-1a open-addressing hash set (#1951 ) (8f5f9e2 )
imports: replace while+rescan with a pending import queue (#1945 ) (b073b80 )
scan: replace bubble sort in scan_ez_files with qsort (#1944 ) (1946c88 )
typechecker: replace O(n) scans in display name and enum helpers with bsearch (#1948 ) (ea19b7c )
typechecker: replace O(n) scans in fallible stdlib lookups with bsearch (#1949 ) (521246d )
typechecker: sort stdlib lookup tables in typechecker_create (#1955 ) (b54a2f6 )
typechecker: use stack buffer in levenshtein to avoid malloc on every call (#1950 ) (75f9ed4 )
You can’t perform that action at this time.