v1.2.1
Module-qualified call syntax
Calls like utils.fn(args) now work correctly. Previously the module prefix triggered an E001 "undefined variable" error. The semantic pass now detects namespace-qualified calls when the receiver is not in the symbol table, and codegen discards the prefix and emits a plain chasm_fn(ctx, args) call.
v1.2.0
LSP enhancements
- Import-aware completions, typing
utils.shows all public functions from the imported file - Go-to-definition across imports, jump to the definition in the source file, even across module boundaries
- Snippets,
tick,init,draw,struct,attr,fn,defp,for,forin,case,if,ifelse,while,enum,import,game - Formatter,
chasm fmt <file>, also available viatextDocument/formattingand format-on-save in the VS Code extension - CodeLens,
▶ Runappears aboveon_tick,on_init,on_draw, andmainfunctions - Extension 0.3.0, LSP server 1.2.0
v1.1.0
Raylib runtime fixes and clean compiler errors
- Fixed extra
)bug in codegen's array seeding loop - Added missing
chasm_range,array_fixedhelpers toengine/raylib/chasm_rt.h, they existed in the standalone runtime but were absent from the engine header #ifndef CHASM_ARRAY_FIXED_HELPERS_DEFINEDguard added to prevent redefinition when both headers are includedfilterCCErrorsin the CLI: clang output is now reformatted as Chasm-style diagnostics pointing to the.chasmsource line rather than the generated.cfile
v1.0.0
Arena-backed arrays and complete lifetime enforcement
array_fixed(N), fixed-capacity arrays allocated from the matching arena (frame/script/persistent). No heap allocation. The backing memory is a bump-allocated block from the arena; capacity is fixed at declaration time.array_fixed(N, default), allNslots pre-filled with the default value at initialization.lenstarts atNso every slot is immediately readable without a push loop.- Typed struct arrays,
array_new(Type, cap)andarray_fixed(cap, StructLiteral{})create typed arrays where.getreturns the struct directly and.set/.pushaccept the struct by value. expr_lifetimepropagation added for all expression forms: calls, method calls, binops, struct literals, and pipe chains all carry the correct lifetime through to assignment checks.builtin_retcompleted with full coverage:cos,sin,sqrt,atan2,clamp,to_int/to_float/to_bool,rgb/rgba,color_lerp,color_mix, all bit ops, allvec2_*functions,smooth_step,move_toward,angle_diff, and more.- The shape_shooter example game was rewritten to use
array_fixedfor bullets and enemies.
v0.9.0
Rich compiler diagnostics
- Error codes E001–E008 following Rust's diagnostic style
- All errors collected in a single pass, the compiler no longer stops at the first error
- Each error rendered with a source snippet, caret underline pointing to the exact token, and an optional
= help:hint - E008: lifetime violation, the compiler now detects when a shorter-lived value flows into a longer-lived attribute and reports the exact lifetimes involved with a promotion hint
- Levenshtein distance used for "did you mean?" suggestions on E005 (undefined function) and E007 (unknown field)
chasm_eprintandchasm_exitadded to the runtime;eprintandexitavailable in Chasm code