- MainDetectionHelper で main() 検出ロジックを箱化
- Legacy "static method main" と Modern "static box Main { main() }" の両パターン対応
- stage1_run_min.hako を modern 形式に統一
- ドキュメント更新(quickstart 等で static box スタイルに統一)
- パーサ新構文追加なし(仕様統一性保持)
- 後方互換性維持(Stage-B ヘルパーで legacy もサポート)
- テスト結果: 全スモーク PASS
Phase 152-B: Static Method 宣言の整理(Stage-3 仕様統一)
実装パターン: 箱化モジュール化(Phase 133/134 継承)
修正ファイル:
- lang/src/compiler/entry/compiler_stageb.hako: MainDetectionHelper (+103 lines)
- lang/src/compiler/entry/compiler.hako: Legacy Stage-A コメント (+3 lines)
- apps/tests/stage1_run_min.hako: Modern syntax に統一 (-1 line)
- docs/development/selfhosting/quickstart.md: サンプルコード更新
- CURRENT_TASK.md: Phase 152-B 完了記録
MainDetectionHelper 設計:
- findMainBody(): Entry point
- tryLegacyPattern(): "static method main" detection
- tryModernPattern(): "static box Main { main() }" detection
- findPattern(): Pattern search helper
- extractBodyFromPosition(): Brace matching extraction
利点:
✅ 明確な責任分離(各パターン検出が独立モジュール)
✅ テスタビリティ(各メソッド個別テスト可能)
✅ 拡張性(新パターン追加時は新メソッド追加のみ)
✅ 後方互換性(Legacy パターン削除は tryLegacyPattern 削除のみ)
テスト結果:
- stage1_run_min.hako: RC 0
- Selfhost depth-1: RC 0
- 全スモーク: 30/31 PASS (1 timeout は無関係)
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 —
usingsyntax, 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.
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/cleanupmay be attached to computed/once/birth_once/method blocks when Stage‑3 is enabled. Stored members (plainname: 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).