Files
hakorune/docs/reference/language/quick-reference.md
tomoaki 757193891f feat(llvm/phi): Phase 277 P1 - fail-fast validation for PHI strict mode
## Summary
Implemented fail-fast validation for PHI ordering and value resolution in strict mode.

## Changes

### P1-1: Strict mode for "PHI after terminator"
- File: `src/llvm_py/phi_wiring/wiring.py::ensure_phi`
- Behavior: `NYASH_LLVM_PHI_STRICT=1` → RuntimeError if PHI created after terminator
- Default: Warning only (no regression)

### P1-2: Strict mode for "fallback 0"
- File: `src/llvm_py/phi_wiring/wiring.py::wire_incomings`
- Behavior: Strict mode forbids silent fallback to 0 (2 locations)
  - Location 1: Unresolvable incoming value
  - Location 2: Type coercion failure
- Error messages point to next debug file: `llvm_builder.py::_value_at_end_i64`

### P1-3: Connect verify_phi_ordering() to execution path
- File: `src/llvm_py/builders/function_lower.py`
- Behavior: Verify PHI ordering after all instructions emitted
- Debug mode: Shows " All N blocks have correct PHI ordering"
- Strict mode: Raises RuntimeError with block list if violations found

## Testing
 Test 1: strict=OFF - passes without errors
 Test 2: strict=ON - passes without errors (no violations in test fixtures)
 Test 3: debug mode - verify_phi_ordering() connected and running

## Scope
- LLVM harness (Python) changes only
- No new environment variables (uses existing 3 from Phase 277 P2)
- No JoinIR/Rust changes (root fix is Phase 279)
- Default behavior unchanged (strict mode opt-in)

## Next Steps
- Phase 278: Remove deprecated env var support
- Phase 279: Root fix - unify "2本のコンパイラ" pipelines

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 14:48:37 +09:00

3.6 KiB
Raw Blame History

Nyash Quick Reference (MVP)

Purpose

  • Onepage practical summary for writing and implementing Nyash.
  • Keep grammar minimal; clarify rules that often cause confusion.

Keywords (reserved)

  • control: if, else, loop, match, case, break, continue, return
  • decl: static, box, local, using, as
  • lit: true, false, null, void

Expressions and Calls

  • Function call: f(a, b)
  • Method call: obj.m(a, b) — internally normalized to function form: Class.m(me: obj, a, b)
    • DefaultONP4: Known 受信者かつ関数が一意に存在する場合に正規化userbox 限定)。
    • それ以外Unknown/core/userinstanceは安全に BoxCall へフォールバック(挙動不変)。
    • 環境で無効化: NYASH_REWRITE_KNOWN_DEFAULT=0(開発時の切替用)。
    • バックエンドVM/LLVM/Nyは統一形状の呼び出しを受け取る。
  • Member: obj.field or obj.m

Display & Conversion

  • Humanreadable display: str(x)(推奨)/ x.str()
    • 既存の toString()str() に正規化Builder早期リライト
    • 互換: 既存の stringify() は当面エイリアス(内部で str() 相当へ誘導)。
  • Debug表示構造的・安定: repr(x)将来導入、devのみ
  • JSONシリアライズ: toJson(x)(文字列)/ toJsonNode(x)(構造)

Operators (precedence high→low)

  • Unary: ! ~ -
  • Multiplicative: * / %
  • Additive: + -
  • Compare: == != < <= > >=
  • Logical: && || (shortcircuit, sideeffect aware)

Semicolons and ASI (Automatic Semicolon Insertion)

  • Allowed to omit semicolon at:
    • End of line, before } or at EOF, when the statement is syntactically complete.
  • Not allowed:
    • Line break immediately after a binary operator (e.g., 1 +\n2)
    • Ambiguous continuations; parser must FailFast with a clear message.

Truthiness (boolean context)

  • SSOT: reference/language/types.mdruntime truthiness
  • 実行上は Bool/Integer/Float/String/Void が中心。BoxRef は一部のコアBoxのみ許可され、その他は TypeErrorFail-Fast

Equality and Comparison

  • SSOT: reference/language/types.md==/!=< <= > >= の runtime 仕様)
  • == は一部の cross-kindInteger↔Bool, Integer↔Float)を best-effort で扱う。その他は false
  • < <= > >=Integer/Float/String同型同士のみ(異型は TypeError)。

String and Numeric +

  • SSOT: reference/language/types.mdruntime + 仕様)
  • Integer+Integer, Float+Float は加算。片側が String なら文字列連結(相手は文字列化)。
  • それ以外(例: Integer+Bool, Integer+Float)は TypeErrorFail-Fast

Blocks and Control

  • if (cond) { ... } [else { ... }]
  • loop (cond) { ... } — minimal loop form
  • match (expr) { case ... } — MVP (literals and simple type patterns)

Using / SSOT

  • Dev/CI: filebased using allowed for convenience.
  • Prod: nyash.toml only. Duplicate imports or alias rebinding is an error.

Errors (format)

  • Always: Error at line X, column Y: <message>
  • For tokenizer errors, add the reason and show one nearby line if possible.

Dev/Prod toggles (indicative)

  • NYASH_DEV=1 — developer defaults (diagnostics, tracing; behavior unchanged)
  • NYASH_ENABLE_USING=1 — enable using resolver
  • NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 — allow main as toplevel entry

Notes

  • Keep the language small. Prefer explicit conversions (int(x), str(x), bool(x)) in standard helpers over implicit coercions.
  • Builder rewrites method calls to keep runtime dispatch simple and consistent across backends.