Root cause: toString/stringify/str were being rewritten to Global/Method calls with class inference, causing Main.toString/0 to be called for primitives. Fix (Box-First + Legacy Deletion): 1. ✅ MIR Builder - toString normalization (special.rs) - ALWAYS emit BoxCall with method_id=0 for toString/stringify/str - Do NOT rewrite to Global(Class.str/0) or Method calls - DELETED 70+ lines of complex class inference logic - Primitive guard with method name filter (known.rs) 2. ✅ JSON Serializer - method_id output (mir_json_emit.rs) - Include method_id field in BoxCall JSON for LLVM 3. ✅ LLVM Backend - universal slot #0 support - Extract method_id from JSON (instruction_lower.py) - Box primitives via nyash.box.from_i64 (boxcall.py) - Invoke toString via plugin system with method_id=0 - ⚠️ TODO: Add nyash.integer.tostring_h to kernel Test Results: ✅ VM: local x = 1; print(x.toString()) → "1" (PASS) ✅ VM: array_length test (boxed Integer) → PASS ⚠️ LLVM: Compiles successfully, needs kernel function SSOT: slot_registry - toString is ALWAYS universal slot #0 Legacy Deleted: - special.rs: Complex class inference rewrite (~70 lines) - special.rs: Unique suffix fallback for toString - special.rs: Main box special handling Files changed: - src/mir/builder/rewrite/special.rs (try_early_str_like_to_dst) - src/mir/builder/rewrite/known.rs (primitive guards x4) - src/runner/mir_json_emit.rs (method_id serialization x2) - src/llvm_py/builders/instruction_lower.py (method_id extraction) - src/llvm_py/instructions/boxcall.py (slot #0 handler) - docs/reference/language/quick-reference.md (toString SSOT) 🎊 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
42 lines
2.5 KiB
Markdown
42 lines
2.5 KiB
Markdown
# Nyash Language Reference – Index
|
||
|
||
This is the entry point for Nyash language documentation.
|
||
|
||
- Full Language Reference (2025): reference/language/LANGUAGE_REFERENCE_2025.md
|
||
- Syntax Cheat Sheet: quick-reference/syntax-cheatsheet.md
|
||
- Phase 12.7 Grammar Specs (ternary, sugar; peek → match に統合):
|
||
- Overview: development/roadmap/phases/phase-12.7/grammar-specs/README.md
|
||
- Token/Grammar: development/roadmap/phases/phase-12.7/ancp-specs/ANCP-Token-Specification-v1.md
|
||
- Sugar Transformations (?., ??, |> and friends): parser/sugar.rs (source) and tools/nyfmt/NYFMT_POC_ROADMAP.md
|
||
- Match Expression (pattern matching): see the Language Reference and EBNF (peek was replaced by match)
|
||
|
||
Statement separation and semicolons
|
||
- See: reference/language/statements.md — newline as primary separator; semicolons optional for multiple statements on one line; minimal ASI rules.
|
||
|
||
Imports and namespaces
|
||
- See: reference/language/using.md — `using` syntax, runner resolution, and style guidance.
|
||
|
||
Variables and scope
|
||
- See: reference/language/variables-and-scope.md — Block-scoped locals, assignment resolution, and strong/weak reference guidance.
|
||
- See: reference/language/lifecycle.md — Box lifetime, ownership (strong/weak), and finalization (`fini`) SSOT.
|
||
- See: reference/language/repl.md — REPL mode semantics (file mode vs REPL binding rules).
|
||
|
||
Type system (SSOT)
|
||
- See: reference/language/types.md — runtime truthiness, `+`/compare/equality semantics, and the role/limits of MIR type facts.
|
||
|
||
Grammar (EBNF)
|
||
- See: reference/language/EBNF.md — Stage‑2 grammar specification used by parser implementations.
|
||
- Unified Members (stored/computed/once/birth_once): see reference/language/EBNF.md “Box Members (Phase 15)” and the Language Reference section. Default ON (disable with `NYASH_ENABLE_UNIFIED_MEMBERS=0`).
|
||
|
||
Member exceptions and handlers (Stage‑3)
|
||
- Postfix `catch/cleanup` may be attached to computed/once/birth_once/method blocks when Stage‑3 is enabled. Stored members (plain `name: Type [= expr]`) do not support handlers.
|
||
|
||
Related implementation notes
|
||
- Tokenizer: src/tokenizer.rs
|
||
- Parser (expressions/statements): src/parser/expressions.rs, src/parser/statements.rs
|
||
- MIR Lowering (expressions): src/mir/builder/exprs.rs and friends
|
||
|
||
Navigation tips
|
||
- The “reference/language/LANGUAGE_REFERENCE_2025.md” is the canonical long‑form reference; use the Cheat Sheet for quick syntax lookup.
|
||
- Phase 12.7 files capture the finalized sugar and new constructs (match (replaces peek), ternary, null‑safe).
|