Major changes: - LLVM backend initial implementation (compiler.rs, llvm mode) - Semantics layer integration in interpreter (operators.rs) - Phase 12 plugin architecture revision (3-layer system) - Builtin box removal preparation - MIR instruction set documentation (26→Core-15 migration) - Cross-backend testing infrastructure - Await/nowait syntax support New features: - LLVM AOT compilation support (--backend llvm) - Semantics layer for interpreter→VM flow - Tri-backend smoke tests - Plugin-only registry mode Bug fixes: - Interpreter plugin box arithmetic operations - Branch test returns incorrect values Documentation: - Phase 12 README.md updated with new plugin architecture - Removed obsolete NYIR proposals - Added LLVM test programs documentation Co-Authored-By: Claude <noreply@anthropic.com>
2.8 KiB
2.8 KiB
LLVM/AOT Test Programs
このファイルはLLVMバックエンドのテスト用プログラムについて説明します。 これらは主にCIスモークテストで使用されます。
注意: これらのテストプログラムは apps/tests/ ディレクトリに移動されました。
テストプログラム一覧
基本動作テスト
-
ny-llvm-smoke/ - ArrayBox基本操作(push/get)+ print
- 現在の問題: ArrayBoxプラグインの引数エンコーディング問題で "Invalid arguments"
- 状態: NYASH_LLVM_ARRAY_SMOKE=0でデフォルトスキップ
-
ny-array-llvm-ret/ - ArrayBox戻り値テスト(printなし)
- 目的: print依存を排除して安定性向上
- 期待値: Result: 3
-
ny-echo-lite/ - 最小echo実装
- 目的: 標準入力/出力の基本動作確認
- 状態: NYASH_LLVM_ECHO_SMOKE=0でデフォルトスキップ
プラグイン呼び出しテスト
- ny-map-llvm-smoke/ - MapBoxプラグイン基本テスト
- 目的: by-idプラグイン呼び出しの動作確認
- 期待値: "Map: v=42" および "size=1"
可変長引数テスト(VInvoke)
-
ny-vinvoke-smoke/ - 5引数呼び出し(文字列出力)
- 目的: 可変長引数(≥3)のtagged vector経路テスト
- 期待値: "VInvokeRc: 42"
-
ny-vinvoke-llvm-ret/ - 5引数呼び出し(戻り値)✅
- 目的: 可変長引数の戻り値検証
- 期待値: Result: 42
-
ny-vinvoke-llvm-ret-size/ - 0引数呼び出し(size())✅
- 目的: 固定長引数(≤2)の経路テスト
- 期待値: Result: 1
CIスモークテストでの使用
tools/llvm_smoke.shで以下の環境変数により制御:
# 基本テスト(問題があるためデフォルトOFF)
NYASH_LLVM_ARRAY_SMOKE=1 # ny-llvm-smoke
NYASH_LLVM_ARRAY_RET_SMOKE=1 # ny-array-llvm-ret
NYASH_LLVM_ECHO_SMOKE=1 # ny-echo-lite
# プラグインテスト(安定)
NYASH_LLVM_MAP_SMOKE=1 # ny-map-llvm-smoke
NYASH_LLVM_VINVOKE_SMOKE=1 # ny-vinvoke-smoke
NYASH_LLVM_VINVOKE_RET_SMOKE=1 # ny-vinvoke-llvm-ret + ny-vinvoke-llvm-ret-size
既知の問題
-
ArrayBoxプラグイン: set/getで "Invalid arguments" エラー
- 原因: プラグイン側の引数デコード問題
- 対策: 戻り値型テストで回避
-
print文字列連結:
print("Result: " + v)での型エラー- 原因: binop型不一致
- 対策: toString()を使用するか、戻り値型テストで回避
実アプリケーションとの違い
これらのテストプログラムは:
- 最小限の機能に絞った単体テスト
- CI自動実行を前提とした設計
- エラー時の切り分けが容易
実際のアプリケーション(chip8_nyash、kilo_nyash等)とは目的が異なります。