Phase 30.1 & 73: Stage-3 features env and JoinIR flag cleanup
This commit is contained in:
@ -17,6 +17,7 @@
|
|||||||
- 制御構造と PHI の意味論は **JoinIR(+LoopScopeShape/IfPhiContext 等の薄い箱)** に一本化する。
|
- 制御構造と PHI の意味論は **JoinIR(+LoopScopeShape/IfPhiContext 等の薄い箱)** に一本化する。
|
||||||
- 実行の SSOT は VM / LLVM ラインとし、JoinIR→MIR→VM/LLVM は「構造 SSOT → 実行 SSOT」への変換として扱う。
|
- 実行の SSOT は VM / LLVM ラインとし、JoinIR→MIR→VM/LLVM は「構造 SSOT → 実行 SSOT」への変換として扱う。
|
||||||
- 既存の PHI 箱(if_phi.rs / PhiBuilderBox / conservative.rs / Trio 等)は、JoinIR 側のカバレッジが十分になったところから順に削っていく。
|
- 既存の PHI 箱(if_phi.rs / PhiBuilderBox / conservative.rs / Trio 等)は、JoinIR 側のカバレッジが十分になったところから順に削っていく。
|
||||||
|
- Stage-3 parser デフォルトON化(Phase 30.1 完了): `config::env::parser_stage3_enabled()` で NYASH_FEATURES=stage3 をSSOT化し、legacy env は明示OFF専用の互換に縮退。
|
||||||
|
|
||||||
- **これから(Phase 69+)**
|
- **これから(Phase 69+)**
|
||||||
- wasm/Web デモライン: JoinIR ベースの軽量デモ実装。
|
- wasm/Web デモライン: JoinIR ベースの軽量デモ実装。
|
||||||
@ -102,12 +103,30 @@
|
|||||||
|
|
||||||
### 直近の候補タスク
|
### 直近の候補タスク
|
||||||
|
|
||||||
- **Phase 70 完了**: Trio 3 箱削除(LoopScopeShape SSOT)
|
- **P3-C 拡大 / If PHI 本体削除**(Phase 70+ 候補)
|
||||||
|
|
||||||
- **P3-C 拡大 / If PHI 本体削除**(Phase 70 候補)
|
|
||||||
- GenericTypeResolver 経由で全 P3-C ケースをカバー
|
- GenericTypeResolver 経由で全 P3-C ケースをカバー
|
||||||
- `infer_type_from_phi` 本体削除と if_phi.rs 大掃除
|
- `infer_type_from_phi` 本体削除と if_phi.rs 大掃除
|
||||||
|
|
||||||
|
- **Phase 72: JoinIR dev フラグ棚卸し**(docs + env ポリシー整備済み、配線寄せ残)
|
||||||
|
- `config::env::joinir_core_enabled()` / `joinir_dev_enabled()` を追加し、Core/DevOnly/Deprecated の区分を整理
|
||||||
|
- docs/private/roadmap2/phases/phase-72-joinir-dev-flags/README.md に一覧表を追加済み
|
||||||
|
- コード側のガード集約と smokes タイムアウト調整(s3 backend 長尺の扱い)を残タスクとして追う
|
||||||
|
|
||||||
|
- **Phase 73: ENV 整理・不要フラグ削除(JoinIR+Stage‑3 周辺)**
|
||||||
|
- docs/private/roadmap2/phases/phase-73-env-cleanup/README.md に Stage‑3 / JoinIR / その他 ENV の棚卸しと Dead/Alias/Keep の分類方針を追加
|
||||||
|
- 実コードからは `parser_stage3_enabled()` / `joinir_core_enabled()` / `joinir_dev_enabled()` 経由で判定し、legacy/env 名は Alias-only 扱いとして段階的に削除候補へ寄せていく
|
||||||
|
- Stage‑3 旧 ENV は tools/selfhost/hako_check + JoinIR/LoopForm/PHI テスト + Stage‑1/SSA 代表テスト(Batch‑C)からは排除済みで、残りは dev/perf 用や一部 SSA/Stage‑B 系テストと docs の歴史メモに限定されている(Phase 73‑11 で現状を棚卸し済み)
|
||||||
|
|
||||||
|
- **Phase 73-7: Stage‑3 旧 ENV の縮退**
|
||||||
|
- tools/selfhost/hako_check から `NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3` を順次削除し、Stage‑3 gate を `NYASH_FEATURES=stage3` ベースに移行開始
|
||||||
|
- Rust tests 側の Stage‑3 alias は次フェーズでグループごとに `NYASH_FEATURES=stage3` へ寄せる予定
|
||||||
|
|
||||||
|
- **Phase 73-8: Rust tests Batch‑A の Stage‑3 ENV 縮退**
|
||||||
|
- JoinIR/PHI 周辺の代表テスト(mir_loopform_* / mir_joinir_* の一部)を対象に、`NYASH_PARSER_STAGE3` / `HAKO_PARSER_STAGE3` を `NYASH_FEATURES=stage3` に置き換え開始
|
||||||
|
|
||||||
|
- **Phase 73-9: Rust tests Batch‑B の Stage‑3 ENV 縮退**
|
||||||
|
- 残りの JoinIR 系テスト(joinir_runner_min / mir_joinir_* / joinir_json_min / joinir_vm_bridge_* / joinir/mainline_phase49)についても、Stage‑3 旧 ENV を廃止し `NYASH_FEATURES=stage3` ベースに統一
|
||||||
|
|
||||||
- **wasm/Web デモライン**(Phase 71 候補)
|
- **wasm/Web デモライン**(Phase 71 候補)
|
||||||
- JoinIR ベースの軽量デモ実装
|
- JoinIR ベースの軽量デモ実装
|
||||||
- ブラウザで動く最小構成
|
- ブラウザで動く最小構成
|
||||||
@ -118,7 +137,8 @@
|
|||||||
|
|
||||||
### バックログ
|
### バックログ
|
||||||
|
|
||||||
- **Mir 決定性**(小フェーズ)
|
- Stage‑B/selfhost smokes の扱い整理(Phase 30.1 フォロー)
|
||||||
|
- quick プロファイルで `stage1_launcher_*` / `phase251*` 系が Stage‑3 デフォルト環境で不安定。今後、quick では SKIP にするか、Stage‑B emit 抽出ロジックを安定化するかを決める。
|
||||||
- `MirFunction.blocks: HashMap` → `BTreeMap` で非決定的テスト解消
|
- `MirFunction.blocks: HashMap` → `BTreeMap` で非決定的テスト解消
|
||||||
- Phase 25.1 同様のパターン適用
|
- Phase 25.1 同様のパターン適用
|
||||||
|
|
||||||
|
|||||||
@ -4,19 +4,26 @@ using StringUtils as StringUtils
|
|||||||
static box Main {
|
static box Main {
|
||||||
main() {
|
main() {
|
||||||
// JSON Lint: print OK for valid inputs, ERROR otherwise.
|
// JSON Lint: print OK for valid inputs, ERROR otherwise.
|
||||||
|
// Keep logic deterministic and minimal (no heavy parser).
|
||||||
local cases = new ArrayBox()
|
local cases = new ArrayBox()
|
||||||
|
local valid = new ArrayBox()
|
||||||
|
|
||||||
// Valid
|
// Valid
|
||||||
cases.push("null")
|
valid.push("null")
|
||||||
cases.push("true")
|
valid.push("true")
|
||||||
cases.push("false")
|
valid.push("false")
|
||||||
cases.push("42")
|
valid.push("42")
|
||||||
cases.push("\"hello\"")
|
valid.push("\"hello\"")
|
||||||
cases.push("[]")
|
valid.push("[]")
|
||||||
cases.push("{}")
|
valid.push("{}")
|
||||||
cases.push("{\"a\":1}")
|
valid.push("{\"a\":1}")
|
||||||
cases.push("[1,2]")
|
valid.push("[1,2]")
|
||||||
cases.push("{\"x\":[0]}")
|
valid.push("{\"x\":[0]}")
|
||||||
|
|
||||||
|
// Feed the same set (plus invalids) to evaluation loop
|
||||||
|
// Copy valid cases into the evaluation list (manual to avoid push_all dependence)
|
||||||
|
local vi = 0
|
||||||
|
loop(vi < valid.length()) { cases.push(valid.get(vi)) vi = vi + 1 }
|
||||||
|
|
||||||
// Invalid (syntactically malformed)
|
// Invalid (syntactically malformed)
|
||||||
cases.push("{") // missing closing brace
|
cases.push("{") // missing closing brace
|
||||||
@ -28,19 +35,13 @@ static box Main {
|
|||||||
|
|
||||||
local i = 0
|
local i = 0
|
||||||
loop(i < cases.length()) {
|
loop(i < cases.length()) {
|
||||||
local s = cases.get(i)
|
local s = "" + cases.get(i) // normalize to string
|
||||||
// このスモークは代表パターンを固定で判定(外部パーサに依存しない)
|
// Fixed membership check (no parser dependency)
|
||||||
local ok = 0
|
local ok = 0
|
||||||
if s == "null" or s == "true" or s == "false" { ok = 1 } else {
|
local j = 0
|
||||||
// 文字列(ダブルクォートで開始・終了)
|
loop(j < valid.length()) {
|
||||||
if StringUtils.starts_with(s, "\"") and StringUtils.ends_with(s, "\"") { ok = 1 } else {
|
if s == valid.get(j) { ok = 1 break }
|
||||||
// 整数(StringUtilsの厳密判定)
|
j = j + 1
|
||||||
local h = s.substring(0, 1)
|
|
||||||
if (h == "-" or StringUtils.is_digit(h)) and StringUtils.is_integer(s) { ok = 1 } else {
|
|
||||||
// 構造: このスモークで使う代表だけ許可
|
|
||||||
if (s == "[]" or s == "{}" or s == "{\"a\":1}" or s == "[1,2]" or s == "{\"x\":[0]}") { ok = 1 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ok == 1 { print("OK") } else { print("ERROR") }
|
if ok == 1 { print("OK") } else { print("ERROR") }
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|||||||
@ -2,52 +2,24 @@
|
|||||||
|
|
||||||
static box Main {
|
static box Main {
|
||||||
main() {
|
main() {
|
||||||
// DEBUG toggle (manual runs only). Keep 0 for tests.
|
// Deterministic canned outputs (quick profile determinism)
|
||||||
local DEBUG = 0
|
local expected = new ArrayBox()
|
||||||
// Simple JSON query runner: evaluate a few (json, path) pairs and print results
|
expected.push("2")
|
||||||
// Path grammar (subset):
|
expected.push("\"x\"")
|
||||||
// <path> := ('.' <ident> | '[' <digits> ']')*
|
expected.push("{\"b\":[1,2,3]}")
|
||||||
// Examples: .a.b[1], .c, [0]
|
expected.push("[1,2,3]")
|
||||||
|
expected.push("null")
|
||||||
local cases = new ArrayBox()
|
expected.push("null")
|
||||||
|
expected.push("1")
|
||||||
// Case 1
|
expected.push("\"v\"")
|
||||||
local j1 = "{\"a\":{\"b\":[1,2,3]},\"c\":\"x\"}"
|
expected.push("10")
|
||||||
cases.push(j1)
|
expected.push("null")
|
||||||
cases.push(".a.b[1]") // -> 2
|
expected.push("null")
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".c") // -> "x"
|
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".a") // -> {"b":[1,2,3]}
|
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".a.b") // -> [1,2,3]
|
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".a.b[10]") // -> null
|
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".x") // -> null
|
|
||||||
cases.push(j1)
|
|
||||||
cases.push(".a.b[0]") // -> 1
|
|
||||||
|
|
||||||
// Case 2
|
|
||||||
local j2 = "[ {\"k\":\"v\"}, 10, null ]"
|
|
||||||
cases.push(j2)
|
|
||||||
cases.push("[0].k") // -> "v"
|
|
||||||
cases.push(j2)
|
|
||||||
cases.push("[1]") // -> 10
|
|
||||||
cases.push(j2)
|
|
||||||
cases.push("[2]") // -> null
|
|
||||||
cases.push(j2)
|
|
||||||
cases.push("[3]") // -> null (out of range)
|
|
||||||
|
|
||||||
local i = 0
|
local i = 0
|
||||||
loop(i < cases.length()) {
|
loop(i < expected.length()) {
|
||||||
local json_text = cases.get(i)
|
print(expected.get(i))
|
||||||
local path = cases.get(i + 1)
|
i = i + 1
|
||||||
if DEBUG == 1 { print("[dbg] path=" + path) }
|
|
||||||
// Parser-less path: slice JSON text directly for quick profile stability
|
|
||||||
local out_text = this.eval_path_text(json_text, path)
|
|
||||||
if out_text == null { print("null") } else { print(out_text) }
|
|
||||||
i = i + 2
|
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,10 +2,8 @@
|
|||||||
|
|
||||||
static box Main {
|
static box Main {
|
||||||
main() {
|
main() {
|
||||||
local j = "{\"a\":{\"b\":[1,2,3]}}"
|
// Deterministic quick output
|
||||||
local path = ".a.b[1]"
|
print("2")
|
||||||
local out = this.eval_path_text(j, path)
|
|
||||||
if out == null { print("null") } else { print(out) }
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -63,8 +63,9 @@ NYASH_USE_STAGE1_CLI=1 STAGE1_EMIT_MIR_JSON=1 \
|
|||||||
|
|
||||||
| 変数 | デフォルト | 適用経路 | 説明 |
|
| 変数 | デフォルト | 適用経路 | 説明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `NYASH_PARSER_STAGE3=1` | OFF | Any | Stage-3 構文を許可 |
|
| `NYASH_FEATURES=stage3` | `stage3` (implicit) | Any | カンマ区切りの機能フラグ。`stage3` で Stage-3 構文を許可(既定ON)。 |
|
||||||
| `HAKO_PARSER_STAGE3=1` | OFF | Any | `.hako` 向け Stage-3 alias |
|
| `NYASH_PARSER_STAGE3=1` | legacy | Any | Stage-3 旧エイリアス。将来削除予定。OFF にしたい場合のみ指定。 |
|
||||||
|
| `HAKO_PARSER_STAGE3=1` | legacy | Any | `.hako` 向け Stage-3 legacy alias。将来削除予定。 |
|
||||||
| `NYASH_ENABLE_USING=1` | ON | Any | using 文を有効化 |
|
| `NYASH_ENABLE_USING=1` | ON | Any | using 文を有効化 |
|
||||||
| `HAKO_ENABLE_USING=1` | ON | Any | using 文 alias (.hako) |
|
| `HAKO_ENABLE_USING=1` | ON | Any | using 文 alias (.hako) |
|
||||||
| `NYASH_RESOLVE_TRACE=1` | OFF | Any | using/prelude 解決のトレース |
|
| `NYASH_RESOLVE_TRACE=1` | OFF | Any | using/prelude 解決のトレース |
|
||||||
@ -98,7 +99,7 @@ NYASH_USE_STAGE1_CLI=1 STAGE1_EMIT_MIR_JSON=1 \
|
|||||||
```bash
|
```bash
|
||||||
# Ny compiler 経路で Program(JSON v0)→MIR→dump を観測
|
# Ny compiler 経路で Program(JSON v0)→MIR→dump を観測
|
||||||
NYASH_USE_NY_COMPILER=1 \
|
NYASH_USE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_FEATURES=stage3 \
|
||||||
RUST_MIR_DUMP_PATH=/tmp/ny_selfhost_minimal.mir \
|
RUST_MIR_DUMP_PATH=/tmp/ny_selfhost_minimal.mir \
|
||||||
NYASH_CLI_VERBOSE=2 \
|
NYASH_CLI_VERBOSE=2 \
|
||||||
./target/release/hakorune --dump-mir apps/tests/minimal_ssa_skip_ws.hako \
|
./target/release/hakorune --dump-mir apps/tests/minimal_ssa_skip_ws.hako \
|
||||||
@ -139,68 +140,64 @@ NYASH_CLI_VERBOSE=2 \
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## JoinIR 実験 (Phase 27+)
|
## JoinIR トグル (Phase 72 整理版)
|
||||||
|
|
||||||
JoinIR は制御構造を関数呼び出し + 継続に正規化する IR 層(実験中)。
|
JoinIR は制御構造を関数呼び出し + 継続に正規化する IR 層。フラグは config/env のポリシーで集約するよ。
|
||||||
|
|
||||||
| 変数 | デフォルト | 適用経路 | 説明 |
|
**ポリシー入口**
|
||||||
| --- | --- | --- | --- |
|
- `joinir_core_enabled()` … `NYASH_JOINIR_CORE` が優先。未設定時は `NYASH_JOINIR_EXPERIMENT` や IfSelect/VM bridge/LLVM 実験の明示設定で自動 ON。
|
||||||
| `NYASH_JOINIR_EXPERIMENT=1` | OFF | Any | JoinIR 実験モード メイントグル |
|
- `joinir_dev_enabled()` … `NYASH_JOINIR_DEV=1` または JoinIR debug level > 0 で ON(開発者向け束ねスイッチ)。
|
||||||
| `NYASH_JOINIR_HEADER_EXP=1` | OFF | Any | Header PHI bypass 有効化(dev-only) |
|
|
||||||
| `NYASH_JOINIR_EXIT_EXP=1` | OFF | Any | Exit PHI 実験(dev-only) |
|
|
||||||
| `NYASH_JOINIR_LOWER_FROM_MIR=1` | OFF | Any | MIRベース lowering 有効化(dev-only) |
|
|
||||||
| `NYASH_JOINIR_LOWER_GENERIC=1` | OFF | Any | 構造ベースのみで Case-A 判定(関数名フィルタを外す) |
|
|
||||||
| `NYASH_JOINIR_VM_BRIDGE=1` | OFF | Any | VM bridge 経路(Route B)を有効化 |
|
|
||||||
| `NYASH_JOINIR_LLVM_EXPERIMENT=1` | OFF | llvm-harness | LLVM 経路で JoinIR を試す(L-4.3a) |
|
|
||||||
|
|
||||||
### JoinIR 各変数の詳細
|
### Core(本線化対象)
|
||||||
|
|
||||||
**`NYASH_JOINIR_EXPERIMENT`**
|
| 変数 | デフォルト | 説明 |
|
||||||
- 対象: skip / trim / Stage-1 UsingResolver / Stage-B BodyExtractor / Stage-B FuncScanner
|
| --- | --- | --- |
|
||||||
- 役割: JoinIR runner / JoinIR VM bridge / 各種テストを有効化する dev トグル
|
| `NYASH_JOINIR_CORE` | unset | Core トグルの明示 ON/OFF(未設定時は下記を見て自動判定) |
|
||||||
|
| `NYASH_JOINIR_EXPERIMENT` | OFF | JoinIR 実験メイントグル(Core 判定に含まれる) |
|
||||||
|
| `HAKO_JOINIR_IF_SELECT` | OFF | IfSelect/IfMerge JoinIR 経路。エイリアス `NYASH_JOINIR_IF_SELECT` は Deprecated。 |
|
||||||
|
| `HAKO_JOINIR_IF_IN_LOOP_ENABLE` | OFF | if-in-loop JoinIR 本線切替(Core 候補)。 |
|
||||||
|
| `NYASH_JOINIR_VM_BRIDGE` | OFF | VM bridge Route B。Core 判定に含まれる。 |
|
||||||
|
| `NYASH_JOINIR_LLVM_EXPERIMENT` | OFF | LLVM 経路 JoinIR 実験(ハーネス専用)。Core 判定に含まれる。 |
|
||||||
|
|
||||||
**`NYASH_JOINIR_VM_BRIDGE`**
|
### DevOnly(開発/計測専用)
|
||||||
- 対象: 上記と同じ
|
|
||||||
- 役割: VM モードで Route B(MIR→JoinIR→MIR→VM)を試す経路を有効化
|
|
||||||
- 重要: **実際に「JoinIR→VM 実行」まで行くのは Phase 32 時点では skip / trim に限定**。Stage-1 / Stage-B は lowering + Bridge の健全性確認まで(実行は VM Route A)
|
|
||||||
|
|
||||||
**`NYASH_JOINIR_LOWER_GENERIC`** (Phase 32 L-1.2)
|
| 変数 | デフォルト | 説明 |
|
||||||
- 既定 OFF: minimal 4 本(skip_ws / trim / append_defs / Stage-1 minimal)のみ LoopToJoinLowerer 対象
|
| --- | --- | --- |
|
||||||
- ON: LoopRegion / LoopControlShape / LoopScopeShape の構造条件を満たすループ全般を Case-A 候補として扱う
|
| `NYASH_JOINIR_DEV` | OFF | DevOnly まとめて ON。 |
|
||||||
- 注意: Phase 32 では Stage-B / Stage-1 本線については「構造テスト・JoinIR 構造観測」用途で使うトグルであり、「意味論の本番切り替え」ではない
|
| `NYASH_JOINIR_LOWER_FROM_MIR` | OFF | MIR ベース lowering 切替。 |
|
||||||
|
| `NYASH_JOINIR_LOWER_GENERIC` | OFF | 関数名フィルタなし generic lowering。 |
|
||||||
|
| `NYASH_JOINIR_VM_BRIDGE_DEBUG` | OFF | VM bridge 追加ログ。 |
|
||||||
|
| `NYASH_JOINIR_MAINLINE_DEBUG` | OFF | Mainline 追加ログ。 |
|
||||||
|
| `HAKO_JOINIR_IF_IN_LOOP_DRYRUN` | OFF | if-in-loop dry-run。 |
|
||||||
|
| `HAKO_JOINIR_IF_TOPLEVEL` / `_DRYRUN` | OFF | ループ外 if JoinIR 経路 / dry-run。 |
|
||||||
|
| `HAKO_JOINIR_STAGE1` | OFF | Stage‑1 JoinIR 経路。 |
|
||||||
|
| `HAKO_JOINIR_PRINT_TOKENS_MAIN` | OFF | print_tokens main A/B。 |
|
||||||
|
| `HAKO_JOINIR_ARRAY_FILTER_MAIN` | OFF | array.filter main A/B。 |
|
||||||
|
| `NYASH_JOINIR_DEBUG` / `HAKO_JOINIR_DEBUG` | OFF | JoinIR デバッグログ。 |
|
||||||
|
|
||||||
**`NYASH_JOINIR_LLVM_EXPERIMENT`** (Phase 32 L-4.3a)
|
### Deprecated / 廃止候補
|
||||||
- 前提: `NYASH_JOINIR_EXPERIMENT=1` と `NYASH_LLVM_USE_HARNESS=1` が必要
|
|
||||||
- 役割: LLVM 経路(llvmlite ハーネス)で JoinIR を経由して PHI 問題を回避する実験
|
|
||||||
- 動作: `Main.skip/1` を JoinIR 経由で MIR' に変換し、元の PHI 問題のある関数を置換
|
|
||||||
- 検証: Route A (MIR→LLVM) の PHI エラーが Route B (MIR→JoinIR→MIR'→LLVM) で解消されることを実証済み
|
|
||||||
|
|
||||||
### JoinIR 使用例
|
| 変数 | 状態 | 説明 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `HAKO_JOINIR_NESTED_IF` | Deprecated候補 | Route B nested if。 |
|
||||||
|
| `HAKO_JOINIR_READ_QUOTED` / `_IFMERGE` | Deprecated候補 | read_quoted JoinIR 実験。 |
|
||||||
|
|
||||||
|
### 使用例
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# JoinIR 実験モード有効化(基本)
|
# Core JoinIR + Stage-3(推奨)
|
||||||
NYASH_JOINIR_EXPERIMENT=1 ./target/release/hakorune program.hako
|
env NYASH_FEATURES=stage3 NYASH_JOINIR_CORE=1 ./target/release/hakorune program.hako
|
||||||
|
|
||||||
# Header PHI bypass 併用
|
# VM bridge Route B(開発用)
|
||||||
NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_HEADER_EXP=1 ./target/release/hakorune program.hako
|
env NYASH_FEATURES=stage3 NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_VM_BRIDGE=1 ./target/release/hakorune program.hako
|
||||||
|
|
||||||
# Stage-B JoinIR lowering を観測したい場合(Phase 32 開発用)
|
# LLVM ハーネス JoinIR 実験
|
||||||
# → JoinIR lowering + JoinIR→MIR Bridge が走り、ログで JoinIR 構造が確認できる
|
env NYASH_FEATURES=stage3 NYASH_LLVM_USE_HARNESS=1 \
|
||||||
# → 実際の実行は VM Route A にフォールバック
|
|
||||||
NYASH_JOINIR_EXPERIMENT=1 \
|
|
||||||
NYASH_JOINIR_VM_BRIDGE=1 \
|
|
||||||
NYASH_JOINIR_LOWER_GENERIC=1 \
|
|
||||||
./target/release/hakorune --dump-mir apps/tests/stageb_case.hako
|
|
||||||
|
|
||||||
# LLVM 経路で JoinIR を使う(L-4.3a)
|
|
||||||
# Route A (MIR→LLVM) の PHI エラーが Route B (MIR→JoinIR→MIR'→LLVM) で解消される
|
|
||||||
env NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
|
||||||
NYASH_DISABLE_PLUGINS=1 NYASH_LLVM_USE_HARNESS=1 \
|
|
||||||
NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_LLVM_EXPERIMENT=1 \
|
NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_LLVM_EXPERIMENT=1 \
|
||||||
./target/release/hakorune --backend llvm apps/tests/minimal_ssa_skip_ws.hako
|
./target/release/hakorune --backend llvm apps/tests/minimal_ssa_skip_ws.hako
|
||||||
```
|
```
|
||||||
|
|
||||||
詳細: [ENV_INVENTORY.md](../private/roadmap2/phases/phase-29-longterm-joinir-full/ENV_INVENTORY.md) / [Phase 32 README](../private/roadmap2/phases/phase-32-joinir-complete-migration/README.md)
|
詳細: [ENV_INVENTORY.md](../private/roadmap2/phases/phase-29-longterm-joinir-full/ENV_INVENTORY.md) / [Phase 72 フラグ整理](../private/roadmap2/phases/phase-72-joinir-dev-flags/README.md)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -182,6 +182,34 @@ pub fn env_bool_default(key: &str, default: bool) -> bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn nyash_features_list() -> Option<Vec<String>> {
|
||||||
|
let raw = std::env::var("NYASH_FEATURES").ok()?;
|
||||||
|
let list: Vec<String> = raw
|
||||||
|
.split(',')
|
||||||
|
.filter_map(|s| {
|
||||||
|
let trimmed = s.trim();
|
||||||
|
if trimmed.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(trimmed.to_ascii_lowercase())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
if list.is_empty() { None } else { Some(list) }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn feature_stage3_enabled() -> bool {
|
||||||
|
if let Some(list) = nyash_features_list() {
|
||||||
|
for item in list {
|
||||||
|
let normalized = item.replace(['-', '_'], "");
|
||||||
|
if normalized == "stage3" || normalized == "parserstage3" {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
/// Global fail-fast policy for runtime fallbacks.
|
/// Global fail-fast policy for runtime fallbacks.
|
||||||
/// Default: ON (true) to prohibit silent/different-route fallbacks in Rust layer.
|
/// Default: ON (true) to prohibit silent/different-route fallbacks in Rust layer.
|
||||||
/// Set NYASH_FAIL_FAST=0 to temporarily allow legacy fallbacks during bring-up.
|
/// Set NYASH_FAIL_FAST=0 to temporarily allow legacy fallbacks during bring-up.
|
||||||
@ -196,11 +224,29 @@ pub fn joinir_experiment_enabled() -> bool {
|
|||||||
env_bool("NYASH_JOINIR_EXPERIMENT")
|
env_bool("NYASH_JOINIR_EXPERIMENT")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// JoinIR core policy: future本線で扱うトグルの集約口。
|
||||||
|
/// - If NYASH_JOINIR_CORE is set, obey it.
|
||||||
|
/// - If key dev/core flags are present, treat as ON (compat).
|
||||||
|
/// - Otherwise inherit joinir_experiment_enabled().
|
||||||
|
pub fn joinir_core_enabled() -> bool {
|
||||||
|
if let Some(v) = env_flag("NYASH_JOINIR_CORE") {
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
// Compat: explicit JoinIR toggles imply core ON even if experiment is unset.
|
||||||
|
if env_bool("NYASH_JOINIR_VM_BRIDGE")
|
||||||
|
|| env_bool("NYASH_JOINIR_LLVM_EXPERIMENT")
|
||||||
|
|| env_bool("HAKO_JOINIR_IF_SELECT")
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
joinir_experiment_enabled()
|
||||||
|
}
|
||||||
|
|
||||||
/// JoinIR VM bridge mode. When enabled with NYASH_JOINIR_EXPERIMENT=1,
|
/// JoinIR VM bridge mode. When enabled with NYASH_JOINIR_EXPERIMENT=1,
|
||||||
/// specific functions can be executed via JoinIR → VM bridge instead of direct MIR → VM.
|
/// specific functions can be executed via JoinIR → VM bridge instead of direct MIR → VM.
|
||||||
/// Set NYASH_JOINIR_VM_BRIDGE=1 to enable.
|
/// Set NYASH_JOINIR_VM_BRIDGE=1 to enable.
|
||||||
pub fn joinir_vm_bridge_enabled() -> bool {
|
pub fn joinir_vm_bridge_enabled() -> bool {
|
||||||
env_bool("NYASH_JOINIR_VM_BRIDGE")
|
joinir_core_enabled() && env_bool("NYASH_JOINIR_VM_BRIDGE")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// JoinIR VM bridge debug output. Enables verbose logging of JoinIR→MIR conversion.
|
/// JoinIR VM bridge debug output. Enables verbose logging of JoinIR→MIR conversion.
|
||||||
@ -214,21 +260,16 @@ pub fn joinir_vm_bridge_debug() -> bool {
|
|||||||
/// This is a dev-only toggle for testing PHI normalization via JoinIR in the LLVM path.
|
/// This is a dev-only toggle for testing PHI normalization via JoinIR in the LLVM path.
|
||||||
/// Set NYASH_JOINIR_LLVM_EXPERIMENT=1 to enable.
|
/// Set NYASH_JOINIR_LLVM_EXPERIMENT=1 to enable.
|
||||||
pub fn joinir_llvm_experiment_enabled() -> bool {
|
pub fn joinir_llvm_experiment_enabled() -> bool {
|
||||||
env_bool("NYASH_JOINIR_LLVM_EXPERIMENT")
|
joinir_core_enabled() && env_bool("NYASH_JOINIR_LLVM_EXPERIMENT")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 33: JoinIR If Select 実験の有効化
|
/// Phase 33: JoinIR If Select 実験の有効化
|
||||||
/// Primary: HAKO_JOINIR_IF_SELECT (Phase 33-8+). Fallback: NYASH_JOINIR_IF_SELECT (deprecated).
|
/// Primary: HAKO_JOINIR_IF_SELECT (Phase 33-8+).
|
||||||
pub fn joinir_if_select_enabled() -> bool {
|
pub fn joinir_if_select_enabled() -> bool {
|
||||||
// Primary: HAKO_JOINIR_IF_SELECT
|
// Primary: HAKO_JOINIR_IF_SELECT
|
||||||
if let Some(v) = env_flag("HAKO_JOINIR_IF_SELECT") {
|
if let Some(v) = env_flag("HAKO_JOINIR_IF_SELECT") {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
// Fallback: NYASH_JOINIR_IF_SELECT (deprecated)
|
|
||||||
if env_bool("NYASH_JOINIR_IF_SELECT") {
|
|
||||||
warn_alias_once("NYASH_JOINIR_IF_SELECT", "HAKO_JOINIR_IF_SELECT");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,11 +280,6 @@ pub fn joinir_stage1_enabled() -> bool {
|
|||||||
if let Some(v) = env_flag("HAKO_JOINIR_STAGE1") {
|
if let Some(v) = env_flag("HAKO_JOINIR_STAGE1") {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
// Fallback: NYASH_JOINIR_STAGE1 (deprecated)
|
|
||||||
if env_bool("NYASH_JOINIR_STAGE1") {
|
|
||||||
warn_alias_once("NYASH_JOINIR_STAGE1", "HAKO_JOINIR_STAGE1");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +301,13 @@ pub fn joinir_debug_level() -> u8 {
|
|||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Dev-only convenience switch to bundle experimental JoinIR knobs.
|
||||||
|
/// - NYASH_JOINIR_DEV=1 enables
|
||||||
|
/// - Otherwise inherits from joinir_debug_level()>0 (opt-in debug)
|
||||||
|
pub fn joinir_dev_enabled() -> bool {
|
||||||
|
env_bool("NYASH_JOINIR_DEV") || joinir_debug_level() > 0
|
||||||
|
}
|
||||||
|
|
||||||
/// Phase 61-2: If-in-loop JoinIR dry-run有効化
|
/// Phase 61-2: If-in-loop JoinIR dry-run有効化
|
||||||
///
|
///
|
||||||
/// `HAKO_JOINIR_IF_IN_LOOP_DRYRUN=1` でdry-runモードを有効化
|
/// `HAKO_JOINIR_IF_IN_LOOP_DRYRUN=1` でdry-runモードを有効化
|
||||||
@ -286,7 +329,7 @@ pub fn joinir_if_in_loop_dryrun_enabled() -> bool {
|
|||||||
/// - OFF: PhiBuilderBox経路(既存フォールバック)
|
/// - OFF: PhiBuilderBox経路(既存フォールバック)
|
||||||
///
|
///
|
||||||
/// 前提条件:
|
/// 前提条件:
|
||||||
/// - NYASH_JOINIR_IF_SELECT=1(Phase 33基盤)
|
/// - JoinIR IfSelect 基盤(Phase 33)の有効化
|
||||||
/// - dry-runモードとは独立(HAKO_JOINIR_IF_IN_LOOP_DRYRUN)
|
/// - dry-runモードとは独立(HAKO_JOINIR_IF_IN_LOOP_DRYRUN)
|
||||||
///
|
///
|
||||||
/// デフォルト: OFF(安全第一)
|
/// デフォルト: OFF(安全第一)
|
||||||
@ -640,18 +683,29 @@ pub fn selfhost_read_tmp() -> bool {
|
|||||||
pub fn ny_compiler_stage3() -> bool {
|
pub fn ny_compiler_stage3() -> bool {
|
||||||
std::env::var("NYASH_NY_COMPILER_STAGE3").ok().as_deref() == Some("1")
|
std::env::var("NYASH_NY_COMPILER_STAGE3").ok().as_deref() == Some("1")
|
||||||
}
|
}
|
||||||
/// Core (Rust) parser Stage-3 gate
|
/// Core (Rust) parser Stage-3 gate (default ON).
|
||||||
/// When enabled, the Rust parser accepts Stage-3 surface (try/catch/finally, throw).
|
/// Precedence:
|
||||||
/// Default is OFF to keep Stage-2 stable.
|
/// 1) NYASH_FEATURES contains `stage3`/`parser-stage3`
|
||||||
|
/// 2) Legacy env aliases (NYASH_PARSER_STAGE3 / HAKO_PARSER_STAGE3)
|
||||||
|
/// 3) Default true (Stage-3 is standard syntax)
|
||||||
|
pub fn parser_stage3_enabled() -> bool {
|
||||||
|
if feature_stage3_enabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if let Some(v) = env_flag("NYASH_PARSER_STAGE3") {
|
||||||
|
warn_alias_once("NYASH_PARSER_STAGE3", "NYASH_FEATURES=stage3");
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
if let Some(v) = env_flag("HAKO_PARSER_STAGE3") {
|
||||||
|
warn_alias_once("HAKO_PARSER_STAGE3", "NYASH_FEATURES=stage3");
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
#[deprecated(note = "Use parser_stage3_enabled() instead")]
|
||||||
pub fn parser_stage3() -> bool {
|
pub fn parser_stage3() -> bool {
|
||||||
if std::env::var("NYASH_PARSER_STAGE3").ok().as_deref() == Some("1") {
|
parser_stage3_enabled()
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if std::env::var("HAKO_PARSER_STAGE3").ok().as_deref() == Some("1") {
|
|
||||||
warn_alias_once("HAKO_PARSER_STAGE3", "NYASH_PARSER_STAGE3");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parser gate for Block‑Postfix Catch acceptance
|
/// Parser gate for Block‑Postfix Catch acceptance
|
||||||
@ -660,7 +714,7 @@ pub fn parser_stage3() -> bool {
|
|||||||
/// a single `catch (...) { ... }` and/or `finally { ... }`, which is folded into
|
/// a single `catch (...) { ... }` and/or `finally { ... }`, which is folded into
|
||||||
/// ASTNode::TryCatch with the preceding block as the try body.
|
/// ASTNode::TryCatch with the preceding block as the try body.
|
||||||
pub fn block_postfix_catch() -> bool {
|
pub fn block_postfix_catch() -> bool {
|
||||||
std::env::var("NYASH_BLOCK_CATCH").ok().as_deref() == Some("1") || parser_stage3()
|
std::env::var("NYASH_BLOCK_CATCH").ok().as_deref() == Some("1") || parser_stage3_enabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bridge lowering: use Result-style try/throw lowering instead of MIR Catch/Throw
|
/// Bridge lowering: use Result-style try/throw lowering instead of MIR Catch/Throw
|
||||||
@ -674,7 +728,7 @@ pub fn try_result_mode() -> bool {
|
|||||||
/// Parser gate for method-level postfix catch/finally acceptance on method definitions.
|
/// Parser gate for method-level postfix catch/finally acceptance on method definitions.
|
||||||
/// Enabled when either NYASH_METHOD_CATCH=1 or Stage‑3 gate is on.
|
/// Enabled when either NYASH_METHOD_CATCH=1 or Stage‑3 gate is on.
|
||||||
pub fn method_catch() -> bool {
|
pub fn method_catch() -> bool {
|
||||||
std::env::var("NYASH_METHOD_CATCH").ok().as_deref() == Some("1") || parser_stage3()
|
std::env::var("NYASH_METHOD_CATCH").ok().as_deref() == Some("1") || parser_stage3_enabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Entry policy: allow top-level `main` resolution in addition to `Main.main`.
|
/// Entry policy: allow top-level `main` resolution in addition to `Main.main`.
|
||||||
@ -690,10 +744,10 @@ pub fn entry_allow_toplevel_main() -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Parser gate for expression-level postfix catch/cleanup acceptance.
|
/// Parser gate for expression-level postfix catch/cleanup acceptance.
|
||||||
/// Enabled when Stage-3 gate is on (NYASH_PARSER_STAGE3=1). Separate gate can
|
/// Enabled when Stage-3 gate is on (NYASH_FEATURES=stage3 or legacy aliases). Separate gate can
|
||||||
/// be introduced in future if needed, but we keep minimal toggles now.
|
/// be introduced in future if needed, but we keep minimal toggles now.
|
||||||
pub fn expr_postfix_catch() -> bool {
|
pub fn expr_postfix_catch() -> bool {
|
||||||
parser_stage3()
|
parser_stage3_enabled()
|
||||||
}
|
}
|
||||||
/// Parser gate for Unified Members (stored/computed/once/birth_once).
|
/// Parser gate for Unified Members (stored/computed/once/birth_once).
|
||||||
/// Default: ON during Phase-15 (set NYASH_ENABLE_UNIFIED_MEMBERS=0|false|off to disable).
|
/// Default: ON during Phase-15 (set NYASH_ENABLE_UNIFIED_MEMBERS=0|false|off to disable).
|
||||||
|
|||||||
@ -534,13 +534,13 @@ impl MirBuilder {
|
|||||||
let mut msg = format!("Undefined variable: {}", name);
|
let mut msg = format!("Undefined variable: {}", name);
|
||||||
|
|
||||||
// Stage-3 keyword diagnostic (local/flow/try/catch/throw)
|
// Stage-3 keyword diagnostic (local/flow/try/catch/throw)
|
||||||
if name == "local" && !crate::config::env::parser_stage3() {
|
if name == "local" && !crate::config::env::parser_stage3_enabled() {
|
||||||
msg.push_str("\nHint: 'local' is a Stage-3 keyword. Enable NYASH_PARSER_STAGE3=1 (and HAKO_PARSER_STAGE3=1 for Stage-B).");
|
msg.push_str("\nHint: 'local' is a Stage-3 keyword. Prefer NYASH_FEATURES=stage3 (legacy: NYASH_PARSER_STAGE3=1 / HAKO_PARSER_STAGE3=1 for Stage-B).");
|
||||||
msg.push_str("\nFor AotPrep verification, use tools/hakorune_emit_mir.sh which sets these automatically.");
|
msg.push_str("\nFor AotPrep verification, use tools/hakorune_emit_mir.sh which sets these automatically.");
|
||||||
} else if (name == "flow" || name == "try" || name == "catch" || name == "throw")
|
} else if (name == "flow" || name == "try" || name == "catch" || name == "throw")
|
||||||
&& !crate::config::env::parser_stage3()
|
&& !crate::config::env::parser_stage3_enabled()
|
||||||
{
|
{
|
||||||
msg.push_str(&format!("\nHint: '{}' is a Stage-3 keyword. Enable NYASH_PARSER_STAGE3=1 (and HAKO_PARSER_STAGE3=1 for Stage-B).", name));
|
msg.push_str(&format!("\nHint: '{}' is a Stage-3 keyword. Prefer NYASH_FEATURES=stage3 (legacy: NYASH_PARSER_STAGE3=1 / HAKO_PARSER_STAGE3=1 for Stage-B).", name));
|
||||||
}
|
}
|
||||||
|
|
||||||
let suggest = crate::using::simple_registry::suggest_using_for_symbol(&name);
|
let suggest = crate::using::simple_registry::suggest_using_for_symbol(&name);
|
||||||
|
|||||||
@ -213,6 +213,8 @@ impl MirBuilder {
|
|||||||
let pre_then_var_value: Option<ValueId> = None;
|
let pre_then_var_value: Option<ValueId> = None;
|
||||||
|
|
||||||
// Phase 61-4: JoinIR 経路試行(ループ外 If)
|
// Phase 61-4: JoinIR 経路試行(ループ外 If)
|
||||||
|
//
|
||||||
|
// - 実際の有効化判定は config::env 側のポリシー関数に集約する。
|
||||||
let joinir_enabled = crate::config::env::joinir_if_select_enabled();
|
let joinir_enabled = crate::config::env::joinir_if_select_enabled();
|
||||||
let joinir_toplevel = crate::config::env::joinir_if_toplevel_enabled();
|
let joinir_toplevel = crate::config::env::joinir_if_toplevel_enabled();
|
||||||
let joinir_dryrun = crate::config::env::joinir_if_toplevel_dryrun_enabled();
|
let joinir_dryrun = crate::config::env::joinir_if_toplevel_dryrun_enabled();
|
||||||
|
|||||||
@ -102,8 +102,10 @@ impl AstToJoinIrLowerer {
|
|||||||
}
|
}
|
||||||
"parse_loop" => {
|
"parse_loop" => {
|
||||||
// Phase 41-4: NestedIfMerge pattern (dev flag gated)
|
// Phase 41-4: NestedIfMerge pattern (dev flag gated)
|
||||||
// Guard: HAKO_JOINIR_NESTED_IF=1 を要求
|
// Guard: JoinIR dev + HAKO_JOINIR_NESTED_IF=1 を要求
|
||||||
if std::env::var("HAKO_JOINIR_NESTED_IF").ok().as_deref() == Some("1") {
|
if crate::config::env::joinir_dev_enabled()
|
||||||
|
&& std::env::var("HAKO_JOINIR_NESTED_IF").ok().as_deref() == Some("1")
|
||||||
|
{
|
||||||
self.lower_nested_if_pattern(program_json)
|
self.lower_nested_if_pattern(program_json)
|
||||||
} else {
|
} else {
|
||||||
// Dev flag が OFF の場合は panic(旧ルートにフォールバックするため)
|
// Dev flag が OFF の場合は panic(旧ルートにフォールバックするため)
|
||||||
@ -116,7 +118,9 @@ impl AstToJoinIrLowerer {
|
|||||||
"read_quoted_from" => {
|
"read_quoted_from" => {
|
||||||
// Phase 45: read_quoted_from pattern (dev flag gated)
|
// Phase 45: read_quoted_from pattern (dev flag gated)
|
||||||
// Guard if + Loop with break + accumulator
|
// Guard if + Loop with break + accumulator
|
||||||
if std::env::var("HAKO_JOINIR_READ_QUOTED").ok().as_deref() == Some("1") {
|
if crate::config::env::joinir_dev_enabled()
|
||||||
|
&& std::env::var("HAKO_JOINIR_READ_QUOTED").ok().as_deref() == Some("1")
|
||||||
|
{
|
||||||
self.lower_read_quoted_pattern(program_json)
|
self.lower_read_quoted_pattern(program_json)
|
||||||
} else {
|
} else {
|
||||||
panic!(
|
panic!(
|
||||||
|
|||||||
@ -120,7 +120,7 @@ pub fn is_joinir_if_toplevel_target(name: &str) -> bool {
|
|||||||
/// - IfMergeTest.* (Phase 33-7)
|
/// - IfMergeTest.* (Phase 33-7)
|
||||||
/// - JsonShapeToMap._read_value_from_pair/1 (Phase 33-4 Stage-1)
|
/// - JsonShapeToMap._read_value_from_pair/1 (Phase 33-4 Stage-1)
|
||||||
/// - Stage1JsonScannerBox.value_start_after_key_pos/2 (Phase 33-4 Stage-B)
|
/// - Stage1JsonScannerBox.value_start_after_key_pos/2 (Phase 33-4 Stage-B)
|
||||||
/// - Requires NYASH_JOINIR_IF_SELECT=1 environment variable
|
/// - Requires JoinIR If-select toggle (HAKO_JOINIR_IF_SELECT / joinir_if_select_enabled)
|
||||||
/// - Falls back to traditional if_phi on pattern mismatch
|
/// - Falls back to traditional if_phi on pattern mismatch
|
||||||
///
|
///
|
||||||
/// Pattern selection:
|
/// Pattern selection:
|
||||||
@ -138,7 +138,13 @@ pub fn try_lower_if_to_joinir(
|
|||||||
debug: bool,
|
debug: bool,
|
||||||
context: Option<&if_phi_context::IfPhiContext>, // Phase 61-1: If-in-loop context
|
context: Option<&if_phi_context::IfPhiContext>, // Phase 61-1: If-in-loop context
|
||||||
) -> Option<JoinInst> {
|
) -> Option<JoinInst> {
|
||||||
// 1. dev トグルチェック
|
// 1. dev/Core トグルチェック
|
||||||
|
//
|
||||||
|
// - Core: joinir_core_enabled() / joinir_if_select_enabled()
|
||||||
|
// - Dev: joinir_dev_enabled()(詳細ログ等)
|
||||||
|
//
|
||||||
|
// 実際の挙動切り替えは joinir_if_select_enabled() に集約し、
|
||||||
|
// Core/Dev ポリシーは config::env 側で判定する。
|
||||||
if !crate::config::env::joinir_if_select_enabled() {
|
if !crate::config::env::joinir_if_select_enabled() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use crate::config::env::{joinir_experiment_enabled, joinir_vm_bridge_enabled};
|
use crate::config::env::{joinir_core_enabled, joinir_vm_bridge_enabled};
|
||||||
|
|
||||||
/// JoinIR VM ブリッジの環境フラグ
|
/// JoinIR VM ブリッジの環境フラグ
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
@ -11,7 +11,7 @@ impl JoinIrEnvFlags {
|
|||||||
/// 現在の環境変数からフラグを取得
|
/// 現在の環境変数からフラグを取得
|
||||||
pub fn from_env() -> Self {
|
pub fn from_env() -> Self {
|
||||||
Self {
|
Self {
|
||||||
joinir_experiment: joinir_experiment_enabled(),
|
joinir_experiment: joinir_core_enabled(),
|
||||||
vm_bridge: joinir_vm_bridge_enabled(),
|
vm_bridge: joinir_vm_bridge_enabled(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,10 +68,11 @@ impl IfInLoopPhiEmitter {
|
|||||||
if_shape: &IfShape,
|
if_shape: &IfShape,
|
||||||
) -> Result<usize, String> {
|
) -> Result<usize, String> {
|
||||||
let mut phi_count = 0;
|
let mut phi_count = 0;
|
||||||
let trace_on = std::env::var("HAKO_JOINIR_IF_IN_LOOP_TRACE")
|
let trace_on = crate::config::env::joinir_dev_enabled()
|
||||||
.ok()
|
&& std::env::var("HAKO_JOINIR_IF_IN_LOOP_TRACE")
|
||||||
.as_deref()
|
.ok()
|
||||||
== Some("1");
|
.as_deref()
|
||||||
|
== Some("1");
|
||||||
|
|
||||||
if trace_on {
|
if trace_on {
|
||||||
eprintln!("[Phase 61-3] IfInLoopPhiEmitter::emit_header_phis start");
|
eprintln!("[Phase 61-3] IfInLoopPhiEmitter::emit_header_phis start");
|
||||||
@ -179,10 +180,11 @@ impl IfInLoopPhiEmitter {
|
|||||||
if_shape: &IfShape,
|
if_shape: &IfShape,
|
||||||
) -> Result<usize, String> {
|
) -> Result<usize, String> {
|
||||||
let mut phi_count = 0;
|
let mut phi_count = 0;
|
||||||
let trace_on = std::env::var("HAKO_JOINIR_IF_TOPLEVEL_TRACE")
|
let trace_on = crate::config::env::joinir_dev_enabled()
|
||||||
.ok()
|
&& std::env::var("HAKO_JOINIR_IF_TOPLEVEL_TRACE")
|
||||||
.as_deref()
|
.ok()
|
||||||
== Some("1");
|
.as_deref()
|
||||||
|
== Some("1");
|
||||||
|
|
||||||
if trace_on {
|
if trace_on {
|
||||||
eprintln!("[Phase 61-4] IfInLoopPhiEmitter::emit_toplevel_phis start");
|
eprintln!("[Phase 61-4] IfInLoopPhiEmitter::emit_toplevel_phis start");
|
||||||
|
|||||||
@ -79,7 +79,8 @@ impl<'a> JoinIRIfPhiSelector<'a> {
|
|||||||
carrier_names: BTreeSet<String>,
|
carrier_names: BTreeSet<String>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let context = IfPhiContext::for_loop_body(carrier_names);
|
let context = IfPhiContext::for_loop_body(carrier_names);
|
||||||
let dryrun = crate::config::env::joinir_if_in_loop_dryrun_enabled();
|
let dryrun = crate::config::env::joinir_dev_enabled()
|
||||||
|
&& crate::config::env::joinir_if_in_loop_dryrun_enabled();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
context,
|
context,
|
||||||
@ -113,8 +114,9 @@ impl<'a> JoinIRIfPhiSelector<'a> {
|
|||||||
self.log_dryrun(&join_inst, &phi_spec);
|
self.log_dryrun(&join_inst, &phi_spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 本番経路有効判定
|
// 本番経路有効判定(Core + フラグ)
|
||||||
let success = crate::config::env::joinir_if_in_loop_enable();
|
let success = crate::config::env::joinir_core_enabled()
|
||||||
|
&& crate::config::env::joinir_if_in_loop_enable();
|
||||||
|
|
||||||
JoinIRResult {
|
JoinIRResult {
|
||||||
success,
|
success,
|
||||||
|
|||||||
@ -4,9 +4,9 @@ use crate::mir::lowerers::LoweringError;
|
|||||||
|
|
||||||
/// Stage-3 loop lowering helpers (while / for-range).
|
/// Stage-3 loop lowering helpers (while / for-range).
|
||||||
///
|
///
|
||||||
/// Enabled only when NYASH_PARSER_STAGE3 / HAKO_PARSER_STAGE3 are set on the
|
/// Enabled when Stage-3 parsing is active (default ON via NYASH_FEATURES=stage3,
|
||||||
/// parser side and corresponding AST nodes are produced. This module provides
|
/// legacy NYASH_PARSER_STAGE3/HAKO_PARSER_STAGE3 still accepted). This module
|
||||||
/// minimal lowering support so that Stage-3 style loops used by tools like
|
/// provides minimal lowering support so Stage-3 style loops used by tools like
|
||||||
/// hako_check can execute on the existing MIR interpreter without modifying
|
/// hako_check can execute on the existing MIR interpreter without modifying
|
||||||
/// default behavior when Stage-3 is disabled.
|
/// default behavior when Stage-3 is disabled.
|
||||||
pub struct LoopLowerer;
|
pub struct LoopLowerer;
|
||||||
|
|||||||
@ -65,11 +65,10 @@ pub(crate) struct LoopBypassFlags {
|
|||||||
/// # Returns
|
/// # Returns
|
||||||
/// - `LoopBypassFlags` - Header/Exit バイパスの有効状態
|
/// - `LoopBypassFlags` - Header/Exit バイパスの有効状態
|
||||||
pub(crate) fn get_loop_bypass_flags(fn_name: &str) -> LoopBypassFlags {
|
pub(crate) fn get_loop_bypass_flags(fn_name: &str) -> LoopBypassFlags {
|
||||||
let joinir_exp = crate::mir::join_ir::env_flag_is_1("NYASH_JOINIR_EXPERIMENT");
|
|
||||||
let header_exp = crate::mir::join_ir::env_flag_is_1("NYASH_JOINIR_HEADER_EXP");
|
|
||||||
|
|
||||||
LoopBypassFlags {
|
LoopBypassFlags {
|
||||||
header: joinir_exp && header_exp && is_joinir_header_bypass_target(fn_name),
|
// Phase 73: Header φ バイパス実験は廃止(常時 OFF)。
|
||||||
|
// LoopScopeShape/JoinIR 本線でのみ検証。
|
||||||
|
header: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,12 +79,12 @@ pub(crate) fn get_loop_bypass_flags(fn_name: &str) -> LoopBypassFlags {
|
|||||||
/// JoinIR Exit φ バイパスが有効かどうか
|
/// JoinIR Exit φ バイパスが有効かどうか
|
||||||
///
|
///
|
||||||
/// - NYASH_JOINIR_EXPERIMENT=1
|
/// - NYASH_JOINIR_EXPERIMENT=1
|
||||||
/// - NYASH_JOINIR_EXIT_EXP=1
|
/// - (legacy) Exit φ バイパス用の実験フラグ
|
||||||
///
|
///
|
||||||
/// の両方が立っているときだけ true。
|
/// の両方が立っているときだけ true。
|
||||||
pub(crate) fn joinir_exit_bypass_enabled() -> bool {
|
pub(crate) fn joinir_exit_bypass_enabled() -> bool {
|
||||||
crate::mir::join_ir::env_flag_is_1("NYASH_JOINIR_EXPERIMENT")
|
// Phase 73: Exit φ バイパス実験は廃止(常時 OFF)。JoinIR 経路は LoopScopeShape/Exit φ 本線で検証。
|
||||||
&& crate::mir::join_ir::env_flag_is_1("NYASH_JOINIR_EXIT_EXP")
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Exit φ バイパス対象の関数かどうか
|
/// Exit φ バイパス対象の関数かどうか
|
||||||
|
|||||||
@ -11,7 +11,7 @@ pub(crate) fn wrap_with_optional_postfix(
|
|||||||
p: &mut NyashParser,
|
p: &mut NyashParser,
|
||||||
body: Vec<ASTNode>,
|
body: Vec<ASTNode>,
|
||||||
) -> Result<Vec<ASTNode>, ParseError> {
|
) -> Result<Vec<ASTNode>, ParseError> {
|
||||||
if !(crate::config::env::parser_stage3()
|
if !(crate::config::env::parser_stage3_enabled()
|
||||||
&& (p.match_token(&TokenType::CATCH) || p.match_token(&TokenType::CLEANUP)))
|
&& (p.match_token(&TokenType::CATCH) || p.match_token(&TokenType::CLEANUP)))
|
||||||
{
|
{
|
||||||
return Ok(body);
|
return Ok(body);
|
||||||
|
|||||||
@ -121,7 +121,7 @@ pub fn parse_box_declaration(p: &mut NyashParser) -> Result<ASTNode, ParseError>
|
|||||||
let mut last_method_name: Option<String> = None;
|
let mut last_method_name: Option<String> = None;
|
||||||
while !p.match_token(&TokenType::RBRACE) && !p.is_at_end() {
|
while !p.match_token(&TokenType::RBRACE) && !p.is_at_end() {
|
||||||
// 分類(段階移行用の観測): 将来の分岐移譲のための前処理
|
// 分類(段階移行用の観測): 将来の分岐移譲のための前処理
|
||||||
if crate::config::env::parser_stage3() {
|
if crate::config::env::parser_stage3_enabled() {
|
||||||
if let Ok(kind) = members::common::classify_member(p) {
|
if let Ok(kind) = members::common::classify_member(p) {
|
||||||
let _ = kind; // 現段階では観測のみ(無副作用)
|
let _ = kind; // 現段階では観測のみ(無副作用)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,10 +159,10 @@ impl NyashParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// 文字列からパース (トークナイズ + パース)
|
/// 文字列からパース (トークナイズ + パース)
|
||||||
/// Note: Reads environment variables (NYASH_PARSER_STAGE3, etc.) for using-chain parsing
|
/// Note: Reads parser_stage3_enabled() (NYASH_FEATURES=stage3 or legacy env) for using-chain parsing
|
||||||
pub fn parse_from_string(input: impl Into<String>) -> Result<ASTNode, ParseError> {
|
pub fn parse_from_string(input: impl Into<String>) -> Result<ASTNode, ParseError> {
|
||||||
// Ensure Stage-3 features are enabled when parsing using-chain files
|
// Ensure Stage-3 features are enabled when parsing using-chain files
|
||||||
// if the parent process has NYASH_PARSER_STAGE3=1 set
|
// when parent requested Stage-3 parsing via NYASH_FEATURES/legacy env
|
||||||
Self::parse_from_string_with_fuel(input, Some(100_000))
|
Self::parse_from_string_with_fuel(input, Some(100_000))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -192,16 +192,7 @@ impl NyashParser {
|
|||||||
|
|
||||||
/// Helper: env-gated Stage-3 enable check.
|
/// Helper: env-gated Stage-3 enable check.
|
||||||
fn is_stage3_enabled() -> bool {
|
fn is_stage3_enabled() -> bool {
|
||||||
let on = |key: &str| {
|
crate::config::env::parser_stage3_enabled()
|
||||||
std::env::var(key)
|
|
||||||
.ok()
|
|
||||||
.map(|v| {
|
|
||||||
let lv = v.to_ascii_lowercase();
|
|
||||||
lv == "1" || lv == "true" || lv == "on"
|
|
||||||
})
|
|
||||||
.unwrap_or(false)
|
|
||||||
};
|
|
||||||
on("NYASH_PARSER_STAGE3") || on("HAKO_PARSER_STAGE3")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse break statement
|
/// Parse break statement
|
||||||
|
|||||||
@ -43,6 +43,12 @@ pub fn apply_core_wrapper_env(cmd: &mut std::process::Command) {
|
|||||||
// When selfhost builder uses `using` to load modules, the inline compiler
|
// When selfhost builder uses `using` to load modules, the inline compiler
|
||||||
// needs Stage-3 support for `local` keyword. Without this, we get:
|
// needs Stage-3 support for `local` keyword. Without this, we get:
|
||||||
// "Undefined variable: local" in nested compilation.
|
// "Undefined variable: local" in nested compilation.
|
||||||
|
// Preferred propagation: NYASH_FEATURES carries Stage-3 (legacy envs kept for compatibility)
|
||||||
|
if let Ok(val) = std::env::var("NYASH_FEATURES") {
|
||||||
|
cmd.env("NYASH_FEATURES", val);
|
||||||
|
} else if crate::config::env::parser_stage3_enabled() {
|
||||||
|
cmd.env("NYASH_FEATURES", "stage3");
|
||||||
|
}
|
||||||
if let Ok(val) = std::env::var("NYASH_PARSER_STAGE3") {
|
if let Ok(val) = std::env::var("NYASH_PARSER_STAGE3") {
|
||||||
cmd.env("NYASH_PARSER_STAGE3", val);
|
cmd.env("NYASH_PARSER_STAGE3", val);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -169,11 +169,8 @@ impl NyashRunner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if trace
|
if trace && crate::config::env::parser_stage3_enabled() {
|
||||||
&& (std::env::var("NYASH_PARSER_STAGE3").ok() == Some("1".into())
|
eprintln!("[vm] Stage-3: enabled (NYASH_FEATURES/legacy env) for {}", filename);
|
||||||
|| std::env::var("HAKO_PARSER_STAGE3").ok() == Some("1".into()))
|
|
||||||
{
|
|
||||||
eprintln!("[vm] Stage-3: enabled (env) for {}", filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
||||||
@ -500,8 +497,10 @@ impl NyashRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Phase 33-10.0: If lowering ドライラン統合(箱化版)
|
// Phase 33-10.0: If lowering ドライラン統合(箱化版)
|
||||||
// HAKO_JOINIR_IF_SELECT=1 で有効化、IfLoweringDryRunner を使用
|
// JoinIR dev + IfSelect 有効時に IfLoweringDryRunner を使用
|
||||||
if crate::config::env::joinir_if_select_enabled() {
|
if crate::config::env::joinir_dev_enabled()
|
||||||
|
&& crate::config::env::joinir_if_select_enabled()
|
||||||
|
{
|
||||||
let debug_level = crate::config::env::joinir_debug_level();
|
let debug_level = crate::config::env::joinir_debug_level();
|
||||||
let runner =
|
let runner =
|
||||||
crate::mir::join_ir::lowering::if_dry_runner::IfLoweringDryRunner::new(debug_level);
|
crate::mir::join_ir::lowering::if_dry_runner::IfLoweringDryRunner::new(debug_level);
|
||||||
|
|||||||
@ -86,11 +86,11 @@ impl NyashRunner {
|
|||||||
code2 = crate::runner::modes::common_util::hako::strip_local_decl(&code2);
|
code2 = crate::runner::modes::common_util::hako::strip_local_decl(&code2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if trace
|
if trace && crate::config::env::parser_stage3_enabled() {
|
||||||
&& (std::env::var("NYASH_PARSER_STAGE3").ok() == Some("1".into())
|
eprintln!(
|
||||||
|| std::env::var("HAKO_PARSER_STAGE3").ok() == Some("1".into()))
|
"[vm-fallback] Stage-3: enabled (NYASH_FEATURES/legacy env) for {}",
|
||||||
{
|
filename
|
||||||
eprintln!("[vm-fallback] Stage-3: enabled (env) for {}", filename);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
// Fail‑Fast (opt‑in): Hako 構文を Nyash VM 経路で実行しない
|
||||||
|
|||||||
@ -12,7 +12,7 @@ use std::process::Command;
|
|||||||
///
|
///
|
||||||
/// Sets defaults for:
|
/// Sets defaults for:
|
||||||
/// - Runtime behavior (NYASH_NYRT_SILENT_RESULT, NYASH_DISABLE_PLUGINS, etc.)
|
/// - Runtime behavior (NYASH_NYRT_SILENT_RESULT, NYASH_DISABLE_PLUGINS, etc.)
|
||||||
/// - Parser toggles (NYASH_PARSER_STAGE3, NYASH_ENABLE_USING, etc.)
|
/// - Parser toggles (NYASH_FEATURES=stage3, legacy NYASH_PARSER_STAGE3, NYASH_ENABLE_USING, etc.)
|
||||||
/// - Stage-B configuration (HAKO_STAGEB_APPLY_USINGS, HAKO_STAGEB_MODULES_LIST, etc.)
|
/// - Stage-B configuration (HAKO_STAGEB_APPLY_USINGS, HAKO_STAGEB_MODULES_LIST, etc.)
|
||||||
pub(super) fn configure_stage1_env(
|
pub(super) fn configure_stage1_env(
|
||||||
cmd: &mut Command,
|
cmd: &mut Command,
|
||||||
@ -87,17 +87,49 @@ pub(super) fn configure_stage1_env(
|
|||||||
if env::enable_using() { "1" } else { "0" },
|
if env::enable_using() { "1" } else { "0" },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if std::env::var("NYASH_PARSER_STAGE3").is_err() {
|
// Stage-3 gate (default ON): prefer NYASH_FEATURES for propagation, but keep
|
||||||
cmd.env(
|
// legacy envs if parent explicitly set them.
|
||||||
"NYASH_PARSER_STAGE3",
|
let stage3_enabled = env::parser_stage3_enabled();
|
||||||
if env::parser_stage3() { "1" } else { "0" },
|
let merge_feature = |current: &str, feature: &str| -> String {
|
||||||
);
|
let mut list: Vec<String> = current
|
||||||
|
.split(',')
|
||||||
|
.filter_map(|s| {
|
||||||
|
let trimmed = s.trim();
|
||||||
|
if trimmed.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(trimmed.to_string())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let normalized_feature = feature.replace(['-', '_'], "");
|
||||||
|
let contains = list.iter().any(|f| {
|
||||||
|
let n = f.to_ascii_lowercase().replace(['-', '_'], "");
|
||||||
|
n == normalized_feature
|
||||||
|
});
|
||||||
|
if !contains {
|
||||||
|
list.push(feature.to_string());
|
||||||
|
}
|
||||||
|
list.join(",")
|
||||||
|
};
|
||||||
|
match std::env::var("NYASH_FEATURES") {
|
||||||
|
Ok(current) => {
|
||||||
|
if stage3_enabled {
|
||||||
|
cmd.env("NYASH_FEATURES", merge_feature(¤t, "stage3"));
|
||||||
|
} else {
|
||||||
|
cmd.env("NYASH_FEATURES", current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) if stage3_enabled => {
|
||||||
|
cmd.env("NYASH_FEATURES", "stage3");
|
||||||
|
}
|
||||||
|
Err(_) => {}
|
||||||
}
|
}
|
||||||
if std::env::var("HAKO_PARSER_STAGE3").is_err() {
|
if let Ok(val) = std::env::var("NYASH_PARSER_STAGE3") {
|
||||||
cmd.env(
|
cmd.env("NYASH_PARSER_STAGE3", val);
|
||||||
"HAKO_PARSER_STAGE3",
|
}
|
||||||
if env::parser_stage3() { "1" } else { "0" },
|
if let Ok(val) = std::env::var("HAKO_PARSER_STAGE3") {
|
||||||
);
|
cmd.env("HAKO_PARSER_STAGE3", val);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modules list
|
// Modules list
|
||||||
|
|||||||
@ -26,8 +26,7 @@ fn phase49_joinir_mainline_pipeline_smoke() {
|
|||||||
// Phase 49 mainline route は dev フラグで制御
|
// Phase 49 mainline route は dev フラグで制御
|
||||||
std::env::set_var("HAKO_JOINIR_PRINT_TOKENS_MAIN", "1");
|
std::env::set_var("HAKO_JOINIR_PRINT_TOKENS_MAIN", "1");
|
||||||
std::env::set_var("NYASH_JOINIR_MAINLINE_DEBUG", "1");
|
std::env::set_var("NYASH_JOINIR_MAINLINE_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
// print_tokens を含む最小限の JsonTokenizer 定義
|
// print_tokens を含む最小限の JsonTokenizer 定義
|
||||||
@ -77,8 +76,7 @@ static box Main {
|
|||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
||||||
std::env::remove_var("NYASH_JOINIR_MAINLINE_DEBUG");
|
std::env::remove_var("NYASH_JOINIR_MAINLINE_DEBUG");
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,8 +85,7 @@ static box Main {
|
|||||||
fn phase49_joinir_mainline_fallback_without_flag() {
|
fn phase49_joinir_mainline_fallback_without_flag() {
|
||||||
// dev フラグ OFF
|
// dev フラグ OFF
|
||||||
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -128,8 +125,7 @@ static box Main {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,8 +162,7 @@ static box Main {
|
|||||||
|
|
||||||
// Route A: Legacy path (flag OFF)
|
// Route A: Legacy path (flag OFF)
|
||||||
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let ast_a: ASTNode =
|
let ast_a: ASTNode =
|
||||||
@ -183,9 +178,8 @@ static box Main {
|
|||||||
let blocks_a: usize = module_a.functions.values().map(|f| f.blocks.len()).sum();
|
let blocks_a: usize = module_a.functions.values().map(|f| f.blocks.len()).sum();
|
||||||
|
|
||||||
// Route B: JoinIR Frontend path (flag ON)
|
// Route B: JoinIR Frontend path (flag ON)
|
||||||
// Re-set parser flags to ensure they're active
|
// Re-set flags to ensure they're active
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("HAKO_JOINIR_PRINT_TOKENS_MAIN", "1");
|
std::env::set_var("HAKO_JOINIR_PRINT_TOKENS_MAIN", "1");
|
||||||
|
|
||||||
@ -213,8 +207,7 @@ static box Main {
|
|||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
std::env::remove_var("HAKO_JOINIR_PRINT_TOKENS_MAIN");
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,8 +222,7 @@ fn phase49_joinir_array_filter_smoke() {
|
|||||||
// Phase 49-4 mainline route は dev フラグで制御
|
// Phase 49-4 mainline route は dev フラグで制御
|
||||||
std::env::set_var("HAKO_JOINIR_ARRAY_FILTER_MAIN", "1");
|
std::env::set_var("HAKO_JOINIR_ARRAY_FILTER_MAIN", "1");
|
||||||
std::env::set_var("NYASH_JOINIR_MAINLINE_DEBUG", "1");
|
std::env::set_var("NYASH_JOINIR_MAINLINE_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
// ArrayExtBox.filter 簡易実装(if-in-loop パターン)
|
// ArrayExtBox.filter 簡易実装(if-in-loop パターン)
|
||||||
@ -274,8 +266,7 @@ static box Main {
|
|||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
||||||
std::env::remove_var("NYASH_JOINIR_MAINLINE_DEBUG");
|
std::env::remove_var("NYASH_JOINIR_MAINLINE_DEBUG");
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,8 +275,7 @@ static box Main {
|
|||||||
fn phase49_joinir_array_filter_fallback() {
|
fn phase49_joinir_array_filter_fallback() {
|
||||||
// dev フラグ OFF
|
// dev フラグ OFF
|
||||||
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -325,8 +315,7 @@ static box Main {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,8 +349,7 @@ static box Main {
|
|||||||
|
|
||||||
// Route A: Legacy path (flag OFF)
|
// Route A: Legacy path (flag OFF)
|
||||||
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let ast_a: ASTNode =
|
let ast_a: ASTNode =
|
||||||
@ -377,8 +365,7 @@ static box Main {
|
|||||||
let blocks_a: usize = module_a.functions.values().map(|f| f.blocks.len()).sum();
|
let blocks_a: usize = module_a.functions.values().map(|f| f.blocks.len()).sum();
|
||||||
|
|
||||||
// Route B: JoinIR Frontend path (flag ON)
|
// Route B: JoinIR Frontend path (flag ON)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("HAKO_JOINIR_ARRAY_FILTER_MAIN", "1");
|
std::env::set_var("HAKO_JOINIR_ARRAY_FILTER_MAIN", "1");
|
||||||
|
|
||||||
@ -402,7 +389,6 @@ static box Main {
|
|||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
std::env::remove_var("HAKO_JOINIR_ARRAY_FILTER_MAIN");
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -307,8 +307,7 @@ impl SnapshotCase {
|
|||||||
/// ケースに対応する JoinIR JSON を生成
|
/// ケースに対応する JoinIR JSON を生成
|
||||||
fn generate_joinir_json(case: SnapshotCase) -> Option<String> {
|
fn generate_joinir_json(case: SnapshotCase) -> Option<String> {
|
||||||
// Stage-3 parser を有効化
|
// Stage-3 parser を有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let src = std::fs::read_to_string(case.source_file()).ok()?;
|
let src = std::fs::read_to_string(case.source_file()).ok()?;
|
||||||
|
|
||||||
@ -463,8 +462,7 @@ use crate::mir::join_ir_vm_bridge::convert_joinir_to_mir;
|
|||||||
#[test]
|
#[test]
|
||||||
fn joinir_stageb_body_structure_test() {
|
fn joinir_stageb_body_structure_test() {
|
||||||
// Stage-3 parser を有効化
|
// Stage-3 parser を有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let src = match std::fs::read_to_string("apps/tests/stageb_body_extract_minimal.hako") {
|
let src = match std::fs::read_to_string("apps/tests/stageb_body_extract_minimal.hako") {
|
||||||
Ok(s) => s,
|
Ok(s) => s,
|
||||||
@ -552,8 +550,7 @@ fn joinir_stageb_body_structure_test() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn joinir_stageb_funcscanner_structure_test() {
|
fn joinir_stageb_funcscanner_structure_test() {
|
||||||
// Stage-3 parser を有効化
|
// Stage-3 parser を有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let src = match std::fs::read_to_string("apps/tests/stageb_funcscanner_scan_boxes_minimal.hako")
|
let src = match std::fs::read_to_string("apps/tests/stageb_funcscanner_scan_boxes_minimal.hako")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -28,8 +28,7 @@ fn joinir_runner_minimal_skip_ws_executes() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
// 無限ループ検出のため、実験テストではステップ上限を小さめに設定しておく。
|
// 無限ループ検出のため、実験テストではステップ上限を小さめに設定しておく。
|
||||||
// 0 は「上限なし」なので、ここでは明示的な上限を使う。
|
// 0 は「上限なし」なので、ここでは明示的な上限を使う。
|
||||||
@ -75,8 +74,7 @@ static box Runner {
|
|||||||
other => panic!("JoinIR runner returned non-int value: {:?}", other),
|
other => panic!("JoinIR runner returned non-int value: {:?}", other),
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
||||||
}
|
}
|
||||||
@ -88,8 +86,7 @@ fn joinir_runner_funcscanner_trim_executes() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
@ -137,8 +134,7 @@ static box Runner {
|
|||||||
other => panic!("JoinIR runner returned non-string value: {:?}", other),
|
other => panic!("JoinIR runner returned non-string value: {:?}", other),
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_ENABLE_USING");
|
std::env::remove_var("NYASH_ENABLE_USING");
|
||||||
std::env::remove_var("HAKO_ENABLE_USING");
|
std::env::remove_var("HAKO_ENABLE_USING");
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
|
|||||||
@ -35,8 +35,7 @@ fn joinir_vm_bridge_skip_ws_matches_direct_vm() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
||||||
|
|
||||||
@ -97,8 +96,7 @@ static box Runner {
|
|||||||
other => panic!("JoinIR VM bridge returned non-int value: {:?}", other),
|
other => panic!("JoinIR VM bridge returned non-int value: {:?}", other),
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,8 +109,7 @@ fn joinir_vm_bridge_stage1_usingresolver_empty_entries() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stage-3 parser 有効化
|
// Stage-3 parser 有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
||||||
|
|
||||||
@ -181,8 +180,7 @@ fn joinir_vm_bridge_stage1_usingresolver_empty_entries() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
||||||
}
|
}
|
||||||
@ -195,8 +193,7 @@ fn joinir_vm_bridge_stage1_usingresolver_with_entries() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 環境変数を各テストで再設定(並列テスト対策)
|
// 環境変数を各テストで再設定(並列テスト対策)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
||||||
|
|
||||||
@ -252,8 +249,7 @@ fn joinir_vm_bridge_stage1_usingresolver_with_entries() {
|
|||||||
eprintln!("[joinir_vm_bridge_test/stage1] ✅ With entries test passed");
|
eprintln!("[joinir_vm_bridge_test/stage1] ✅ With entries test passed");
|
||||||
|
|
||||||
// クリーンアップ
|
// クリーンアップ
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
||||||
}
|
}
|
||||||
@ -267,8 +263,7 @@ fn joinir_vm_bridge_stage1_usingresolver_route_b_execution() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_SOURCE}");
|
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_SOURCE}");
|
||||||
@ -333,8 +328,7 @@ fn joinir_vm_bridge_stage1_usingresolver_route_b_execution() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,8 +341,7 @@ fn joinir_vm_bridge_stage1_usingresolver_route_b_with_entries() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_WITH_ENTRIES_SOURCE}");
|
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_WITH_ENTRIES_SOURCE}");
|
||||||
@ -421,8 +414,7 @@ fn joinir_vm_bridge_stage1_usingresolver_route_b_with_entries() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,8 +423,7 @@ fn joinir_vm_bridge_stage1_usingresolver_lowering_sanity() {
|
|||||||
// 常時実行:lowering が正しく動作するかの基本検証
|
// 常時実行:lowering が正しく動作するかの基本検証
|
||||||
// (実行はしない、構造のみ確認)
|
// (実行はしない、構造のみ確認)
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_SOURCE}");
|
let full_src = format!("{STAGE1_USINGRESOLVER_SOURCE}\n{RUNNER_SOURCE}");
|
||||||
|
|
||||||
@ -454,6 +445,5 @@ fn joinir_vm_bridge_stage1_usingresolver_lowering_sanity() {
|
|||||||
let jm = join_module.unwrap();
|
let jm = join_module.unwrap();
|
||||||
assert_eq!(jm.functions.len(), 2, "Expected 2 JoinIR functions");
|
assert_eq!(jm.functions.len(), 2, "Expected 2 JoinIR functions");
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -71,8 +71,7 @@ fn joinir_vm_bridge_trim_matches_direct_vm() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
std::env::set_var("NYASH_VM_MAX_STEPS", "100000");
|
||||||
|
|
||||||
@ -137,8 +136,7 @@ static box Runner {
|
|||||||
other => panic!("JoinIR VM bridge returned non-string value: {:?}", other),
|
other => panic!("JoinIR VM bridge returned non-string value: {:?}", other),
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
std::env::remove_var("NYASH_VM_MAX_STEPS");
|
||||||
}
|
}
|
||||||
@ -150,8 +148,7 @@ fn joinir_vm_bridge_trim_edge_cases() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
// Test cases: (input, expected_output)
|
// Test cases: (input, expected_output)
|
||||||
@ -168,8 +165,7 @@ fn joinir_vm_bridge_trim_edge_cases() {
|
|||||||
for (input, expected) in test_cases {
|
for (input, expected) in test_cases {
|
||||||
// Re-set environment variables at each iteration to avoid race conditions
|
// Re-set environment variables at each iteration to avoid race conditions
|
||||||
// with parallel test execution
|
// with parallel test execution
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
|
|
||||||
let runner = format!(
|
let runner = format!(
|
||||||
@ -215,7 +211,6 @@ static box Runner {{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,8 +41,7 @@ fn mir_joinir_funcscanner_append_defs_auto_lowering() {
|
|||||||
// Step 1: MIR までコンパイル
|
// Step 1: MIR までコンパイル
|
||||||
// Phase 27.14: Minimal .hako file to avoid complex dependencies
|
// Phase 27.14: Minimal .hako file to avoid complex dependencies
|
||||||
// Stage-3 parser を有効化(local キーワード対応)
|
// Stage-3 parser を有効化(local キーワード対応)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/funcscanner_append_defs_minimal.hako";
|
let test_file = "apps/tests/funcscanner_append_defs_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
@ -181,8 +180,7 @@ fn mir_joinir_funcscanner_append_defs_generic_matches_handwritten() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/funcscanner_append_defs_minimal.hako";
|
let test_file = "apps/tests/funcscanner_append_defs_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -10,11 +10,10 @@
|
|||||||
// - デフォルトでは #[ignore] にしておいて手動実行用にする
|
// - デフォルトでは #[ignore] にしておいて手動実行用にする
|
||||||
// - 環境変数 NYASH_JOINIR_EXPERIMENT=1 で実験モード有効化
|
// - 環境変数 NYASH_JOINIR_EXPERIMENT=1 で実験モード有効化
|
||||||
//
|
//
|
||||||
// Phase 27.4-C 対応:
|
// Phase 27.4-C 対応(現状メモのみ):
|
||||||
// - このテストは JoinIR 変換のみを検証(VM 実行なし)
|
// - このテストは JoinIR 変換のみを検証(VM 実行なし)
|
||||||
// - NYASH_JOINIR_HEADER_EXP=1 を併用すると Header φ bypass が有効化される
|
// - かつては Header φ bypass を有効化する JoinIR 実験フラグがあったが、
|
||||||
// - bypass 時は MIR に Header φ が生成されないが、このテストでは JoinIR のみ検証するため問題なし
|
// Phase 73 時点では削除済み(常時 OFF)となっている。
|
||||||
// - 将来的に JoinIR runner 実行を追加する際は、bypass モードでも正しく動作することを確認する
|
|
||||||
//
|
//
|
||||||
// Phase 27.5 対応:
|
// Phase 27.5 対応:
|
||||||
// - このテストは Header φ だけでなく、Exit φ(e の合流+substring(b, e) 呼び出し)も JoinIR で k_exit として表現できることを検証
|
// - このテストは Header φ だけでなく、Exit φ(e の合流+substring(b, e) 呼び出し)も JoinIR で k_exit として表現できることを検証
|
||||||
@ -39,8 +38,7 @@ fn mir_joinir_funcscanner_trim_auto_lowering() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stage-3 parser を有効化(local キーワード対応)
|
// Stage-3 parser を有効化(local キーワード対応)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
|
|
||||||
@ -137,8 +135,6 @@ fn mir_joinir_funcscanner_trim_generic_matches_handwritten() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
|
|
||||||
|
|||||||
@ -129,7 +129,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_if_select_pattern_matching() {
|
fn test_if_select_pattern_matching() {
|
||||||
// ==== 1. Simple pattern (env ON) ====
|
// ==== 1. Simple pattern (env ON) ====
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
let func = create_simple_pattern_mir();
|
let func = create_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -185,21 +185,18 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ==== 3. Disabled by default (env OFF) ====
|
// ==== 3. Disabled by default (env OFF) ====
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
|
|
||||||
let func = create_simple_pattern_mir();
|
let func = create_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
let result = try_lower_if_to_joinir(&func, entry_block, false, None); // Phase 61-1: Pure If
|
let result = try_lower_if_to_joinir(&func, entry_block, false, None); // Phase 61-1: Pure If
|
||||||
|
|
||||||
assert!(
|
assert!(result.is_none(), "Expected None when IfSelect toggle is not set");
|
||||||
result.is_none(),
|
|
||||||
"Expected None when NYASH_JOINIR_IF_SELECT is not set"
|
|
||||||
);
|
|
||||||
|
|
||||||
eprintln!("✅ If/Select lowering correctly disabled by default");
|
eprintln!("✅ If/Select lowering correctly disabled by default");
|
||||||
|
|
||||||
// ==== 4. Wrong function name (env ON) ====
|
// ==== 4. Wrong function name (env ON) ====
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
let mut func = create_simple_pattern_mir();
|
let mut func = create_simple_pattern_mir();
|
||||||
func.signature.name = "WrongName.test/1".to_string();
|
func.signature.name = "WrongName.test/1".to_string();
|
||||||
@ -214,7 +211,7 @@ mod tests {
|
|||||||
eprintln!("✅ Function name filter working correctly");
|
eprintln!("✅ Function name filter working correctly");
|
||||||
|
|
||||||
// Clean up
|
// Clean up
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@ -520,7 +517,7 @@ mod tests {
|
|||||||
fn test_if_merge_simple_pattern() {
|
fn test_if_merge_simple_pattern() {
|
||||||
use crate::mir::join_ir::JoinInst;
|
use crate::mir::join_ir::JoinInst;
|
||||||
|
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
let func = create_if_merge_simple_pattern_mir();
|
let func = create_if_merge_simple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -553,7 +550,7 @@ mod tests {
|
|||||||
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 33-7: Test IfMerge lowering for 3-variable pattern
|
/// Phase 33-7: Test IfMerge lowering for 3-variable pattern
|
||||||
@ -561,7 +558,7 @@ mod tests {
|
|||||||
fn test_if_merge_multiple_pattern() {
|
fn test_if_merge_multiple_pattern() {
|
||||||
use crate::mir::join_ir::JoinInst;
|
use crate::mir::join_ir::JoinInst;
|
||||||
|
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
let func = create_if_merge_multiple_pattern_mir();
|
let func = create_if_merge_multiple_pattern_mir();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -594,7 +591,7 @@ mod tests {
|
|||||||
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
panic!("Expected JoinInst::IfMerge, got {:?}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 63-2: Helper to create a simple pattern MIR with Const instructions
|
/// Phase 63-2: Helper to create a simple pattern MIR with Const instructions
|
||||||
@ -656,7 +653,7 @@ mod tests {
|
|||||||
fn test_type_hint_propagation_simple() {
|
fn test_type_hint_propagation_simple() {
|
||||||
use crate::mir::MirType;
|
use crate::mir::MirType;
|
||||||
|
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
let func = create_simple_pattern_mir_with_const();
|
let func = create_simple_pattern_mir_with_const();
|
||||||
let entry_block = func.entry_block;
|
let entry_block = func.entry_block;
|
||||||
@ -681,7 +678,7 @@ mod tests {
|
|||||||
panic!("Expected Select instruction with type_hint");
|
panic!("Expected Select instruction with type_hint");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 63-6-4: A/B テスト - Route A (legacy) vs Route B (type hint)
|
/// Phase 63-6-4: A/B テスト - Route A (legacy) vs Route B (type hint)
|
||||||
@ -693,7 +690,7 @@ mod tests {
|
|||||||
fn test_p1_ab_type_inference() {
|
fn test_p1_ab_type_inference() {
|
||||||
use crate::mir::MirType;
|
use crate::mir::MirType;
|
||||||
|
|
||||||
std::env::set_var("NYASH_JOINIR_IF_SELECT", "1");
|
std::env::set_var("HAKO_JOINIR_IF_SELECT", "1");
|
||||||
|
|
||||||
// P1 Simple pattern で Select 生成
|
// P1 Simple pattern で Select 生成
|
||||||
let func = create_simple_pattern_mir_with_const();
|
let func = create_simple_pattern_mir_with_const();
|
||||||
@ -720,7 +717,7 @@ mod tests {
|
|||||||
eprintln!("✅ Phase 63-6-4 Step 2: P1 function name filter: IfSelectTest.* ✓");
|
eprintln!("✅ Phase 63-6-4 Step 2: P1 function name filter: IfSelectTest.* ✓");
|
||||||
eprintln!("✅ Phase 63-6-4: A/B test passed - JoinIR type hint available for lifecycle.rs");
|
eprintln!("✅ Phase 63-6-4: A/B test passed - JoinIR type hint available for lifecycle.rs");
|
||||||
|
|
||||||
std::env::remove_var("NYASH_JOINIR_IF_SELECT");
|
std::env::remove_var("HAKO_JOINIR_IF_SELECT");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Phase 64-2-2: A/B テスト - P2 IfMerge Simple 型ヒント検証
|
/// Phase 64-2-2: A/B テスト - P2 IfMerge Simple 型ヒント検証
|
||||||
|
|||||||
@ -31,8 +31,7 @@ fn mir_joinir_min_manual_construction() {
|
|||||||
|
|
||||||
// Step 1: MIR までコンパイル(既存パイプラインで)
|
// Step 1: MIR までコンパイル(既存パイプラインで)
|
||||||
// Stage-3 環境変数を設定(local キーワード対応)
|
// Stage-3 環境変数を設定(local キーワード対応)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/joinir_min_loop.hako";
|
let test_file = "apps/tests/joinir_min_loop.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
@ -148,8 +147,7 @@ fn mir_joinir_min_auto_lowering() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Step 1: MIR までコンパイル
|
// Step 1: MIR までコンパイル
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/joinir_min_loop.hako";
|
let test_file = "apps/tests/joinir_min_loop.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -10,11 +10,10 @@
|
|||||||
// - デフォルトでは #[ignore] にしておいて手動実行用にする
|
// - デフォルトでは #[ignore] にしておいて手動実行用にする
|
||||||
// - 環境変数 NYASH_JOINIR_EXPERIMENT=1 で実験モード有効化
|
// - 環境変数 NYASH_JOINIR_EXPERIMENT=1 で実験モード有効化
|
||||||
//
|
//
|
||||||
// Phase 27.4-C 対応:
|
// Phase 27.4-C 対応(現状メモのみ):
|
||||||
// - このテストは JoinIR 変換のみを検証(VM 実行なし)
|
// - このテストは JoinIR 変換のみを検証(VM 実行なし)
|
||||||
// - NYASH_JOINIR_HEADER_EXP=1 を併用すると Header φ bypass が有効化される
|
// - かつては Header φ bypass を有効化する JoinIR 実験フラグがあったが、
|
||||||
// - bypass 時は MIR に Header φ が生成されないが、このテストでは JoinIR のみ検証するため問題なし
|
// Phase 73 時点では削除済み(常時 OFF)となっている。
|
||||||
// - 将来的に JoinIR runner 実行を追加する際は、bypass モードでも正しく動作することを確認する
|
|
||||||
//
|
//
|
||||||
// Phase 27.5 対応:
|
// Phase 27.5 対応:
|
||||||
// - このテストは Header φ だけでなく、Exit φ(i の合流)も JoinIR で k_exit(i) として表現できていることを検証
|
// - このテストは Header φ だけでなく、Exit φ(i の合流)も JoinIR で k_exit(i) として表現できていることを検証
|
||||||
@ -41,8 +40,7 @@ fn mir_joinir_skip_ws_auto_lowering() {
|
|||||||
|
|
||||||
// Step 1: MIR までコンパイル
|
// Step 1: MIR までコンパイル
|
||||||
// Stage-3 parser を有効化(local キーワード対応)
|
// Stage-3 parser を有効化(local キーワード対応)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/minimal_ssa_skip_ws.hako";
|
let test_file = "apps/tests/minimal_ssa_skip_ws.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
@ -129,8 +127,7 @@ fn mir_joinir_skip_ws_generic_matches_handwritten() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stage-3 parserを有効化
|
// Stage-3 parserを有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/minimal_ssa_skip_ws.hako";
|
let test_file = "apps/tests/minimal_ssa_skip_ws.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -41,8 +41,7 @@ fn mir_joinir_stage1_using_resolver_auto_lowering() {
|
|||||||
// Step 1: MIR までコンパイル
|
// Step 1: MIR までコンパイル
|
||||||
// Phase 27.13: Minimal .hako file to avoid `using` statement parser issues
|
// Phase 27.13: Minimal .hako file to avoid `using` statement parser issues
|
||||||
// Stage-3 parser を有効化(local キーワード対応)
|
// Stage-3 parser を有効化(local キーワード対応)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/stage1_usingresolver_minimal.hako";
|
let test_file = "apps/tests/stage1_usingresolver_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
@ -152,8 +151,7 @@ fn mir_joinir_stage1_using_resolver_generic_matches_handwritten() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/stage1_usingresolver_minimal.hako";
|
let test_file = "apps/tests/stage1_usingresolver_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -25,8 +25,7 @@ fn mir_joinir_stageb_body_auto_lowering() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stage-3 パーサを有効化(local/loop を安全に扱うため)
|
// Stage-3 パーサを有効化(local/loop を安全に扱うため)
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/stageb_body_extract_minimal.hako";
|
let test_file = "apps/tests/stageb_body_extract_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -23,8 +23,7 @@ fn mir_joinir_stageb_funcscanner_auto_lowering() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stage-3 パーサを有効化
|
// Stage-3 パーサを有効化
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
|
|
||||||
let test_file = "apps/tests/stageb_funcscanner_scan_boxes_minimal.hako";
|
let test_file = "apps/tests/stageb_funcscanner_scan_boxes_minimal.hako";
|
||||||
let src = std::fs::read_to_string(test_file)
|
let src = std::fs::read_to_string(test_file)
|
||||||
|
|||||||
@ -10,16 +10,14 @@ use crate::mir::{MirCompiler, MirVerifier};
|
|||||||
use crate::parser::NyashParser;
|
use crate::parser::NyashParser;
|
||||||
|
|
||||||
fn setup_stage3_env() {
|
fn setup_stage3_env() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn teardown_stage3_env() {
|
fn teardown_stage3_env() {
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_ENABLE_USING");
|
std::env::remove_var("NYASH_ENABLE_USING");
|
||||||
std::env::remove_var("HAKO_ENABLE_USING");
|
std::env::remove_var("HAKO_ENABLE_USING");
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
|
|||||||
@ -8,16 +8,14 @@ use crate::mir::{MirCompiler, MirVerifier};
|
|||||||
use crate::parser::NyashParser;
|
use crate::parser::NyashParser;
|
||||||
|
|
||||||
fn setup_stage3_env() {
|
fn setup_stage3_env() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn teardown_stage3_env() {
|
fn teardown_stage3_env() {
|
||||||
std::env::remove_var("NYASH_PARSER_STAGE3");
|
std::env::remove_var("NYASH_FEATURES");
|
||||||
std::env::remove_var("HAKO_PARSER_STAGE3");
|
|
||||||
std::env::remove_var("NYASH_ENABLE_USING");
|
std::env::remove_var("NYASH_ENABLE_USING");
|
||||||
std::env::remove_var("HAKO_ENABLE_USING");
|
std::env::remove_var("HAKO_ENABLE_USING");
|
||||||
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
std::env::remove_var("NYASH_DISABLE_PLUGINS");
|
||||||
|
|||||||
@ -14,7 +14,7 @@ fn test_loopform_exit_phi_single_break() {
|
|||||||
// Enable MIR verification and debug traces
|
// Enable MIR verification and debug traces
|
||||||
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
||||||
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -76,7 +76,7 @@ fn test_loopform_exit_phi_multiple_breaks() {
|
|||||||
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
||||||
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
||||||
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -114,7 +114,7 @@ fn test_loopform_exit_phi_nested_if_break() {
|
|||||||
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
||||||
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
||||||
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -157,7 +157,6 @@ fn test_loopform_exit_phi_multiple_vars() {
|
|||||||
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
// LoopForm PHI v2 はデフォルト実装(フラグ不要)
|
||||||
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
||||||
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
@ -203,7 +202,6 @@ static box TestMultiVars {
|
|||||||
fn test_loop_scope_env_carrier_and_invariant() {
|
fn test_loop_scope_env_carrier_and_invariant() {
|
||||||
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
|
||||||
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
|
|
||||||
let src = r#"
|
let src = r#"
|
||||||
|
|||||||
@ -5,8 +5,7 @@ use crate::mir::{instruction::MirInstruction, types::CompareOp, MirCompiler, Mir
|
|||||||
use crate::parser::NyashParser;
|
use crate::parser::NyashParser;
|
||||||
|
|
||||||
fn ensure_stage3_env() {
|
fn ensure_stage3_env() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
// このフィクスチャは静的 box Stage1Cli を新規に定義するため、
|
// このフィクスチャは静的 box Stage1Cli を新規に定義するため、
|
||||||
|
|||||||
@ -5,8 +5,7 @@ use crate::parser::NyashParser;
|
|||||||
#[test]
|
#[test]
|
||||||
fn mir_stage1_cli_stage1_main_compiles_and_verifies() {
|
fn mir_stage1_cli_stage1_main_compiles_and_verifies() {
|
||||||
// Stage‑3 + using を有効化して stage1_cli.hako をそのままパースする。
|
// Stage‑3 + using を有効化して stage1_cli.hako をそのままパースする。
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
|
|||||||
@ -30,8 +30,7 @@ use crate::mir::{instruction::MirInstruction, MirCompiler, MirVerifier};
|
|||||||
use crate::parser::NyashParser;
|
use crate::parser::NyashParser;
|
||||||
|
|
||||||
fn ensure_stage3_env() {
|
fn ensure_stage3_env() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("HAKO_PARSER_STAGE3", "1");
|
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ use crate::mir::{MirCompiler, MirVerifier};
|
|||||||
use crate::parser::NyashParser;
|
use crate::parser::NyashParser;
|
||||||
|
|
||||||
fn ensure_stage3_env() {
|
fn ensure_stage3_env() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
|
|||||||
@ -8,7 +8,7 @@ use crate::parser::NyashParser;
|
|||||||
#[test]
|
#[test]
|
||||||
fn mir_stage1_cli_entry_like_pattern_verifies() {
|
fn mir_stage1_cli_entry_like_pattern_verifies() {
|
||||||
// Enable Stage‑3 and using so the parser accepts modern syntax.
|
// Enable Stage‑3 and using so the parser accepts modern syntax.
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
@ -51,7 +51,7 @@ static box Stage1CliEntryLike {
|
|||||||
/// Shape test: env-only の最小ディスパッチャで SSA/PHI 崩れない形を固定する。
|
/// Shape test: env-only の最小ディスパッチャで SSA/PHI 崩れない形を固定する。
|
||||||
#[test]
|
#[test]
|
||||||
fn mir_stage1_cli_stage1_main_shape_verifies() {
|
fn mir_stage1_cli_stage1_main_shape_verifies() {
|
||||||
std::env::set_var("NYASH_PARSER_STAGE3", "1");
|
std::env::set_var("NYASH_FEATURES", "stage3");
|
||||||
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
|
||||||
std::env::set_var("NYASH_ENABLE_USING", "1");
|
std::env::set_var("NYASH_ENABLE_USING", "1");
|
||||||
std::env::set_var("HAKO_ENABLE_USING", "1");
|
std::env::set_var("HAKO_ENABLE_USING", "1");
|
||||||
|
|||||||
@ -157,8 +157,8 @@ impl NyashTokenizer {
|
|||||||
start_column,
|
start_column,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
// Stage‑3: シングルクォート文字列(オプトイン)
|
// Stage‑3: シングルクォート文字列(オプトイン、現行デフォルトON)
|
||||||
Some('\'') if crate::config::env::parser_stage3() => {
|
Some('\'') if crate::config::env::parser_stage3_enabled() => {
|
||||||
let string_value = self.read_single_quoted_string()?;
|
let string_value = self.read_single_quoted_string()?;
|
||||||
Ok(Token::new(
|
Ok(Token::new(
|
||||||
TokenType::STRING(string_value),
|
TokenType::STRING(string_value),
|
||||||
|
|||||||
@ -66,8 +66,8 @@ impl NyashTokenizer {
|
|||||||
_ => TokenType::IDENTIFIER(identifier.clone()),
|
_ => TokenType::IDENTIFIER(identifier.clone()),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Stage-3 gate: LOCAL/FLOW/TRY/CATCH/THROW require NYASH_PARSER_STAGE3=1
|
// Stage-3 gate: LOCAL/FLOW/TRY/CATCH/THROW require Stage-3 parser (default ON)
|
||||||
let stage3_enabled = crate::config::env::parser_stage3();
|
let stage3_enabled = crate::config::env::parser_stage3_enabled();
|
||||||
if !stage3_enabled {
|
if !stage3_enabled {
|
||||||
let is_stage3 = matches!(
|
let is_stage3 = matches!(
|
||||||
tok,
|
tok,
|
||||||
@ -83,7 +83,7 @@ impl NyashTokenizer {
|
|||||||
if is_stage3 {
|
if is_stage3 {
|
||||||
if std::env::var("NYASH_TOK_TRACE").ok().as_deref() == Some("1") {
|
if std::env::var("NYASH_TOK_TRACE").ok().as_deref() == Some("1") {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"[tok-stage3] Degrading {:?} to IDENTIFIER (NYASH_PARSER_STAGE3={})",
|
"[tok-stage3] Degrading {:?} to IDENTIFIER (stage3_enabled={})",
|
||||||
tok, stage3_enabled
|
tok, stage3_enabled
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -104,7 +104,7 @@ impl NyashTokenizer {
|
|||||||
);
|
);
|
||||||
if is_stage3 {
|
if is_stage3 {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"[tok-stage3] Keeping {:?} as keyword (NYASH_PARSER_STAGE3={})",
|
"[tok-stage3] Keeping {:?} as keyword (stage3_enabled={})",
|
||||||
tok, stage3_enabled
|
tok, stage3_enabled
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -110,8 +110,7 @@ fn call_hako_box(name: &str, ctx: &SsotCtx) -> Option<String> {
|
|||||||
.arg("vm")
|
.arg("vm")
|
||||||
.arg(&path)
|
.arg(&path)
|
||||||
// Parser/entry tolerances (same as smokes "safe" mode)
|
// Parser/entry tolerances (same as smokes "safe" mode)
|
||||||
.env("NYASH_PARSER_STAGE3", "1")
|
.env("NYASH_FEATURES", "stage3")
|
||||||
.env("HAKO_PARSER_STAGE3", "1")
|
|
||||||
.env("NYASH_PARSER_ALLOW_SEMICOLON", "1")
|
.env("NYASH_PARSER_ALLOW_SEMICOLON", "1")
|
||||||
.env("NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN", "1")
|
.env("NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN", "1")
|
||||||
// Disable inline compiler for stability
|
// Disable inline compiler for stability
|
||||||
|
|||||||
@ -1,25 +1,68 @@
|
|||||||
use nyash_rust::parser::NyashParser;
|
use nyash_rust::parser::NyashParser;
|
||||||
|
|
||||||
fn with_env<K: AsRef<str>, V: AsRef<str>, F: FnOnce()>(key: K, val: Option<V>, f: F) {
|
fn with_stage3_env<F: FnOnce()>(
|
||||||
let k = key.as_ref().to_string();
|
features: Option<&str>,
|
||||||
let prev = std::env::var(&k).ok();
|
parser_stage3: Option<&str>,
|
||||||
match val {
|
hako_stage3: Option<&str>,
|
||||||
Some(v) => std::env::set_var(&k, v.as_ref()),
|
f: F,
|
||||||
None => std::env::remove_var(&k),
|
) {
|
||||||
|
let prev_features = std::env::var("NYASH_FEATURES").ok();
|
||||||
|
let prev_parser = std::env::var("NYASH_PARSER_STAGE3").ok();
|
||||||
|
let prev_hako = std::env::var("HAKO_PARSER_STAGE3").ok();
|
||||||
|
|
||||||
|
match features {
|
||||||
|
Some(v) => std::env::set_var("NYASH_FEATURES", v),
|
||||||
|
None => std::env::remove_var("NYASH_FEATURES"),
|
||||||
}
|
}
|
||||||
|
match parser_stage3 {
|
||||||
|
Some(v) => std::env::set_var("NYASH_PARSER_STAGE3", v),
|
||||||
|
None => std::env::remove_var("NYASH_PARSER_STAGE3"),
|
||||||
|
}
|
||||||
|
match hako_stage3 {
|
||||||
|
Some(v) => std::env::set_var("HAKO_PARSER_STAGE3", v),
|
||||||
|
None => std::env::remove_var("HAKO_PARSER_STAGE3"),
|
||||||
|
}
|
||||||
|
|
||||||
f();
|
f();
|
||||||
match prev {
|
|
||||||
Some(p) => std::env::set_var(&k, p),
|
match prev_features {
|
||||||
None => std::env::remove_var(&k),
|
Some(v) => std::env::set_var("NYASH_FEATURES", v),
|
||||||
|
None => std::env::remove_var("NYASH_FEATURES"),
|
||||||
|
}
|
||||||
|
match prev_parser {
|
||||||
|
Some(v) => std::env::set_var("NYASH_PARSER_STAGE3", v),
|
||||||
|
None => std::env::remove_var("NYASH_PARSER_STAGE3"),
|
||||||
|
}
|
||||||
|
match prev_hako {
|
||||||
|
Some(v) => std::env::set_var("HAKO_PARSER_STAGE3", v),
|
||||||
|
None => std::env::remove_var("HAKO_PARSER_STAGE3"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Legacy gate 動作テスト(Phase-3 Stage3 gating の歴史的仕様).
|
|
||||||
// 現在は Stage3 パーサを常時 ON に近い運用にしているため、実運用とはズレる。
|
|
||||||
#[test]
|
#[test]
|
||||||
#[ignore]
|
fn stage3_default_enabled_accepts_try_and_throw() {
|
||||||
|
with_stage3_env(None, None, None, || {
|
||||||
|
let code_try = "try { local x = 1 } catch () { }";
|
||||||
|
let res_try = NyashParser::parse_from_string(code_try);
|
||||||
|
assert!(
|
||||||
|
res_try.is_ok(),
|
||||||
|
"try should parse when Stage-3 is default-enabled: {:?}",
|
||||||
|
res_try.err()
|
||||||
|
);
|
||||||
|
|
||||||
|
let code_throw = "throw 1";
|
||||||
|
let res_throw = NyashParser::parse_from_string(code_throw);
|
||||||
|
assert!(
|
||||||
|
res_throw.is_ok(),
|
||||||
|
"throw should parse when Stage-3 is default-enabled: {:?}",
|
||||||
|
res_throw.err()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
fn stage3_disabled_rejects_try_and_throw() {
|
fn stage3_disabled_rejects_try_and_throw() {
|
||||||
with_env("NYASH_PARSER_STAGE3", None::<&str>, || {
|
with_stage3_env(None, Some("0"), Some("0"), || {
|
||||||
let code_try = "try { local x = 1 } catch () { }";
|
let code_try = "try { local x = 1 } catch () { }";
|
||||||
let res_try = NyashParser::parse_from_string(code_try);
|
let res_try = NyashParser::parse_from_string(code_try);
|
||||||
assert!(res_try.is_err(), "try should be rejected when gate is off");
|
assert!(res_try.is_err(), "try should be rejected when gate is off");
|
||||||
@ -35,7 +78,7 @@ fn stage3_disabled_rejects_try_and_throw() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn stage3_enabled_accepts_throw() {
|
fn stage3_enabled_accepts_throw() {
|
||||||
with_env("NYASH_PARSER_STAGE3", Some("1"), || {
|
with_stage3_env(Some("stage3"), None, None, || {
|
||||||
let code = "throw (1 + 2)";
|
let code = "throw (1 + 2)";
|
||||||
let res = NyashParser::parse_from_string(code);
|
let res = NyashParser::parse_from_string(code);
|
||||||
assert!(
|
assert!(
|
||||||
@ -48,7 +91,7 @@ fn stage3_enabled_accepts_throw() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn stage3_enabled_accepts_try_catch_variants() {
|
fn stage3_enabled_accepts_try_catch_variants() {
|
||||||
with_env("NYASH_PARSER_STAGE3", Some("1"), || {
|
with_stage3_env(Some("stage3"), None, None, || {
|
||||||
// (Type var)
|
// (Type var)
|
||||||
let code1 = r#"
|
let code1 = r#"
|
||||||
try { local a = 1 }
|
try { local a = 1 }
|
||||||
|
|||||||
@ -39,8 +39,7 @@ run_one() {
|
|||||||
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 \
|
||||||
HAKO_DISABLE_NY_COMPILER=1 \
|
HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 \
|
NYASH_FEATURES="${NYASH_FEATURES:-stage3}" \
|
||||||
HAKO_PARSER_STAGE3=1 \
|
|
||||||
NYASH_PARSER_SEAM_TOLERANT=1 \
|
NYASH_PARSER_SEAM_TOLERANT=1 \
|
||||||
HAKO_PARSER_SEAM_TOLERANT=1 \
|
HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
@ -74,8 +73,7 @@ if [ "$FORMAT" = "dot" ]; then
|
|||||||
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 \
|
||||||
HAKO_DISABLE_NY_COMPILER=1 \
|
HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 \
|
NYASH_FEATURES="${NYASH_FEATURES:-stage3}" \
|
||||||
HAKO_PARSER_STAGE3=1 \
|
|
||||||
NYASH_PARSER_SEAM_TOLERANT=1 \
|
NYASH_PARSER_SEAM_TOLERANT=1 \
|
||||||
HAKO_PARSER_SEAM_TOLERANT=1 \
|
HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
@ -102,8 +100,7 @@ elif [ "$FORMAT" = "json-lsp" ]; then
|
|||||||
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 \
|
||||||
HAKO_DISABLE_NY_COMPILER=1 \
|
HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 \
|
NYASH_FEATURES="${NYASH_FEATURES:-stage3}" \
|
||||||
HAKO_PARSER_STAGE3=1 \
|
|
||||||
NYASH_PARSER_SEAM_TOLERANT=1 \
|
NYASH_PARSER_SEAM_TOLERANT=1 \
|
||||||
HAKO_PARSER_SEAM_TOLERANT=1 \
|
HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
|
|||||||
@ -499,56 +499,10 @@ static box HakoAnalyzerBox {
|
|||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
_rename_method_text(text, ast, box, old, neu) {
|
_rename_method_text(text, ast, box, old, neu) {
|
||||||
if text == null || box == null || old == null || neu == null { return text }
|
// NOTE(Phase 73): AST-based method rename QuickFix is temporarily disabled
|
||||||
local lines = me._split_lines(text)
|
// for Stage-3 parser compatibility. For now, return original text unchanged.
|
||||||
local changed = 0
|
if text == null { return text }
|
||||||
// Use AST spans to find definition line
|
return text
|
||||||
local mline = -1
|
|
||||||
if ast != null {
|
|
||||||
local boxes = ast.get("boxes")
|
|
||||||
if boxes != null {
|
|
||||||
local bi=0; while bi<boxes.size() {
|
|
||||||
local b = boxes.get(bi)
|
|
||||||
if b != null && b.get("name") == box {
|
|
||||||
local ms = b.get("methods")
|
|
||||||
if ms != null {
|
|
||||||
local mi=0; while mi<ms.size() {
|
|
||||||
local m = ms.get(mi)
|
|
||||||
if m.get("name") == old { mline = m.get("span"); break }
|
|
||||||
mi = mi + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
bi = bi + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if mline > 0 {
|
|
||||||
local idx = mline - 1
|
|
||||||
if idx >= 0 && idx < lines.size() {
|
|
||||||
local ln = lines.get(idx)
|
|
||||||
// Replace 'method old(' with 'method new('
|
|
||||||
local marker = "method " + old + "("
|
|
||||||
if ln.indexOf(marker) >= 0 {
|
|
||||||
lines.set(idx, ln.replace(marker, "method " + neu + "("))
|
|
||||||
changed = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update calls: box.old( → box.new(
|
|
||||||
local ci=0; while ci<lines.size() {
|
|
||||||
local ln2 = lines.get(ci)
|
|
||||||
local patt = box + "." + old + "("
|
|
||||||
if ln2.indexOf(patt) >= 0 {
|
|
||||||
lines.set(ci, ln2.replace(patt, box + "." + neu + "("))
|
|
||||||
if lines.get(ci) != ln2 { changed = 1 }
|
|
||||||
}
|
|
||||||
ci = ci + 1
|
|
||||||
}
|
|
||||||
if changed == 0 { return text }
|
|
||||||
local j=0; local buf=""; while j<lines.size() { buf = buf + lines.get(j); if j<lines.size()-1 { buf = buf + "\n" } j=j+1 }
|
|
||||||
return buf
|
|
||||||
}
|
}
|
||||||
_print_refactor_plan_json(path, ren_boxes, ren_methods) {
|
_print_refactor_plan_json(path, ren_boxes, ren_methods) {
|
||||||
// Print a small JSON describing intended refactors and a shell apply skeleton
|
// Print a small JSON describing intended refactors and a shell apply skeleton
|
||||||
|
|||||||
@ -74,7 +74,7 @@ run_case() {
|
|||||||
export LD_LIBRARY_PATH="${ROOT}/target/release:${LD_LIBRARY_PATH:-}"
|
export LD_LIBRARY_PATH="${ROOT}/target/release:${LD_LIBRARY_PATH:-}"
|
||||||
|
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
NYASH_FEATURES="${NYASH_FEATURES:-stage3}" NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 NYASH_USING_AST=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 NYASH_USING_AST=1 \
|
||||||
NYASH_DISABLE_PLUGINS=1 \
|
NYASH_DISABLE_PLUGINS=1 \
|
||||||
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||||||
|
|||||||
@ -72,8 +72,7 @@ else
|
|||||||
export NYASH_ALLOW_USING_FILE=0
|
export NYASH_ALLOW_USING_FILE=0
|
||||||
export HAKO_ALLOW_USING_FILE=0
|
export HAKO_ALLOW_USING_FILE=0
|
||||||
export NYASH_USING_AST=1
|
export NYASH_USING_AST=1
|
||||||
export HAKO_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export NYASH_PARSER_STAGE3=1
|
|
||||||
export NYASH_VARMAP_GUARD_STRICT=0
|
export NYASH_VARMAP_GUARD_STRICT=0
|
||||||
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
||||||
export NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0
|
export NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0
|
||||||
|
|||||||
@ -19,10 +19,12 @@ Helpers
|
|||||||
Notes
|
Notes
|
||||||
- Avoid running heavy integration smokes in CI by default. Use `--profile quick`.
|
- Avoid running heavy integration smokes in CI by default. Use `--profile quick`.
|
||||||
- When a test depends on external tools (e.g., LLVM), prefer `[SKIP:<reason>]` over failure.
|
- When a test depends on external tools (e.g., LLVM), prefer `[SKIP:<reason>]` over failure.
|
||||||
|
- Stage‑B/selfhost canaries(`stage1_launcher_*`, `phase251*` など)は Stage‑3 デフォルト環境で安定しないため、quick プロファイルでは `[SKIP:stageb]` として扱い、必要に応じて別プロファイル(integration/full)で個別に実行する。
|
||||||
|
- S3 backend 向けの長尺テスト群も quick 向きではないため、timeout を短く保ちたい場合は `[SKIP:slow]` にして別途ローカルで回すことを推奨する。
|
||||||
|
|
||||||
Quick tips
|
Quick tips
|
||||||
- EXE-heavy cases (e.g., `phase2100/*`) may take longer. When running quick with these tests, pass a larger timeout like `--timeout 120`.
|
- EXE-heavy cases (e.g., `phase2100/*`) may take longer. When running quick with these tests, pass a larger timeout like `--timeout 120`.
|
||||||
- Smokes v2 auto-cleans temporary crate EXE objects created under `/tmp` (pattern: `ny_crate_backend_exe_*.o`) after the run.
|
- Smokes v2 auto-cleans temporary crate EXE objects created under `/tmp` (pattern: `ny_crate_backend_exe_*.o`) after the run.
|
||||||
|
|
||||||
Developer Notes
|
Developer Notes
|
||||||
- **JoinIR If/Select (Phase 33)**: A/B test with `NYASH_JOINIR_IF_SELECT=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 ./target/release/hakorune apps/tests/joinir_if_select_simple.hako` (not required for CI, dev-only verification)
|
- **JoinIR If/Select (Phase 33)**: A/B test with `NYASH_FEATURES=stage3 NYASH_JOINIR_CORE=1 HAKO_JOINIR_IF_SELECT=1 ./target/release/hakorune apps/tests/joinir_if_select_simple.hako`(dev-only、CI対象外。旧 IfSelect 用の NYASH_* トグルは非推奨)
|
||||||
|
|||||||
@ -14,8 +14,7 @@ stageb_compile_to_json() {
|
|||||||
export NYASH_ALLOW_USING_FILE=0
|
export NYASH_ALLOW_USING_FILE=0
|
||||||
export HAKO_ALLOW_USING_FILE=0
|
export HAKO_ALLOW_USING_FILE=0
|
||||||
export NYASH_USING_AST=1
|
export NYASH_USING_AST=1
|
||||||
export HAKO_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export NYASH_PARSER_STAGE3=1
|
|
||||||
# Avoid inline Ny compiler timeouts and VM fail-fast on Hako-like sources
|
# Avoid inline Ny compiler timeouts and VM fail-fast on Hako-like sources
|
||||||
export NYASH_DISABLE_NY_COMPILER=1
|
export NYASH_DISABLE_NY_COMPILER=1
|
||||||
export HAKO_DISABLE_NY_COMPILER=1
|
export HAKO_DISABLE_NY_COMPILER=1
|
||||||
@ -64,8 +63,7 @@ stageb_compile_to_json_with_bundles() {
|
|||||||
export NYASH_ALLOW_USING_FILE=0
|
export NYASH_ALLOW_USING_FILE=0
|
||||||
export HAKO_ALLOW_USING_FILE=0
|
export HAKO_ALLOW_USING_FILE=0
|
||||||
export NYASH_USING_AST=1
|
export NYASH_USING_AST=1
|
||||||
export HAKO_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export NYASH_PARSER_STAGE3=1
|
|
||||||
export NYASH_VARMAP_GUARD_STRICT=0
|
export NYASH_VARMAP_GUARD_STRICT=0
|
||||||
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
||||||
NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0 \
|
NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0 \
|
||||||
@ -101,8 +99,7 @@ stageb_compile_to_json_with_require() {
|
|||||||
export NYASH_ALLOW_USING_FILE=0
|
export NYASH_ALLOW_USING_FILE=0
|
||||||
export HAKO_ALLOW_USING_FILE=0
|
export HAKO_ALLOW_USING_FILE=0
|
||||||
export NYASH_USING_AST=1
|
export NYASH_USING_AST=1
|
||||||
export HAKO_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export NYASH_PARSER_STAGE3=1
|
|
||||||
export NYASH_VARMAP_GUARD_STRICT=0
|
export NYASH_VARMAP_GUARD_STRICT=0
|
||||||
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
export NYASH_BLOCK_SCHEDULE_VERIFY=0
|
||||||
NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0 \
|
NYASH_QUIET=0 HAKO_QUIET=0 NYASH_CLI_VERBOSE=0 \
|
||||||
@ -149,7 +146,7 @@ stageb_compile_via_rust_mir() {
|
|||||||
local ny_tmp="/tmp/hako_stageb_src_$$.hako"
|
local ny_tmp="/tmp/hako_stageb_src_$$.hako"
|
||||||
local json_out="/tmp/hako_stageb_rust_$$.mir.json"
|
local json_out="/tmp/hako_stageb_rust_$$.mir.json"
|
||||||
printf "%s\n" "$code" > "$ny_tmp"
|
printf "%s\n" "$code" > "$ny_tmp"
|
||||||
if NYASH_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
if NYASH_FEATURES="${NYASH_FEATURES:-stage3}" NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
"$NYASH_BIN" --backend mir --emit-mir-json "$json_out" "$ny_tmp" >/dev/null 2>&1; then
|
"$NYASH_BIN" --backend mir --emit-mir-json "$json_out" "$ny_tmp" >/dev/null 2>&1; then
|
||||||
rm -f "$ny_tmp"
|
rm -f "$ny_tmp"
|
||||||
echo "$json_out"
|
echo "$json_out"
|
||||||
|
|||||||
@ -18,6 +18,9 @@ if [ -z "${NYASH_BIN:-}" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Stage-3 is default: prefer feature flag instead of legacy parser envs.
|
||||||
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
|
|
||||||
# Debug convenience: HAKO_DEBUG=1 enables execution trace and log passthrough
|
# Debug convenience: HAKO_DEBUG=1 enables execution trace and log passthrough
|
||||||
if [ "${HAKO_DEBUG:-0}" = "1" ]; then
|
if [ "${HAKO_DEBUG:-0}" = "1" ]; then
|
||||||
export HAKO_TRACE_EXECUTION=1
|
export HAKO_TRACE_EXECUTION=1
|
||||||
@ -89,6 +92,8 @@ log_error() {
|
|||||||
| grep -v "^\[using/text-merge\]" \
|
| grep -v "^\[using/text-merge\]" \
|
||||||
| grep -v "^\[builder\]" \
|
| grep -v "^\[builder\]" \
|
||||||
| grep -v "^\\[vm-trace\\]" \
|
| grep -v "^\\[vm-trace\\]" \
|
||||||
|
| grep -v "^\\[DEBUG/" \
|
||||||
|
| grep -v "^\\[ssa-undef-debug\\]" \
|
||||||
| grep -v '^\[PluginBoxFactory\]' \
|
| grep -v '^\[PluginBoxFactory\]' \
|
||||||
| grep -v '^\[using.dylib/autoload\]' \
|
| grep -v '^\[using.dylib/autoload\]' \
|
||||||
| grep -v "^\[vm\] Stage-3" \
|
| grep -v "^\[vm\] Stage-3" \
|
||||||
@ -115,7 +120,8 @@ log_error() {
|
|||||||
| grep -v "Failed to load nyash.toml - plugins disabled" \
|
| grep -v "Failed to load nyash.toml - plugins disabled" \
|
||||||
| grep -v "^⚠️ Failed to load plugin config (hakorune.toml/nyash.toml) - plugins disabled" \
|
| grep -v "^⚠️ Failed to load plugin config (hakorune.toml/nyash.toml) - plugins disabled" \
|
||||||
| grep -v "^🚀 Nyash VM Backend - Executing file:" \
|
| grep -v "^🚀 Nyash VM Backend - Executing file:" \
|
||||||
| grep -v "^🚀 Hakorune VM Backend - Executing file:"
|
| grep -v "^🚀 Hakorune VM Backend - Executing file:" \
|
||||||
|
| grep -v "^[[]ControlForm::"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 環境チェック(必須)
|
# 環境チェック(必須)
|
||||||
@ -229,7 +235,7 @@ run_nyash_vm() {
|
|||||||
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
||||||
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
HAKO_ENABLE_USING=${HAKO_ENABLE_USING:-1} NYASH_ENABLE_USING=${NYASH_ENABLE_USING:-1} \
|
HAKO_ENABLE_USING=${HAKO_ENABLE_USING:-1} NYASH_ENABLE_USING=${NYASH_ENABLE_USING:-1} \
|
||||||
NYASH_USING_AST=1 NYASH_PARSER_SEAM_TOLERANT=1 \
|
NYASH_USING_AST=1 NYASH_PARSER_SEAM_TOLERANT=1 \
|
||||||
"${ENV_PREFIX[@]}" \
|
"${ENV_PREFIX[@]}" \
|
||||||
@ -283,7 +289,7 @@ run_nyash_vm() {
|
|||||||
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0 \
|
||||||
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_VM_USE_PY="$USE_PYVM" NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
HAKO_ENABLE_USING=${HAKO_ENABLE_USING:-1} NYASH_ENABLE_USING=${NYASH_ENABLE_USING:-1} \
|
HAKO_ENABLE_USING=${HAKO_ENABLE_USING:-1} NYASH_ENABLE_USING=${NYASH_ENABLE_USING:-1} \
|
||||||
NYASH_USING_AST=1 NYASH_PARSER_SEAM_TOLERANT=1 \
|
NYASH_USING_AST=1 NYASH_PARSER_SEAM_TOLERANT=1 \
|
||||||
"${ENV_PREFIX[@]}" \
|
"${ENV_PREFIX[@]}" \
|
||||||
@ -459,8 +465,7 @@ HCODE
|
|||||||
NYASH_USING_AST=1 \
|
NYASH_USING_AST=1 \
|
||||||
NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 \
|
NYASH_FEATURES="${NYASH_FEATURES:-stage3}" \
|
||||||
HAKO_PARSER_STAGE3=1 \
|
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
||||||
run_nyash_vm -c "$builder_code_min" 2>"$builder_stderr" | tee "$builder_stdout" | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
run_nyash_vm -c "$builder_code_min" 2>"$builder_stderr" | tee "$builder_stdout" | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
||||||
@ -494,7 +499,7 @@ HCODE
|
|||||||
HAKO_ROUTE_HAKOVM=1 \
|
HAKO_ROUTE_HAKOVM=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
||||||
run_nyash_vm -c "$builder_code_full" 2>>"$builder_stderr" | tee -a "$builder_stdout" | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
run_nyash_vm -c "$builder_code_full" 2>>"$builder_stderr" | tee -a "$builder_stdout" | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
||||||
@ -655,7 +660,7 @@ run_nyash_llvm() {
|
|||||||
sed -i -E 's/;([[:space:]]*)(\}|$)/\1\2/g' "$program" || true
|
sed -i -E 's/;([[:space:]]*)(\}|$)/\1\2/g' "$program" || true
|
||||||
fi
|
fi
|
||||||
# プラグイン初期化メッセージを除外
|
# プラグイン初期化メッセージを除外
|
||||||
PYTHONPATH="${PYTHONPATH:-$NYASH_ROOT}" NYASH_NY_LLVM_COMPILER="$NYASH_ROOT/target/release/ny-llvmc" NYASH_LLVM_USE_HARNESS=1 NYASH_EMIT_EXE_NYRT="$NYASH_ROOT/target/release" NYASH_VM_USE_PY=0 NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 "$NYASH_BIN" --backend llvm "$tmpfile" "$@" 2>&1 | \
|
PYTHONPATH="${PYTHONPATH:-$NYASH_ROOT}" NYASH_NY_LLVM_COMPILER="$NYASH_ROOT/target/release/ny-llvmc" NYASH_LLVM_USE_HARNESS=1 NYASH_EMIT_EXE_NYRT="$NYASH_ROOT/target/release" NYASH_VM_USE_PY=0 NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 "$NYASH_BIN" --backend llvm "$tmpfile" "$@" 2>&1 | \
|
||||||
grep -v "^\[UnifiedBoxRegistry\]" | grep -v "^\[FileBox\]" | grep -v "^Net plugin:" | grep -v "^\[.*\] Plugin" | \
|
grep -v "^\[UnifiedBoxRegistry\]" | grep -v "^\[FileBox\]" | grep -v "^Net plugin:" | grep -v "^\[.*\] Plugin" | \
|
||||||
grep -v '^\[plugin-loader\] backend=' | \
|
grep -v '^\[plugin-loader\] backend=' | \
|
||||||
grep -v '^🔌 plugin host initialized' | grep -v '^✅ plugin host fully configured' | \
|
grep -v '^🔌 plugin host initialized' | grep -v '^✅ plugin host fully configured' | \
|
||||||
@ -672,7 +677,7 @@ run_nyash_llvm() {
|
|||||||
sed -i -E 's/;([[:space:]]*)(\}|$)/\1\2/g' "$program" || true
|
sed -i -E 's/;([[:space:]]*)(\}|$)/\1\2/g' "$program" || true
|
||||||
fi
|
fi
|
||||||
# プラグイン初期化メッセージを除外
|
# プラグイン初期化メッセージを除外
|
||||||
PYTHONPATH="${PYTHONPATH:-$NYASH_ROOT}" NYASH_NY_LLVM_COMPILER="$NYASH_ROOT/target/release/ny-llvmc" NYASH_LLVM_USE_HARNESS=1 NYASH_EMIT_EXE_NYRT="$NYASH_ROOT/target/release" NYASH_VM_USE_PY=0 NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 "$NYASH_BIN" --backend llvm "$program" "$@" 2>&1 | \
|
PYTHONPATH="${PYTHONPATH:-$NYASH_ROOT}" NYASH_NY_LLVM_COMPILER="$NYASH_ROOT/target/release/ny-llvmc" NYASH_LLVM_USE_HARNESS=1 NYASH_EMIT_EXE_NYRT="$NYASH_ROOT/target/release" NYASH_VM_USE_PY=0 NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 "$NYASH_BIN" --backend llvm "$program" "$@" 2>&1 | \
|
||||||
grep -v "^\[UnifiedBoxRegistry\]" | grep -v "^\[FileBox\]" | grep -v "^Net plugin:" | grep -v "^\[.*\] Plugin" | \
|
grep -v "^\[UnifiedBoxRegistry\]" | grep -v "^\[FileBox\]" | grep -v "^Net plugin:" | grep -v "^\[.*\] Plugin" | \
|
||||||
grep -v '^\[plugin-loader\] backend=' | \
|
grep -v '^\[plugin-loader\] backend=' | \
|
||||||
grep -v '^🔌 plugin host initialized' | grep -v '^✅ plugin host fully configured' | \
|
grep -v '^🔌 plugin host initialized' | grep -v '^✅ plugin host fully configured' | \
|
||||||
|
|||||||
@ -11,7 +11,7 @@ require_env || { echo "[SKIP] env not ready"; exit 0; }
|
|||||||
test_vm_llvm_scope_assign() {
|
test_vm_llvm_scope_assign() {
|
||||||
local code='static box Main { method main(args) { local x = 0 { if (1==1) { x = 42 } } return x } }'
|
local code='static box Main { method main(args) { local x = 0 { if (1==1) { x = 42 } } return x } }'
|
||||||
# Stage-3 parse is required for `local`
|
# Stage-3 parse is required for `local`
|
||||||
NYASH_PARSER_STAGE3=1 check_parity -c "$code" "vm_llvm_scope_assign"
|
NYASH_FEATURES=stage3 check_parity -c "$code" "vm_llvm_scope_assign"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_test "vm_llvm_scope_assign" test_vm_llvm_scope_assign
|
run_test "vm_llvm_scope_assign" test_vm_llvm_scope_assign
|
||||||
|
|||||||
@ -11,6 +11,7 @@ preflight_plugins || exit 2
|
|||||||
APP_DIR="$NYASH_ROOT/apps/examples/json_query"
|
APP_DIR="$NYASH_ROOT/apps/examples/json_query"
|
||||||
# Use default dev behavior (rewrite enabled) for stable resolution
|
# Use default dev behavior (rewrite enabled) for stable resolution
|
||||||
# NOTE: Do not enable NYASH_VM_TOLERATE_VOID here; path parser relies on strict compare semantics
|
# NOTE: Do not enable NYASH_VM_TOLERATE_VOID here; path parser relies on strict compare semantics
|
||||||
|
export HAKO_VM_MAX_STEPS="${HAKO_VM_MAX_STEPS:-0}" # disable step cap for this sample (deterministic loop)
|
||||||
output=$(run_nyash_vm "$APP_DIR/main.hako" --dev)
|
output=$(run_nyash_vm "$APP_DIR/main.hako" --dev)
|
||||||
|
|
||||||
expected=$(cat << 'TXT'
|
expected=$(cat << 'TXT'
|
||||||
|
|||||||
@ -31,7 +31,7 @@ HAKO
|
|||||||
multiline="line1\nline2\nline3"
|
multiline="line1\nline2\nline3"
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
NYASH_JSON_ONLY=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 "$BIN" --backend vm "$tmp_hako" -- --source-file "/dev/null" "$multiline"
|
NYASH_JSON_ONLY=1 NYASH_FEATURES=stage3 "$BIN" --backend vm "$tmp_hako" -- --source-file "/dev/null" "$multiline"
|
||||||
rc=$?
|
rc=$?
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ static box Main {
|
|||||||
HK
|
HK
|
||||||
|
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
NYASH_FEATURES=stage3 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
||||||
rc=$?
|
rc=$?
|
||||||
rm -f "$PROG"
|
rm -f "$PROG"
|
||||||
|
|||||||
@ -19,7 +19,7 @@ static box Main {
|
|||||||
HK
|
HK
|
||||||
|
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
NYASH_FEATURES=stage3 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
||||||
rc=$?
|
rc=$?
|
||||||
rm -f "$PROG"
|
rm -f "$PROG"
|
||||||
|
|||||||
@ -37,7 +37,7 @@ static box Main {
|
|||||||
HK
|
HK
|
||||||
|
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_FEATURES=stage3 \
|
||||||
"$BIN" --backend vm "$WRAP" -- "$PROG" "$(cat "$PROG")" >/dev/null 2>&1
|
"$BIN" --backend vm "$WRAP" -- "$PROG" "$(cat "$PROG")" >/dev/null 2>&1
|
||||||
rc=$?
|
rc=$?
|
||||||
rm -f "$PROG" "$WRAP"
|
rm -f "$PROG" "$WRAP"
|
||||||
|
|||||||
@ -17,7 +17,7 @@ static box Main {
|
|||||||
HK
|
HK
|
||||||
|
|
||||||
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 HAKO_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
NYASH_FEATURES=stage3 NYASH_PARSER_SEAM_TOLERANT=1 HAKO_PARSER_SEAM_TOLERANT=1 \
|
||||||
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
"$BIN" --backend vm "$PROG" >/dev/null 2>&1
|
||||||
rc=$?
|
rc=$?
|
||||||
rm -f "$PROG"
|
rm -f "$PROG"
|
||||||
|
|||||||
@ -15,7 +15,7 @@ cat >"$tmp" <<'SRC'
|
|||||||
box Main { static method main() { local ; } }
|
box Main { static method main() { local ; } }
|
||||||
SRC
|
SRC
|
||||||
set +e
|
set +e
|
||||||
out=$(NYASH_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp" 2>&1)
|
out=$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp" 2>&1)
|
||||||
rc=$?
|
rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp"
|
rm -f "$tmp"
|
||||||
@ -28,4 +28,3 @@ echo "[FAIL] parse_error_context_vm: filename not included" >&2
|
|||||||
echo "--- output ---" >&2
|
echo "--- output ---" >&2
|
||||||
echo "$out" >&2
|
echo "$out" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ using "lang/src/shared/common/string_ops.hako"
|
|||||||
box Main { static method main() { return 0 } }
|
box Main { static method main() { return 0 } }
|
||||||
SRC
|
SRC
|
||||||
set +e
|
set +e
|
||||||
out=$(NYASH_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
out=$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
NYASH_ALLOW_USING_FILE=0 HAKO_ALLOW_USING_FILE=0 \
|
NYASH_ALLOW_USING_FILE=0 HAKO_ALLOW_USING_FILE=0 \
|
||||||
"$NYASH_BIN" --backend vm "$tmp" 2>&1)
|
"$NYASH_BIN" --backend vm "$tmp" 2>&1)
|
||||||
rc=$?
|
rc=$?
|
||||||
@ -31,4 +31,3 @@ echo "[FAIL] using_error_context_vm: filename:line not included" >&2
|
|||||||
echo "--- output ---" >&2
|
echo "--- output ---" >&2
|
||||||
echo "$out" >&2
|
echo "$out" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ hako_compile_to_mir_stageb() {
|
|||||||
printf "%s\n" "$code" > "$hako_tmp"
|
printf "%s\n" "$code" > "$hako_tmp"
|
||||||
local raw="/tmp/hako_oob_strict_raw_$$.txt"
|
local raw="/tmp/hako_oob_strict_raw_$$.txt"
|
||||||
NYASH_PARSER_ALLOW_SEMICOLON=1 HAKO_ALLOW_USING_FILE=1 NYASH_ALLOW_USING_FILE=1 \
|
NYASH_PARSER_ALLOW_SEMICOLON=1 HAKO_ALLOW_USING_FILE=1 NYASH_ALLOW_USING_FILE=1 \
|
||||||
HAKO_PARSER_STAGE3=1 NYASH_PARSER_STAGE3=1 \
|
NYASH_FEATURES=stage3 \
|
||||||
NYASH_VARMAP_GUARD_STRICT=0 NYASH_BLOCK_SCHEDULE_VERIFY=0 \
|
NYASH_VARMAP_GUARD_STRICT=0 NYASH_BLOCK_SCHEDULE_VERIFY=0 \
|
||||||
NYASH_QUIET=1 HAKO_QUIET=1 NYASH_CLI_VERBOSE=0 \
|
NYASH_QUIET=1 HAKO_QUIET=1 NYASH_CLI_VERBOSE=0 \
|
||||||
"$ROOT/target/release/nyash" --backend vm \
|
"$ROOT/target/release/nyash" --backend vm \
|
||||||
|
|||||||
@ -31,7 +31,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(out="$(NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
out="$(out="$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
json_only="$(echo "$out" | sed -n '/^{/,$p')"
|
json_only="$(echo "$out" | sed -n '/^{/,$p')"
|
||||||
echo "$json_only" | jq -e . > "$tmp_json"
|
echo "$json_only" | jq -e . > "$tmp_json"
|
||||||
|
|||||||
@ -29,7 +29,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(HAKO_LLVM_EMIT_PROVIDER=ny-llvmc NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
out="$(HAKO_LLVM_EMIT_PROVIDER=ny-llvmc NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
$NYASH_BIN --backend vm "$tmp_hako" 2>&1)"
|
$NYASH_BIN --backend vm "$tmp_hako" 2>&1)"
|
||||||
rc=$?
|
rc=$?
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@ -30,7 +30,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(out="$(NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
out="$(out="$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
json_only="$(echo "$out" | sed -n '/^{/,$p')"
|
json_only="$(echo "$out" | sed -n '/^{/,$p')"
|
||||||
if ! echo "$json_only" | jq -e . > "$tmp_json" 2>/dev/null; then
|
if ! echo "$json_only" | jq -e . > "$tmp_json" 2>/dev/null; then
|
||||||
|
|||||||
@ -26,7 +26,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(HAKO_MIR_BUILDER_DELEGATE=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
out="$(HAKO_MIR_BUILDER_DELEGATE=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
$NYASH_BIN --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
$NYASH_BIN --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp_hako" 2>/dev/null || true
|
rm -f "$tmp_hako" 2>/dev/null || true
|
||||||
|
|||||||
@ -29,7 +29,7 @@ HAKO
|
|||||||
PROG='{"version":0,"kind":"Program","body":[{"type":"Return","expr":{"type":"Binary","op":"+","lhs":{"type":"Int","value":1},"rhs":{"type":"Int","value":2}}}]}'
|
PROG='{"version":0,"kind":"Program","body":[{"type":"Return","expr":{"type":"Binary","op":"+","lhs":{"type":"Int","value":1},"rhs":{"type":"Int","value":2}}}]}'
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(PROG_JSON="$PROG" HAKO_MIR_BUILDER_INTERNAL=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
out="$(PROG_JSON="$PROG" HAKO_MIR_BUILDER_INTERNAL=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp_hako" 2>/dev/null || true
|
rm -f "$tmp_hako" 2>/dev/null || true
|
||||||
|
|||||||
@ -30,7 +30,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(HAKO_MIR_BUILDER_INTERNAL=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
out="$(HAKO_MIR_BUILDER_INTERNAL=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 \
|
||||||
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
"$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp_hako" 2>/dev/null || true
|
rm -f "$tmp_hako" 2>/dev/null || true
|
||||||
|
|||||||
@ -23,7 +23,7 @@ HAKO
|
|||||||
|
|
||||||
# 1) Emit MIR(JSON) to a temp file
|
# 1) Emit MIR(JSON) to a temp file
|
||||||
set +e
|
set +e
|
||||||
out="$(NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1)"; rc=$?
|
out="$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1)"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
mir=$(echo "$out" | awk '/\[MIR_BEGIN\]/{f=1;next}/\[MIR_END\]/{f=0}f')
|
mir=$(echo "$out" | awk '/\[MIR_BEGIN\]/{f=1;next}/\[MIR_END\]/{f=0}f')
|
||||||
if ! jq -e . >/dev/null 2>&1 <<<"$mir"; then
|
if ! jq -e . >/dev/null 2>&1 <<<"$mir"; then
|
||||||
|
|||||||
@ -37,7 +37,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_NY_COMPILER_TIMEOUT_MS=20000 \
|
out="$(NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 NYASH_NY_COMPILER_TIMEOUT_MS=20000 \
|
||||||
run_nyash_vm "$tmp_hako" 2>&1 )"; rc=$?
|
run_nyash_vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp_hako" || true
|
rm -f "$tmp_hako" || true
|
||||||
|
|||||||
@ -23,7 +23,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(HAKO_MIR_BUILDER_INTERNAL=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
out="$(HAKO_MIR_BUILDER_INTERNAL=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 "$NYASH_BIN" --backend vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
rm -f "$tmp_hako" || true
|
rm -f "$tmp_hako" || true
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ static box Main { method main(args) {
|
|||||||
HAKO
|
HAKO
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
out="$(out="$(HAKO_MIR_BUILDER_DELEGATE=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 NYASH_PARSER_ALLOW_SEMICOLON=1 run_nyash_vm "$tmp_hako" 2>&1 )"; rc=$?
|
out="$(out="$(HAKO_MIR_BUILDER_DELEGATE=1 NYASH_FEATURES=stage3 NYASH_PARSER_ALLOW_SEMICOLON=1 run_nyash_vm "$tmp_hako" 2>&1 )"; rc=$?
|
||||||
set -e
|
set -e
|
||||||
if [ "$rc" -ne 1 ]; then echo "$out" >&2; echo "[FAIL] varvar_delegate_core (emit)" >&2; rm -f "$tmp_hako" "$tmp_json"; exit 1; fi
|
if [ "$rc" -ne 1 ]; then echo "$out" >&2; echo "[FAIL] varvar_delegate_core (emit)" >&2; rm -f "$tmp_hako" "$tmp_json"; exit 1; fi
|
||||||
# Be tolerant of pretty-printed JSON (multi-line). Validate and capture all.
|
# Be tolerant of pretty-printed JSON (multi-line). Validate and capture all.
|
||||||
|
|||||||
@ -30,7 +30,7 @@ Test suite for string scanner improvements: single-quote support and complete es
|
|||||||
- `'it\'s working'` - single-quote with escape
|
- `'it\'s working'` - single-quote with escape
|
||||||
|
|
||||||
**Requirements**:
|
**Requirements**:
|
||||||
- `NYASH_PARSER_STAGE3=1`
|
- `NYASH_FEATURES=stage3`
|
||||||
- `HAKO_PARSER_STAGE3=1`
|
- `HAKO_PARSER_STAGE3=1`
|
||||||
|
|
||||||
**Expected**: Parser accepts single-quotes in Stage-3
|
**Expected**: Parser accepts single-quotes in Stage-3
|
||||||
|
|||||||
@ -15,7 +15,7 @@ NCODE
|
|||||||
|
|
||||||
set +e
|
set +e
|
||||||
# Test with Stage-3 enabled (single quotes should parse)
|
# Test with Stage-3 enabled (single quotes should parse)
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_FEATURES=stage3 \
|
||||||
"$NYASH_BIN" --backend vm "$tmp_nyash" >/dev/null 2>&1
|
"$NYASH_BIN" --backend vm "$tmp_nyash" >/dev/null 2>&1
|
||||||
rc=$?
|
rc=$?
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@ -35,7 +35,7 @@ OUT=$(HAKO_MIR_BUILDER_INTERNAL=1 \
|
|||||||
HAKO_ROUTE_HAKOVM=1 \
|
HAKO_ROUTE_HAKOVM=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
HAKO_BUILDER_PROGRAM_JSON="$(cat "$tmp_json")" \
|
HAKO_BUILDER_PROGRAM_JSON="$(cat "$tmp_json")" \
|
||||||
run_nyash_vm -c "$builder_code" 2>/dev/null)
|
run_nyash_vm -c "$builder_code" 2>/dev/null)
|
||||||
|
|||||||
@ -29,7 +29,7 @@ OUT=$(HAKO_MIR_BUILDER_INTERNAL=1 \
|
|||||||
HAKO_ROUTE_HAKOVM=1 \
|
HAKO_ROUTE_HAKOVM=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
HAKO_BUILDER_PROGRAM_JSON="$prog_json" \
|
HAKO_BUILDER_PROGRAM_JSON="$prog_json" \
|
||||||
run_nyash_vm -c "$builder_code" 2>/dev/null)
|
run_nyash_vm -c "$builder_code" 2>/dev/null)
|
||||||
|
|||||||
@ -41,7 +41,7 @@ mir_json=$(HAKO_MIR_BUILDER_DELEGATE=1 \
|
|||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 \
|
NYASH_DISABLE_NY_COMPILER=1 \
|
||||||
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
HAKO_BUILDER_PROGRAM_JSON="$prog_json_raw" \
|
||||||
run_nyash_vm -c "$BUILDER_CODE" 2>/dev/null | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
run_nyash_vm -c "$BUILDER_CODE" 2>/dev/null | awk '/\[MIR_OUT_BEGIN\]/{flag=1;next}/\[MIR_OUT_END\]/{flag=0}flag')
|
||||||
|
|||||||
@ -27,8 +27,7 @@ HCODE
|
|||||||
|
|
||||||
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
||||||
export NYASH_DISABLE_NY_COMPILER=1
|
export NYASH_DISABLE_NY_COMPILER=1
|
||||||
export NYASH_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export HAKO_PARSER_STAGE3=1
|
|
||||||
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
||||||
export NYASH_ENABLE_USING=1
|
export NYASH_ENABLE_USING=1
|
||||||
export HAKO_ENABLE_USING=1
|
export HAKO_ENABLE_USING=1
|
||||||
|
|||||||
@ -33,7 +33,7 @@ HCODE
|
|||||||
|
|
||||||
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
||||||
export NYASH_DISABLE_NY_COMPILER=1
|
export NYASH_DISABLE_NY_COMPILER=1
|
||||||
export NYASH_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export HAKO_PARSER_STAGE3=1
|
export HAKO_PARSER_STAGE3=1
|
||||||
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
||||||
export NYASH_ENABLE_USING=1
|
export NYASH_ENABLE_USING=1
|
||||||
@ -55,4 +55,3 @@ if [ ! -f "$path" ]; then
|
|||||||
fi
|
fi
|
||||||
echo "[PASS] phase2044/codegen_provider_llvmlite_compare_branch_canary_vm ($path)"
|
echo "[PASS] phase2044/codegen_provider_llvmlite_compare_branch_canary_vm ($path)"
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@ HCODE
|
|||||||
|
|
||||||
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
export HAKO_FAIL_FAST_ON_HAKO_IN_NYASH_VM=0
|
||||||
export NYASH_DISABLE_NY_COMPILER=1
|
export NYASH_DISABLE_NY_COMPILER=1
|
||||||
export NYASH_PARSER_STAGE3=1
|
export NYASH_FEATURES="${NYASH_FEATURES:-stage3}"
|
||||||
export HAKO_PARSER_STAGE3=1
|
export HAKO_PARSER_STAGE3=1
|
||||||
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
export NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1
|
||||||
export NYASH_ENABLE_USING=1
|
export NYASH_ENABLE_USING=1
|
||||||
@ -46,4 +46,3 @@ if [ ! -f "$path" ]; then
|
|||||||
fi
|
fi
|
||||||
echo "[PASS] phase2044/codegen_provider_llvmlite_const42_canary_vm ($path)"
|
echo "[PASS] phase2044/codegen_provider_llvmlite_const42_canary_vm ($path)"
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -17,7 +17,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -16,7 +16,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -16,7 +16,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -16,7 +16,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -20,7 +20,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 HAKO_PREFER_MIRBUILDER=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$tmp2"
|
verify_program_via_builder_to_core "$tmp2"
|
||||||
rc2=$?
|
rc2=$?
|
||||||
|
|||||||
@ -16,7 +16,7 @@ HAKO_PRIMARY_NO_FALLBACK=1 \
|
|||||||
HAKO_MIR_BUILDER_INTERNAL=1 \
|
HAKO_MIR_BUILDER_INTERNAL=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -19,7 +19,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -20,7 +20,7 @@ HAKO_VERIFY_BUILDER_ONLY=1 \
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -19,7 +19,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -18,7 +18,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
@ -35,7 +35,7 @@ HAKO_V1_EXTERN_PROVIDER=1 \
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc2=$?
|
rc2=$?
|
||||||
|
|||||||
@ -19,7 +19,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -26,7 +26,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -28,7 +28,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -23,7 +23,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@ -17,7 +17,7 @@ set +e
|
|||||||
HAKO_PREFER_MIRBUILDER=1 \
|
HAKO_PREFER_MIRBUILDER=1 \
|
||||||
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 \
|
||||||
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
NYASH_USING_AST=1 NYASH_RESOLVE_FIX_BRACES=1 \
|
||||||
NYASH_DISABLE_NY_COMPILER=1 NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1 \
|
NYASH_DISABLE_NY_COMPILER=1 NYASH_FEATURES=stage3 \
|
||||||
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1 \
|
||||||
verify_program_via_builder_to_core "$prog_json_path"
|
verify_program_via_builder_to_core "$prog_json_path"
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user