1
0
Fork 0
mirror of https://github.com/imjasonh/nescript synced 2026-07-08 08:55:38 +00:00
Commit graph

10 commits

Author SHA1 Message Date
Claude
a757336681
Remove the legacy AST codegen — IR path is canonical now
The `--use-ast` path through `src/codegen/mod.rs` was a strictly
inferior subset of the IR codegen. Building every example with
`--use-ast` through the jsnes harness:

- `arrays_and_functions` — fully black (array init + function
  return values + OAM-in-loop all broken)
- `structs_enums_for` — fully black (struct literal is a no-op,
  all fields stay at 0)
- `inline_asm_demo` — fully black
- `bitwise_ops`, `loop_break_continue` — below sprite floors
  (static `next_oam_slot` bug B)
- `match_demo` — panics at compile time with
  `branch offset 153 out of range` (AST's if/else-chain
  desugaring of `match` emits short branches that can't reach
  the far arms in a multi-arm match)

Six of fourteen examples are non-functional under `--use-ast`.
The other eight happen to fall inside the subset AST handles
(no arrays, no structs, no function return values, no
multi-sprite loops, no long match chains).

`docs/future-work.md` already listed "Once working, delete the
AST-based codegen entirely" as the intended direction. It's
working, so this commit does the deletion.

What's removed:
- The `CodeGen` struct, its impl block, and every helper in
  `src/codegen/mod.rs` (the AST codegen body) — ~1150 lines.
  The file is now a module header that re-exports `IrCodeGen`.
- `src/codegen/tests.rs` — 15 AST-specific instruction-pattern
  tests. Every feature they covered has an equivalent test in
  `src/codegen/ir_codegen.rs::{tests,more_tests}` already.
- The `--use-ast` CLI flag and its branch in `src/main.rs`.
- `compile_with_ir_codegen` in `tests/integration_test.rs` —
  `compile()` now does what it did, so they merged. All 40
  integration tests go through the IR path.
- Outdated sections in `docs/future-work.md` that described the
  IR codegen as "not yet implemented" and listed AST codegen
  gaps as priority work.

What's kept:
- `src/codegen/ir_codegen.rs` — the real codegen.
- `src/codegen/peephole.rs` — post-codegen cleanup pass, now
  run unconditionally from `main.rs`.

Test plan:
- `cargo test --release` — 313 unit + 37 integration tests pass
  (was 328 + 37; the 15 dropped are the deleted AST-specific
  tests).
- `cargo fmt --check` clean.
- `cargo clippy --release --all-targets -- -D warnings` clean.
- `node tests/emulator/run_examples.mjs` — 14/14 ROMs render
  above their per-example nonBlack floors.
- The one tightening: `sprite_resolution_uses_tile_index` was
  asserting on the old static-slot encoding
  (`A9 01 8D 01 02`). Updated to the cursor-based form
  (`A9 01 99 01 02`, i.e. STA AbsoluteY).

Net diff: 1581 deletions, 62 insertions.

https://claude.ai/code/session_014Z5y3Q9krLcAxYpZQJhZ5V
2026-04-12 20:37:59 +00:00
Claude
49317167da
docs: future-work.md — document all new additions
Covers struct literals, match, for loops, semicolons, inline asm
{var} substitution, raw asm, poke/peek intrinsics, and the new
--memory-map / --call-graph flags.

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 17:47:09 +00:00
Claude
f17f1e7267
docs: future-work.md — document all recent additions
Lists structs, for loops, audio parsing, const folding, on_scanline
codegen, all new peephole passes, and the fixed function call ABI /
local variable allocation. Re-prioritizes remaining work.

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 17:07:54 +00:00
Claude
de49c1a8ba
docs: future-work.md adds enums, peephole, --dump-ir
https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 11:43:01 +00:00
Claude
c49c36b516
Update future-work.md with recently completed items
Documents the analyzer improvements (call arity, return type, W0101,
W0102, W0104, E0301, E0505), the \`on scanline\` parser/analyzer
support, and the inline assembly subsystem. Reorders the remaining
priority list.

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 11:17:19 +00:00
Claude
3007266edf
Make IR codegen the default, fall back to AST via --use-ast
The IR-based codegen now matches all features of the AST codegen
(state dispatch, multi-OAM, P1/P2 input, scroll, debug.log/assert),
so flip the default. The legacy AST codegen is still available via
--use-ast for comparison and fallback during validation.

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 10:46:01 +00:00
Claude
7e94cf37e3
Update future-work.md to reflect IR codegen completion 2026-04-12 10:24:12 +00:00
Claude
5512567349
Asset pipeline: resolve @binary and @chr file paths
resolve_sprites() now handles all three AssetSource variants:
- Inline(bytes): use directly (existing behavior)
- Binary(path): read raw bytes from file relative to source_dir
- Chr(path): convert PNG to CHR via png_to_chr()

Missing files are silently skipped rather than erroring, so
declarations can reference assets that haven't been added yet.
This keeps existing tests that use placeholder file paths working.

Updated future-work.md: moved include directive, P2 controller,
sprite resolution, shift-assign, debug statements, warnings, and
asset wiring to the "completed" section. Remaining work is IR codegen,
audio, on_scanline, and language features (structs/enums).

Tests: 257 total (3 new resolve_sprites tests)

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 10:13:26 +00:00
Claude
5d2d242520
Update future-work.md: mark completed items
13 items moved from backlog to "recently completed":
state dispatch, function calls, break/continue, return, transition,
array indexing, scroll, multiply/divide/modulo, shifts, multi-OAM,
const assignment error, break-outside-loop error, math in linker.

Remaining priority: IR codegen, sprite resolution, include, asset
pipeline wiring, debug mode, error polish, audio, language features.

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 02:07:50 +00:00
Claude
3b1a03981b
Add comprehensive future work document
docs/future-work.md (347 lines) catalogs every known gap, incomplete
feature, and planned improvement with file:line references:

- IR-based codegen (IR exists but output uses AST codegen)
- 11 codegen gaps (calls, returns, transitions, arrays, mul/div, scroll)
- Sprite name resolution and multi-OAM support
- State machine dispatch (only start state generates code)
- Include directive, debug mode, scroll hardware
- Asset pipeline wiring (PNG conversion exists but unused)
- 10 unused error codes, missing validations
- Scanline IRQ, audio, inline assembly
- Language features: structs, enums, fixed-point, metasprites
- Missing shift-assign operators, P2 controller, register allocator
- WASM build target, compiler benchmarks
- Prioritized recommended order of work for contributors

https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
2026-04-12 01:10:11 +00:00