mirror of
https://github.com/imjasonh/nescript
synced 2026-07-08 08:55:38 +00:00
Complete implementation of the NEScript compiler pipeline for M1: - Lexer: full tokenization with hex/binary/decimal literals, all keywords, operators - Parser: recursive descent with Pratt expression parsing (M1 subset) - Analyzer: symbol resolution, type checking, memory allocation - 6502 Assembler: full opcode encoding table (~150 valid combinations) - Code Generator: AST → 6502 instructions (direct, no IR for M1) - Runtime: NES hardware init, NMI handler, controller read, OAM DMA - Linker: NROM layout, vector table, palette loading, CHR data - ROM Builder: iNES header generation, PRG/CHR padding - CLI: `build` and `check` subcommands via clap 143 tests across all modules: - 22 lexer tests (literals, keywords, operators, error recovery) - 18 parser tests (expressions, statements, game structure, errors) - 7 analyzer tests (symbol resolution, memory allocation, transitions) - 30 assembler tests (every addressing mode, label resolution) - 7 codegen tests (var init, arithmetic, buttons, draw, comparisons) - 11 runtime tests (init sequence, NMI handler, controller read) - 10 ROM builder tests (iNES format, mirroring, banking, validation) - 5 linker tests (vector table, CHR data, palette loading) - 7 integration tests (end-to-end compilation, error detection) CI: GitHub Actions for check, fmt, clippy, test Pre-commit: script for local fmt + clippy + test validation https://claude.ai/code/session_01W6eQFStA66EuMKHUFo2rx3
43 lines
1,003 B
TOML
43 lines
1,003 B
TOML
[package]
|
|
name = "nescript"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
description = "A statically-typed compiler for NES game development"
|
|
license = "MIT"
|
|
|
|
[dependencies]
|
|
clap = { version = "4", features = ["derive"] }
|
|
ariadne = "0.4"
|
|
|
|
[dev-dependencies]
|
|
pretty_assertions = "1"
|
|
|
|
[profile.release]
|
|
lto = true
|
|
strip = true
|
|
|
|
[lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[lints.clippy]
|
|
all = { level = "warn", priority = -1 }
|
|
pedantic = { level = "warn", priority = -1 }
|
|
# Allow patterns common in compiler code
|
|
module_name_repetitions = "allow"
|
|
must_use_candidate = "allow"
|
|
missing_errors_doc = "allow"
|
|
missing_panics_doc = "allow"
|
|
cast_possible_truncation = "allow"
|
|
wildcard_imports = "allow"
|
|
option_if_let_else = "allow"
|
|
match_same_arms = "allow"
|
|
unnested_or_patterns = "allow"
|
|
missing_const_for_fn = "allow"
|
|
too_many_lines = "allow"
|
|
single_match_else = "allow"
|
|
unnecessary_wraps = "allow"
|
|
unused_self = "allow"
|
|
enum_glob_use = "allow"
|
|
manual_assert = "allow"
|
|
vec_init_then_push = "allow"
|
|
struct_field_names = "allow"
|