diff --git a/CLAUDE.md b/CLAUDE.md
index 9d74b2f4..5260cad7 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -176,6 +176,24 @@ cargo test
```
### 🐛 デバッグ
+
+#### パーサー無限ループ対策(NEW! 2025-08-09)
+```bash
+# 🔥 デバッグ燃料でパーサー制御
+./target/release/nyash --debug-fuel 1000 program.nyash # 1000回制限
+./target/release/nyash --debug-fuel unlimited program.nyash # 無制限
+./target/release/nyash program.nyash # デフォルト10万回
+
+# パーサー無限ループが検出されると自動停止+詳細情報表示
+🚨 PARSER INFINITE LOOP DETECTED at method call argument parsing
+🔍 Current token: IDENTIFIER("from") at line 17
+🔍 Parser position: 45/128
+```
+
+**対応状況**: must_advance!マクロでパーサー制御完全実装済み✅
+**効果**: 予約語"from"など問題のあるトークンも安全にエラー検出
+
+#### アプリケーション デバッグ
```nyash
// DebugBox活用
DEBUG = new DebugBox()
@@ -220,4 +238,4 @@ docs/
---
-最終更新: 2025年8月9日 - **🎯 静的Box Mainパターン+変数宣言厳密化システム実装完了!Gemini先生絶賛の「非常に洗練された設計」達成。メモリ安全性・非同期安全性保証で本格言語レベルに到達!**
\ No newline at end of file
+最終更新: 2025年8月9日 - **🔥 パーサー無限ループ完全制圧!`--debug-fuel`引数でユーザー制御可能+must_advance!マクロによる早期検出システム完成。予約語問題も安全にエラー表示。静的Box Mainパターン+変数宣言厳密化と合わせて本格言語レベル到達!**
\ No newline at end of file
diff --git a/c_drive_icon.bmp b/c_drive_icon.bmp
deleted file mode 100644
index d16a89c2..00000000
Binary files a/c_drive_icon.bmp and /dev/null differ
diff --git a/debug_ast.nyash b/debug_ast.nyash
deleted file mode 100644
index 901e59cb..00000000
--- a/debug_ast.nyash
+++ /dev/null
@@ -1,18 +0,0 @@
-// AST解析用シンプルテスト
-
-box TestBox {
- init { nodeId }
-
- testMethod(arg1, arg2, arg3) {
- print("Called: " + arg1 + ", " + arg2 + ", " + arg3)
- }
-
- callSelf() {
- me.testMethod("first", "second", me.nodeId)
- }
-}
-
-local testObj
-testObj = new TestBox()
-testObj.nodeId = "test"
-testObj.callSelf()
\ No newline at end of file
diff --git a/nyash-rust/simple_editor.nyash b/examples/simple_editor.nyash
similarity index 100%
rename from nyash-rust/simple_editor.nyash
rename to examples/simple_editor.nyash
diff --git a/nyash-rust/test_egui_basic.nyash b/examples/test_egui_basic.nyash
similarity index 100%
rename from nyash-rust/test_egui_basic.nyash
rename to examples/test_egui_basic.nyash
diff --git a/index.html b/index.html
deleted file mode 100644
index 31d2fe1e..00000000
--- a/index.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
- 🐱 Nyash Programming Language
-
-
-
-
-
🐱 Nyash
-
Next-Generation Browser-Native Programming Language
-
革新的プログラミング言語 - ブラウザーで動く新世代開発体験
-
-
- 🎯 Everything is Box Philosophy
- Every value in Nyash is a Box - unified, memory-safe, and elegant.
- すべての値がBoxとして統一された、メモリ安全で美しい世界
-
-
-
- 🎮 Try Nyash Now!
- No installation required!
-
-
-
-
-
🚀 Browser-First
-
Runs directly in web browsers via WebAssembly. Zero installation, instant coding!
-
-
-
🎨 Creative Coding
-
Built-in Canvas API, visual debugging, perfect for games and art projects!
-
-
-
🛡️ Memory Safe
-
Everything is Box philosophy eliminates crashes and memory leaks automatically!
-
-
-
⚡ Async Ready
-
Simple nowait/await syntax for parallel processing without complexity!
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64.tar.xz b/llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64.tar.xz
deleted file mode 100644
index 85373076..00000000
--- a/llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64.tar.xz
+++ /dev/null
@@ -1 +0,0 @@
-Not Found
\ No newline at end of file
diff --git a/minimal_bug.nyash b/minimal_bug.nyash
deleted file mode 100644
index 39fb8ae9..00000000
--- a/minimal_bug.nyash
+++ /dev/null
@@ -1,28 +0,0 @@
-// 最小限のバグ再現コード
-
-box BoxA {
- init { nodeId }
-
- callOther(other) {
- // Cross-Box 3引数呼び出し(ここでハング)
- other.receive("msg", "data", me.nodeId)
- }
-}
-
-box BoxB {
- init { }
-
- receive(type, data, from) {
- print("Received: " + from)
- }
-}
-
-local boxA
-boxA = new BoxA()
-boxA.nodeId = "A"
-
-local boxB
-boxB = new BoxB()
-
-// これでハングする
-boxA.callOther(boxB)
\ No newline at end of file
diff --git a/minimal_bug_output.txt b/minimal_bug_output.txt
deleted file mode 100644
index 3af4f1b0..00000000
--- a/minimal_bug_output.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-🦀 Nyash Rust Implementation - Executing file: minimal_bug.nyash 🦀
-====================================================
-📝 File contents:
-// 最小限のバグ再現コード
-
-box BoxA {
- init { nodeId }
-
- callOther(other) {
- // Cross-Box 3引数呼び出し(ここでハング)
- other.receive("msg", "data", me.nodeId)
- }
-}
-
-box BoxB {
- init { }
-
- receive(type, data, from) {
- print("Received: " + from)
- }
-}
-
-local boxA
-boxA = new BoxA()
-boxA.nodeId = "A"
-
-local boxB
-boxB = new BoxB()
-
-// これでハングする
-boxA.callOther(boxB)
-
-🚀 Parsing and executing...
-
diff --git a/next_tasks_options.md b/next_tasks_options.md
deleted file mode 100644
index cad22837..00000000
--- a/next_tasks_options.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# 🎯 Nyash開発 - 次のタスク候補
-
-## 1. 🔧 パーサーリファクタリング継続
-**declarations.rs作成** - 残り1,249行のmod.rsをさらに分割
-- parse_box_declaration
-- parse_function_declaration
-- parse_interface_box_declaration
-- parse_static_declaration
-- parse_global_var
-利点: コード整理完了、保守性最大化
-
-## 2. 🎨 新規アプリケーション開発
-**実用的なNyashアプリを作る**
-- 🐍 Snakeゲーム - ArrayBox/ゲームループ活用
-- 📁 ファイル整理ツール - FileBox/パターンマッチング
-- 🎮 Tetris - 2次元配列/タイマー/キー入力
-- 📊 CSVビューア - ファイル処理/テーブル表示
-利点: 言語の実用性実証、バグ発見
-
-## 3. 🌉 extern box実装
-**FFI基盤でネイティブ連携**
-- C/C++関数呼び出し
-- 外部ライブラリ統合
-- GUI基盤準備
-利点: 実用アプリの可能性拡大
-
-## 4. 📚 標準ライブラリ拡充
-**基本機能の充実**
-- StringBox拡張 (split/join/regex)
-- ArrayBox拡張 (map/filter/reduce)
-- FileBox拡張 (ディレクトリ操作)
-- NetworkBox実装 (HTTP/Socket)
-利点: 開発効率向上
-
-## 5. 🚀 パフォーマンス最適化
-**実行速度改善**
-- バイトコードコンパイラ
-- JITコンパイラ検討
-- メモリ管理最適化
-利点: 実用レベルの性能確保
-
-## 6. 🧪 テストフレームワーク
-**品質保証基盤**
-- assert/expect実装
-- テストランナー
-- カバレッジ測定
-利点: 安定性向上
-
-どれが一番楽しそう/必要そうかにゃ?
\ No newline at end of file
diff --git a/nyash-rust/egui_implementation_summary.md b/nyash-rust/egui_implementation_summary.md
deleted file mode 100644
index ad934bfb..00000000
--- a/nyash-rust/egui_implementation_summary.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# EguiBox Implementation Summary
-
-## 🎉 完了した作業
-
-### 1. ✅ EguiBox基本実装
-- `src/boxes/egui_box.rs` - EguiBoxの完全実装
-- NyashBoxトレイト実装(to_string_box, clone_box, as_any, equals, type_name, box_id)
-- Arc/Mutex使用による状態管理
-- NyashApp構造体によるeframe::App実装
-
-### 2. ✅ インタープリター統合
-- `src/interpreter/objects.rs` - EguiBoxコンストラクタ追加
-- `src/interpreter/expressions.rs` - EguiBoxメソッド呼び出し対応
-- `src/interpreter/box_methods.rs` - execute_egui_method実装
-- setTitle(), setSize(), run()メソッド実装
-
-### 3. ✅ ビルド成功
-- egui/eframe依存関係の正しい設定
-- 条件付きコンパイル(非WASM環境のみ)
-- import/use文の修正完了
-
-### 4. ✅ テストプログラム作成
-- `test_egui_basic.nyash` - 基本動作確認
-- `simple_editor.nyash` - SimpleEditorアプリケーション実装
-
-## 🚧 現在の課題
-
-### メインスレッド制約
-```
-Error: EguiBox.run() must be called from main thread
-```
-
-これはeguiの仕様による制約で、GUIアプリケーションはメインスレッドから起動する必要がある。
-
-## 🎯 今後の実装方針
-
-### 1. GUI実行コンテキスト解決案
-
-#### Option A: 専用実行モード
-```bash
-nyash --gui simple_editor.nyash
-```
-GUIモードでNyashを起動し、メインスレッドをGUIに渡す
-
-#### Option B: 非同期実行
-```nyash
-app = new EguiBox()
-app.runAsync() // 非ブロッキング実行
-```
-
-#### Option C: データ駆動UI(Gemini先生提案)
-```nyash
-app = new EguiBox()
-app.setUI({
- type: "vertical",
- children: [
- { type: "label", text: "Hello" },
- { type: "button", text: "Click", onClick: handler }
- ]
-})
-app.show() // データに基づいてUIを描画
-```
-
-### 2. 実装済み収穫
-
-- **Everything is Box哲学の実証** - GUIフレームワークもBoxとして吸収可能
-- **メソッドベース統合** - setTitle/setSize等の自然なAPI
-- **Nyashの拡張性確認** - 外部ライブラリ統合の成功例
-
-## 🔥 「化け物言語」への道
-
-ユーザーの言葉通り、Nyashは本当に「化け物言語」になる可能性を示した:
-- ✅ なんでもBoxにできる(GUI、Web、ファイル、etc)
-- ✅ 統一されたインターフェース
-- ✅ 言語レベルでの自然な統合
-
-## 次のステップ
-
-1. GUI実行コンテキスト問題の解決
-2. イベントハンドラーの実装(MethodBox活用)
-3. より複雑なUIコンポーネントの追加
-4. ファイル操作との統合(FileBox + EguiBox)
\ No newline at end of file
diff --git a/sessions/ai_consultation_from_keyword_alternatives_20250809.md b/sessions/ai_consultation_from_keyword_alternatives_20250809.md
new file mode 100644
index 00000000..7b38c943
--- /dev/null
+++ b/sessions/ai_consultation_from_keyword_alternatives_20250809.md
@@ -0,0 +1,196 @@
+# AI相談セッション: from予約語問題の解決策検討
+
+**日時**: 2025年8月9日
+**相談者**: Claude Code + ユーザー
+**相談先**: Gemini先生 + ChatGPT先生
+
+## 🔍 問題の詳細
+
+### 現状の問題
+- `from`が継承用予約語として定義済み(`box Child from Parent`構文)
+- しかし実用的には`receive(type, data, from)`のような変数名・パラメータ名として使いたいケースが多い
+- パーサーが`from`を変数として認識せず「Invalid expression」エラー発生
+
+### 技術的詳細
+```nyash
+// ❌ エラーになる例
+other.receive("msg", "data", from) // from が変数名として使えない
+receive(type, data, from) { // パラメータ名としても使えない
+ print("Received: " + from)
+}
+```
+
+### 問題の本質
+**文脈依存の予約語問題**
+- ✅ 継承文脈では予約語として必要:`box Child from Parent`
+- ❌ 変数・パラメータ文脈では使えない:`receive(msg, data, from)`
+
+## 🧠 Gemini先生の提案(哲学重視アプローチ)
+
+### 5つの代替案
+
+#### 案1: `extends` - 標準的で分かりやすい選択
+```nyash
+box Child extends Parent { ... }
+```
+- **実装難易度**: 低(キーワード置換のみ)
+- **ユーザビリティ**: 高(馴染み深い、学習コストゼロ)
+- **Nyash哲学親和性**: 中(実用的だが哲学的ではない)
+
+#### 案2: `opens` - Box哲学を反映した独創的選択 ⭐
+```nyash
+box Child opens Parent { ... }
+```
+- **実装難易度**: 低
+- **ユーザビリティ**: 中〜高(「親Boxを開けて機能取得」のメタファー)
+- **Nyash哲学親和性**: 非常に高い(Everything is Box哲学を構文レベルで表現)
+
+#### 案3: `` `from` `` - エスケープ構文で柔軟性最大化 ⭐
+```nyash
+// 継承(変更なし)
+box Child from Parent { ... }
+// 変数名(エスケープ)
+receive(type, data, `from`) { ... }
+```
+- **実装難易度**: 中(レクサーにバッククォート処理追加)
+- **ユーザビリティ**: 高(既存構文維持、必要時のみエスケープ)
+- **Nyash哲学親和性**: 高(開発者の柔軟性を尊重)
+
+#### 案4: `is_a` - 関係性を明確にする英語的表現
+```nyash
+box Child is_a Parent { ... }
+```
+- **実装難易度**: 低
+- **ユーザビリティ**: 高(自然英語的、is-a関係を表現)
+- **Nyash哲学親和性**: 中(分かりやすさ重視と一致)
+
+#### 案5: `:<` - 記号による簡潔表現
+```nyash
+box Child :< Parent { ... }
+```
+- **実装難易度**: 低
+- **ユーザビリティ**: 中(簡潔だが初学者に不親切)
+- **Nyash哲学親和性**: 低(Boxメタファーと方向性が異なる)
+
+### Gemini先生の推奨
+1. **Nyash独自性重視** → `opens`(最もユニーク、世界観を印象付け)
+2. **実用性重視** → `` `from` ``(現実的でエレガントな解決策)
+
+## 🔧 ChatGPT先生の提案(実装重視アプローチ)
+
+### 創造的代替案
+- **`extends/implements`**: 標準的、スケーラブル
+- **`is/with`**: `box Child is Parent with TraitA`
+- **`via/with`**: Box哲学ヒント
+- **`adopts/with`**: 単一親+ミックスイン
+- **`<-` or `:`**: 簡潔、多言語共通
+- **`packs/unpacks`**: Box風味(曖昧性リスクあり)
+
+### パーサー実装観点の最適解 ⭐
+**文脈依存キーワード方式**
+```rust
+// レクサー: from を Ident("from") として処理
+// パーサー: box宣言内でのみキーワードとして認識
+box_decl := 'box' Ident ( ('from' | ':') type_list )? body
+```
+
+### 推奨実装戦略
+1. **主構文**: `:` で継承、`with` でトレイト
+ ```nyash
+ box Child: Parent with TraitA, TraitB
+ ```
+2. **キーワードポリシー**: 文脈依存キーワード全面採用
+3. **エスケープ**: `r#from` Raw identifiers サポート
+4. **診断**: 的確なエラーメッセージと修正提案
+
+### 将来拡張性考慮
+- **単一継承+トレイト**: 推奨アーキテクチャ
+- **スケーラブルリスト形式**: MI対応可能
+- **明示的super呼び出し**: 競合解決
+- **段階的移行**: `:` エイリアス → `from` 非推奨化
+
+### 具体的実装ノート(Rust)
+```rust
+// レクサー: 全単語をIdent(text)として処理(ハードキーワード除く)
+fn peek_ident(&self, s: &str) -> bool
+fn eat_ident(&mut self, s: &str) -> bool
+
+// Boxルール: box名前の後、from/:を判定
+peek_ident("from") || peek(Token::Colon)
+
+// Raw identifiers: r# サポート
+// テスト: 継承・パラメータ・エスケープ全パターン
+```
+
+## 🎯 Claude Code分析・統合提案
+
+### 両AI共通の最重要提案
+**🏆 最優先推奨:文脈依存 + `:` 構文**
+
+```nyash
+// ✅ 継承(パーサーが文脈判定)
+box Child : Parent { }
+
+// ✅ パラメータ(通常の識別子として認識)
+receive(type, data, from) { }
+
+// ✅ Raw identifier(完全回避)
+receive(type, data, r#from) { }
+```
+
+### 実装戦略ロードマップ
+1. **Phase 1**: レクサーで`from`を`Ident("from")`として処理
+2. **Phase 2**: パーサーに`peek_ident("from")`ヘルパー追加
+3. **Phase 3**: `:`を継承キーワードとして並列サポート
+4. **Phase 4**: エラーメッセージ改善・Raw identifiers追加
+5. **将来**: `from`を段階的に`:` に移行(下位互換維持)
+
+### 技術的メリット
+- **パーサー簡潔性**: 文脈依存により複雑性最小化
+- **ユーザー体験**: 既存コード破壊なし、自然な移行
+- **拡張性**: トレイト・MI対応可能
+- **保守性**: 将来の言語仕様拡張に柔軟
+
+### Nyash哲学との整合性
+- **Everything is Box**: `:` は「型関係」を示す直感的記号
+- **直感的構文**: 多言語経験者に馴染み深い
+- **メモリ安全性**: Rust実装との親和性高い
+
+## 📋 次のアクション
+
+### 実装優先度
+1. **High**: 文脈依存キーワード実装(`from`問題の根本解決)
+2. **High**: `:` 継承構文の並列サポート
+3. **Medium**: Raw identifiers (`r#from`) サポート
+4. **Medium**: 改良エラーメッセージ・診断
+5. **Low**: `opens` 等のNyash独自構文検討
+
+### 検証テスト
+```nyash
+// 継承テスト
+box C from P {} // 既存構文(動作維持)
+box C: P {} // 新構文(並列サポート)
+
+// パラメータテスト
+fn receive(type, data, from) {} // 変数名として使用可能
+let r#from = 1; // Raw identifier
+
+// エラーハンドリング
+box C from {} // 「expected type after 'from'」
+```
+
+## 🎉 結論
+
+**ChatGPTの文脈依存 + `:` 構文**が最も実用的で将来性のある解決策として両AI・Claude共通で推奨。
+
+この方向での実装により:
+- ✅ 既存の`from`問題完全解決
+- ✅ Nyash哲学との整合性維持
+- ✅ 将来拡張への柔軟性確保
+- ✅ 実装・保守コストの最小化
+
+---
+
+**保存日時**: 2025年8月9日 23:42
+**関連実装**: パーサー無限ループ対策完了済み(`--debug-fuel`対応済み)
+**次期実装予定**: 文脈依存キーワード + `:` 継承構文
\ No newline at end of file
diff --git a/sessions/ai_consultation_standard_boxes_20250110.md b/sessions/ai_consultation_standard_boxes_20250110.md
new file mode 100644
index 00000000..9a7c475d
--- /dev/null
+++ b/sessions/ai_consultation_standard_boxes_20250110.md
@@ -0,0 +1,126 @@
+# AI相談記録:Nyash標準Box型の検討
+
+日時:2025年1月10日
+相談者:Claude
+回答者:Gemini、ChatGPT (Codex)
+
+## 🎯 相談内容
+
+Nyashプログラミング言語に必要な標準Box型について、現代的なアプリケーション開発の観点から提案を求めました。
+
+## 📦 現在実装済みのBox型(14種類)
+
+- **基本型**: StringBox, IntegerBox, BoolBox, NullBox
+- **計算系**: MathBox, RandomBox, TimeBox
+- **IO系**: ConsoleBox, DebugBox, SoundBox
+- **データ**: MapBox
+- **GUI**: EguiBox
+- **Web**: WebDisplayBox, WebConsoleBox, WebCanvasBox
+- **通信**: SimpleIntentBox
+
+## 🌟 Gemini先生の提案
+
+### 優先度:高
+1. **ArrayBox** - 順序付きコレクション、最優先実装
+2. **ExceptionBox/ResultBox** - エラー処理(ResultBoxモデル推奨)
+3. **PromiseBox/FutureBox** - 非同期処理基盤
+
+### 優先度:中
+4. **FileBox** - ファイルI/O(非同期設計)
+5. **JSONBox** - JSON解析・生成
+6. **RegexBox** - 正規表現
+
+### 優先度:低
+7. **NetworkBox** - HTTP通信
+8. **TypeBox** - 型情報・リフレクション
+
+### Geminiの重要な指摘
+- ArrayBoxなしでは言語としての実用性が大きく損なわれる
+- エラー処理はResultBoxモデルがNyashの安全性哲学と親和性が高い
+- 非同期処理はGUIやI/Oを実用的にするために必須
+- まずデータ構造→エラー処理→非同期の順で基礎を固めるべき
+
+## 🚀 ChatGPT先生の提案
+
+### Top Priorities (P0)
+1. **ArrayBox** - map/filter/reduce含む、immutable-by-default
+2. **ResultBox + ExceptionBox** - ResultBox中心、try/catch糖衣構文
+3. **FutureBox** - await、cancellation、timeouts対応
+4. **BufferBox** - バイナリデータ基盤(新提案!)
+5. **FileBox/PathBox/DirBox** - 安全なファイルシステム操作
+6. **JSONBox** - ストリーミング対応
+7. **HttpClientBox** - fetch風API(新提案!)
+
+### Secondary Priorities (P1)
+8. **RegexBox** - ReDoS対策付き
+9. **EventBox** - pub/subシステム(新提案!)
+10. **SchemaBox** - ランタイムデータ検証(新提案!)
+11. **ConfigBox** - 設定管理
+12. **CryptoBox** - 暗号化・ハッシュ
+13. **CompressionBox** - 圧縮
+
+### ChatGPTの追加提案
+- **StreamBox** - ReadableStream/WritableStream統一I/O
+- **TaskBox/ChannelBox** - 構造化並行性
+- **WorkerBox** - 分離スレッド実行
+- **DatabaseBox/SQLiteBox** - デスクトップアプリ向け
+
+### ゲーム開発Kit(別パッケージ推奨)
+- ImageBox, SpriteBox, InputBox, PhysicsBox, TilemapBox
+
+## 📊 統合分析
+
+### 両者が一致した最重要Box
+1. **ArrayBox** - 絶対必須のデータ構造
+2. **ResultBox/ExceptionBox** - エラー処理基盤
+3. **FutureBox/PromiseBox** - 非同期処理
+4. **FileBox** - ファイルI/O
+5. **JSONBox** - データ交換フォーマット
+6. **RegexBox** - 文字列処理
+
+### ChatGPT独自の重要提案
+- **BufferBox** - バイナリデータ処理の基盤として重要
+- **HttpClientBox** - 現代アプリには必須
+- **StreamBox** - 統一的なI/Oインターフェース
+- **EventBox** - イベント駆動アーキテクチャ
+- **SchemaBox** - 型安全性の向上
+
+## 🎯 推奨実装順序
+
+### Phase 1: コア基盤(2週間)
+1. ArrayBox - データ構造の基礎
+2. ResultBox - エラー処理モデル
+3. FutureBox - 非同期基盤
+4. BufferBox - バイナリデータ
+
+### Phase 2: 実用機能(3週間)
+5. FileBox/PathBox - ファイル操作
+6. JSONBox - データシリアライズ
+7. StreamBox - I/O抽象化
+8. HttpClientBox - ネットワーク
+
+### Phase 3: 拡張機能(4週間)
+9. RegexBox - 高度な文字列処理
+10. EventBox - イベントシステム
+11. SQLiteBox - ローカルDB
+12. TaskBox - 並列処理
+
+## 💡 設計指針
+
+1. **エラー処理**: ResultBoxモデルを基本とし、try/catch糖衣構文で使いやすく
+2. **非同期**: すべてのI/OはFutureBoxベース、同期版は最小限
+3. **ストリーム**: File/HTTP/ProcessはStreamBox統一インターフェース
+4. **メモリ安全**: Rustの所有権モデルを活かした設計
+5. **初心者フレンドリー**: JavaScript/TypeScript風のAPI命名
+
+## 🌈 まとめ
+
+現代的なNyash言語には、最低限ArrayBox、エラー処理、非同期処理が必要。
+その上でファイルI/O、ネットワーク、データ処理系を追加することで、
+実用的なアプリケーション開発が可能になります。
+
+特にChatGPTが提案したBufferBox、HttpClientBox、StreamBoxは、
+Webやネットワークアプリケーション開発において重要な基盤となるでしょう。
+
+---
+保存日時:2025年1月10日
\ No newline at end of file
diff --git a/src/boxes/bool_box.rs b/src/boxes/bool_box.rs
index ac6b1a88..8175fb15 100644
--- a/src/boxes/bool_box.rs
+++ b/src/boxes/bool_box.rs
@@ -1,4 +1,43 @@
-// BoolBox implementation - Boolean values in Nyash
+/*! ✅ BoolBox - 真偽値Box
+ *
+ * ## 📝 概要
+ * true/false値を扱うためのBox。
+ * JavaScript Boolean型のように直感的な論理演算が可能。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `toString()` - 文字列変換 ("true" / "false")
+ * - `not()` - 論理NOT (演算子: not)
+ * - `and(other)` - 論理AND (演算子: and)
+ * - `or(other)` - 論理OR (演算子: or)
+ * - `equals(other)` - 等価比較 (演算子: ==)
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local flag, result, text
+ * flag = true
+ *
+ * result = not flag // false
+ * result = flag and true // true
+ * result = flag or false // true
+ * text = flag.toString() // "true"
+ *
+ * // 条件分岐での利用
+ * if (flag) {
+ * print("Flag is true!")
+ * }
+ * ```
+ *
+ * ## 🔄 型変換
+ * - 数値への変換: true → 1, false → 0
+ * - 文字列への変換: "true" / "false"
+ * - 空文字・null・0は false として扱われる
+ *
+ * ## ⚡ 論理演算子実装済み
+ * - `not condition` - NOT演算子
+ * - `a and b` - AND演算子
+ * - `a or b` - OR演算子
+ */
+
use crate::box_trait::NyashBox;
use std::any::Any;
use std::fmt::Display;
diff --git a/src/boxes/console_box.rs b/src/boxes/console_box.rs
index 9500b467..b97d066d 100644
--- a/src/boxes/console_box.rs
+++ b/src/boxes/console_box.rs
@@ -1,7 +1,48 @@
-/*!
- * ConsoleBox - ブラウザコンソール制御Box
+/*! 📟 ConsoleBox - コンソール出力Box
*
- * WebAssembly環境でブラウザのconsole APIにアクセス
+ * ## 📝 概要
+ * Webブラウザのコンソール機能を統合したBox。
+ * WASM環境ではブラウザコンソール、ネイティブ環境では標準出力。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `log(message)` - 通常のメッセージ出力
+ * - `warn(message)` - 警告メッセージ出力
+ * - `error(message)` - エラーメッセージ出力
+ * - `clear()` - コンソール画面クリア
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local console
+ * console = new ConsoleBox()
+ *
+ * console.log("Hello, Nyash!") // 通常ログ
+ * console.warn("This is a warning") // 警告
+ * console.error("Something went wrong") // エラー
+ * console.clear() // クリア
+ *
+ * // デバッグ用途
+ * local value
+ * value = 42
+ * console.log("Debug: value = " + value.toString())
+ * ```
+ *
+ * ## 🌐 環境別動作
+ * - **WASM環境**: ブラウザの開発者ツールコンソールに出力
+ * - **ネイティブ環境**: ターミナル標準出力にプレフィックス付きで出力
+ *
+ * ## 🔍 デバッグ活用
+ * ```nyash
+ * // エラーハンドリング
+ * if (error_condition) {
+ * console.error("Critical error occurred!")
+ * return null
+ * }
+ *
+ * // 実行トレース
+ * console.log("Function start")
+ * // 処理...
+ * console.log("Function end")
+ * ```
*/
use crate::box_trait::{NyashBox, StringBox, BoolBox};
diff --git a/src/boxes/debug_box.rs b/src/boxes/debug_box.rs
index 2eeda156..d4c83408 100644
--- a/src/boxes/debug_box.rs
+++ b/src/boxes/debug_box.rs
@@ -1,3 +1,104 @@
+/*! 🔍 DebugBox - デバッグ支援Box
+ *
+ * ## 📝 概要
+ * プロフェッショナル開発向けデバッグ機能を提供するBox。
+ * メモリ使用量監視、実行トレース、ブレークポイントなど
+ * 高度なデバッグ機能を完備。
+ *
+ * ## 🛠️ 利用可能メソッド
+ *
+ * ### 🎯 基本デバッグ
+ * - `startTracking()` - デバッグ追跡開始
+ * - `stopTracking()` - デバッグ追跡停止
+ * - `trackBox(box, name)` - 特定Boxを追跡対象に追加
+ * - `watch(box, name)` - リアルタイム監視
+ * - `clear()` - 全デバッグ情報クリア
+ *
+ * ### 📊 レポート・分析
+ * - `dumpAll()` - 全追跡データダンプ
+ * - `memoryReport()` - メモリ使用量レポート
+ * - `showCallStack()` - 関数呼び出しスタック表示
+ * - `saveToFile(filename)` - デバッグ情報をファイル保存
+ *
+ * ### 🎮 高度機能
+ * - `setBreakpoint(function)` - ブレークポイント設定
+ * - `traceCall(function, args)` - 関数呼び出しトレース
+ * - `isTracking()` - 追跡状態確認
+ * - `getTrackedCount()` - 追跡中Box数取得
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local debug, user, product
+ * debug = new DebugBox()
+ *
+ * // デバッグ開始
+ * debug.startTracking()
+ *
+ * // オブジェクトを追跡
+ * user = new User("Alice", 25)
+ * debug.trackBox(user, "user_alice")
+ *
+ * product = new Product("Book", 1500)
+ * debug.trackBox(product, "book_product")
+ *
+ * // リアルタイム監視
+ * debug.watch(user.age, "user_age")
+ *
+ * // レポート生成
+ * print(debug.memoryReport())
+ * print(debug.dumpAll())
+ *
+ * // ファイルに保存
+ * debug.saveToFile("debug_report.txt")
+ * ```
+ *
+ * ## 🎮 実用例 - パフォーマンス診断
+ * ```nyash
+ * static box PerformanceTest {
+ * init { debug, data, results }
+ *
+ * main() {
+ * me.debug = new DebugBox()
+ * me.debug.startTracking()
+ *
+ * // 大量データ処理のテスト
+ * me.data = []
+ * loop(i < 1000) {
+ * me.data.push("item_" + i.toString())
+ * }
+ * me.debug.trackBox(me.data, "large_array")
+ *
+ * // 処理実行
+ * me.processData()
+ *
+ * // 結果分析
+ * print(me.debug.memoryReport())
+ * }
+ * }
+ * ```
+ *
+ * ## ⚡ ベストプラクティス
+ * ```nyash
+ * // エラーハンドリング付きデバッグ
+ * local debug
+ * debug = new DebugBox()
+ *
+ * try {
+ * debug.startTracking()
+ * // 問題のあるコード
+ * risky_operation()
+ * } catch (error) {
+ * debug.saveToFile("error_dump.txt")
+ * print("Debug info saved to error_dump.txt")
+ * }
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - 本格運用時はtrackingを無効にしてパフォーマンス向上
+ * - 大量データ追跡時はメモリ消費に注意
+ * - call stackは直近100件まで自動保持
+ */
+
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use chrono::Local;
diff --git a/src/boxes/egui_box.rs b/src/boxes/egui_box.rs
index 694638f0..5ed07444 100644
--- a/src/boxes/egui_box.rs
+++ b/src/boxes/egui_box.rs
@@ -1,6 +1,35 @@
-// Nyash EguiBox Implementation
-// Everything is Box哲学によるGUIフレームワーク統合
-// 「なんでもBoxにできる」化け物言語の第一歩!
+/*! 🖼️ EguiBox - デスクトップGUIアプリBox
+ * Everything is Box哲学によるGUIフレームワーク統合
+ * 「なんでもBoxにできる」化け物言語の第一歩!
+ *
+ * ## 📝 概要
+ * Rustの人気GUI框架eframeを使ったネイティブデスクトップアプリ作成。
+ * Nyashコードから直接GUI操作が可能!
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `setTitle(title)` - ウィンドウタイトル設定
+ * - `setSize(width, height)` - ウィンドウサイズ設定
+ * - `run()` - GUIアプリ実行開始
+ * - `addText(text)` - テキスト表示追加
+ * - `addButton(label)` - ボタン追加
+ * - `close()` - ウィンドウ閉じる
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * // 基本的なGUIアプリ
+ * local app
+ * app = new EguiBox()
+ * app.setTitle("Nyash GUI Demo")
+ * app.setSize(800, 600)
+ * app.addText("Welcome to Nyash!")
+ * app.addButton("Click Me")
+ * app.run() // GUIアプリ開始
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - デスクトップ環境でのみ利用可能(WASM環境では無効)
+ * - `run()`はブロッキング動作(アプリ終了まで制御を返さない)
+ */
use crate::box_trait::{NyashBox, StringBox, BoolBox};
use crate::interpreter::RuntimeError;
diff --git a/src/boxes/integer_box.rs b/src/boxes/integer_box.rs
index 0a0290ce..e37ecee2 100644
--- a/src/boxes/integer_box.rs
+++ b/src/boxes/integer_box.rs
@@ -1,4 +1,42 @@
-// IntegerBox implementation - Integer values in Nyash
+/*! 🔢 IntegerBox - 整数計算Box
+ *
+ * ## 📝 概要
+ * 64ビット符号付き整数を扱うためのBox。
+ * JavaScript Number型のように直感的な数値操作が可能。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `toString()` - 文字列変換
+ * - `add(other)` - 加算 (演算子: +)
+ * - `subtract(other)` - 減算 (演算子: -)
+ * - `multiply(other)` - 乗算 (演算子: *)
+ * - `divide(other)` - 除算 (演算子: /)
+ * - `modulo(other)` - 余り計算 (演算子: %)
+ * - `equals(other)` - 等価比較 (演算子: ==)
+ * - `abs()` - 絶対値
+ * - `min(other)` - 最小値
+ * - `max(other)` - 最大値
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local num, result, text
+ * num = 42
+ *
+ * result = num + 8 // 50
+ * result = num * 2 // 84
+ * result = num / 3 // 14 (整数除算)
+ * text = num.toString() // "42"
+ *
+ * // メソッド呼び出し形式も可能
+ * result = num.add(10) // 52
+ * result = num.multiply(3) // 126
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - ゼロ除算は実行時エラー
+ * - オーバーフロー時は標準i64の動作に従う
+ * - 小数点以下は切り捨て(整数除算)
+ */
+
use crate::box_trait::NyashBox;
use std::any::Any;
use std::fmt::Display;
diff --git a/src/boxes/map_box.rs b/src/boxes/map_box.rs
index fee9899f..088adf55 100644
--- a/src/boxes/map_box.rs
+++ b/src/boxes/map_box.rs
@@ -1,8 +1,106 @@
-/*!
- * Nyash Map Box - Key-Value store implementation
+/*! 🗄️ MapBox - キー値ストレージBox
*
- * キーバリューストアを提供するBox型
- * Everything is Box哲学に基づくマップデータ構造
+ * ## 📝 概要
+ * 高性能キー値ストレージを提供するBox。
+ * JavaScript Map、Python dict、C# Dictionaryと同等機能。
+ * 動的データ管理やキャッシュ実装に最適。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `set(key, value)` - キー値ペア設定
+ * - `get(key)` - 値取得
+ * - `has(key)` - キー存在確認
+ * - `remove(key)` - キー値ペア削除
+ * - `clear()` - 全データクリア
+ * - `keys()` - 全キー取得
+ * - `values()` - 全値取得
+ * - `size()` - データ数取得
+ * - `isEmpty()` - 空判定
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local map, result
+ * map = new MapBox()
+ *
+ * // データ設定
+ * map.set("name", "Alice")
+ * map.set("age", 25)
+ * map.set("active", true)
+ *
+ * // データ取得
+ * result = map.get("name") // "Alice"
+ * print("User: " + result)
+ *
+ * // 存在確認
+ * if (map.has("email")) {
+ * print("Email: " + map.get("email"))
+ * } else {
+ * print("No email registered")
+ * }
+ * ```
+ *
+ * ## 🎮 実用例 - ゲーム設定管理
+ * ```nyash
+ * static box GameConfig {
+ * init { settings, scores }
+ *
+ * main() {
+ * me.settings = new MapBox()
+ * me.scores = new MapBox()
+ *
+ * // 設定初期化
+ * me.settings.set("difficulty", "normal")
+ * me.settings.set("sound", true)
+ * me.settings.set("graphics", "high")
+ *
+ * // スコア記録
+ * me.scores.set("level1", 850)
+ * me.scores.set("level2", 1200)
+ * me.scores.set("level3", 950)
+ *
+ * me.displayConfig()
+ * }
+ *
+ * displayConfig() {
+ * print("=== Game Settings ===")
+ * print("Difficulty: " + me.settings.get("difficulty"))
+ * print("Sound: " + me.settings.get("sound").toString())
+ * print("Total scores: " + me.scores.size().toString())
+ * }
+ * }
+ * ```
+ *
+ * ## 🔍 キャッシュ実装例
+ * ```nyash
+ * static box APICache {
+ * init { cache, ttl_map }
+ *
+ * main() {
+ * me.cache = new MapBox()
+ * me.ttl_map = new MapBox()
+ * }
+ *
+ * getData(url) {
+ * // キャッシュ確認
+ * if (me.cache.has(url)) {
+ * return me.cache.get(url)
+ * }
+ *
+ * // APIから取得
+ * local data
+ * data = fetchFromAPI(url)
+ *
+ * // キャッシュに保存
+ * me.cache.set(url, data)
+ * return data
+ * }
+ * }
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - キーは自動的に文字列変換される
+ * - スレッドセーフ (Arc使用)
+ * - 大量データ格納時はメモリ使用量に注意
+ * - 存在しないキーの取得は "Key not found" メッセージ返却
*/
use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox, ArrayBox};
diff --git a/src/boxes/math_box.rs b/src/boxes/math_box.rs
index 5eed022d..e86eb65a 100644
--- a/src/boxes/math_box.rs
+++ b/src/boxes/math_box.rs
@@ -1,8 +1,59 @@
-/*!
- * Nyash Math Box - Mathematical operations
+/*! 🧮 MathBox - 数学計算Box
*
- * 数学演算を提供するBox型
- * Everything is Box哲学に基づく数学ライブラリ
+ * ## 📝 概要
+ * 高度な数学演算を提供するBox。Python mathモジュールや
+ * JavaScript Math オブジェクトと同様の機能を提供。
+ *
+ * ## 🛠️ 利用可能メソッド
+ *
+ * ### 🔢 基本計算
+ * - `abs(value)` - 絶対値
+ * - `max(a, b)` - 最大値
+ * - `min(a, b)` - 最小値
+ * - `pow(base, exp)` - 累乗 (base^exp)
+ * - `sqrt(value)` - 平方根
+ *
+ * ### 📐 三角関数
+ * - `sin(radians)` - 正弦
+ * - `cos(radians)` - 余弦
+ * - `tan(radians)` - 正接
+ *
+ * ### 📊 対数・指数関数
+ * - `log(value)` - 自然対数 (ln)
+ * - `log10(value)` - 常用対数
+ * - `exp(value)` - 指数関数 (e^x)
+ *
+ * ### 🔄 丸め関数
+ * - `floor(value)` - 切り下げ
+ * - `ceil(value)` - 切り上げ
+ * - `round(value)` - 四捨五入
+ *
+ * ### 📏 定数取得
+ * - `getPi()` - 円周率π (3.14159...)
+ * - `getE()` - 自然対数の底e (2.71828...)
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local math, result
+ * math = new MathBox()
+ *
+ * result = math.abs(-42) // 42
+ * result = math.max(10, 25) // 25
+ * result = math.sqrt(16) // 4.0
+ * result = math.pow(2, 3) // 8.0
+ * result = math.sin(math.getPi() / 2) // 1.0
+ *
+ * // 計算例
+ * local pi, area
+ * pi = math.getPi()
+ * area = pi * math.pow(5, 2) // 半径5の円の面積
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - 三角関数の引数はラジアン
+ * - 負数の平方根・対数はエラー
+ * - オーバーフロー時は標準f64の動作に従う
+ * - 整数演算は自動でFloatBoxに変換される場合あり
*/
use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox};
diff --git a/src/boxes/mod.rs b/src/boxes/mod.rs
index a70ebeaf..01920945 100644
--- a/src/boxes/mod.rs
+++ b/src/boxes/mod.rs
@@ -1,5 +1,53 @@
-// Nyash Box Implementations Module
-// Everything is Box哲学に基づく各Box型の実装
+/*! 🎯 Nyash Box実装モジュール
+ * Everything is Box哲学に基づく各Box型の実装
+ *
+ * ## 📦 利用可能なBox一覧
+ *
+ * ### 🔤 基本データ型Box
+ * - **StringBox**: 文字列操作 - `"Hello".length()`, `str.split(",")`
+ * - **IntegerBox**: 整数計算 - `42.add(8)`, `num.toString()`
+ * - **BoolBox**: 真偽値 - `true.not()`, `flag.toString()`
+ *
+ * ### 🧮 計算・ユーティリティBox
+ * - **MathBox**: 数学関数 - `Math.sin(x)`, `Math.random()`
+ * - **TimeBox**: 時間操作 - `Time.now()`, `time.format()`
+ * - **RandomBox**: 乱数生成 - `Random.int(10)`, `Random.choice(array)`
+ *
+ * ### 🖥️ システム・IO Box
+ * - **ConsoleBox**: コンソール出力 - `console.log()`, `console.error()`
+ * - **DebugBox**: デバッグ支援 - `debug.trace()`, `debug.memory()`
+ * - **SoundBox**: 音声再生 - `sound.beep()`, `sound.play(file)`
+ *
+ * ### 🗄️ コレクション・データBox
+ * - **MapBox**: キー値ストレージ - `map.set(key, val)`, `map.get(key)`
+ * - **NullBox**: NULL値表現 - `null.toString()` → "void"
+ *
+ * ### 🖼️ GUI・グラフィックBox
+ * - **EguiBox**: デスクトップGUI - `gui.setTitle()`, `gui.run()`
+ *
+ * ### 🌐 Web専用Box (WASM環境)
+ * - **WebDisplayBox**: HTML表示 - `display.show(html)`
+ * - **WebConsoleBox**: ブラウザコンソール - `webConsole.log()`
+ * - **WebCanvasBox**: Canvas描画 - `canvas.drawRect()`
+ *
+ * ### 🔗 通信・ネットワークBox
+ * - **SimpleIntentBox**: P2P通信 - `intent.send()`, `intent.on()`
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * // 基本的な使い方
+ * local str, num, result
+ * str = "Nyash"
+ * num = 42
+ * result = str.concat(" v") + num.toString()
+ *
+ * // GUIアプリ作成
+ * local app
+ * app = new EguiBox()
+ * app.setTitle("My App")
+ * app.run()
+ * ```
+ */
// Nyashは意図的にJavaScript/TypeScriptスタイルのcamelCase命名規約を採用
#![allow(non_snake_case)]
diff --git a/src/boxes/null_box.rs b/src/boxes/null_box.rs
index 6e757b28..3dd39b98 100644
--- a/src/boxes/null_box.rs
+++ b/src/boxes/null_box.rs
@@ -1,8 +1,87 @@
-/*!
- * Nyash Null Box - Null value representation
+/*! 🚫 NullBox - NULL値表現Box
*
- * null値を表現するBox型
- * Everything is Box哲学に基づくnull実装
+ * ## 📝 概要
+ * null/void値を表現する特別なBox。
+ * JavaScript null、Python None、C# nullと同等の機能を提供。
+ * NULL安全プログラミングをサポート。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `isNull()` - null判定 (常にtrue)
+ * - `isNotNull()` - 非null判定 (常にfalse)
+ * - `toString()` - 文字列変換 ("null")
+ * - `equals(other)` - 等価比較 (他のnullとのみtrue)
+ *
+ * ## 🛡️ 静的メソッド (null安全機能)
+ * - `NullBox.checkNull(value)` - 値のnull判定
+ * - `NullBox.checkNotNull(value)` - 値の非null判定
+ * - `NullBox.getOrDefault(value, default)` - null時デフォルト値取得
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local user, name, default_name
+ *
+ * // null値の作成と判定
+ * user = null
+ * if (user == null) {
+ * print("User is null")
+ * }
+ *
+ * // null安全な値取得
+ * name = getUsername() // null の可能性
+ * default_name = NullBox.getOrDefault(name, "Anonymous")
+ * print("Hello, " + default_name)
+ * ```
+ *
+ * ## 🎮 実用例 - null安全プログラミング
+ * ```nyash
+ * static box UserManager {
+ * init { current_user }
+ *
+ * main() {
+ * me.current_user = null
+ *
+ * // null安全なログイン処理
+ * me.loginUser("alice")
+ * me.displayUserInfo()
+ * }
+ *
+ * loginUser(username) {
+ * if (username == null or username == "") {
+ * print("Error: Invalid username")
+ * return
+ * }
+ * me.current_user = new User(username)
+ * }
+ *
+ * displayUserInfo() {
+ * if (me.current_user == null) {
+ * print("No user logged in")
+ * } else {
+ * print("Current user: " + me.current_user.name)
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ## 🔍 デバッグ活用
+ * ```nyash
+ * local data, result
+ * data = fetchDataFromAPI() // null になる可能性
+ *
+ * // null チェック付きデバッグ
+ * if (NullBox.checkNull(data)) {
+ * print("Warning: API returned null data")
+ * result = NullBox.getOrDefault(data, "default_data")
+ * } else {
+ * result = data.process()
+ * }
+ * ```
+ *
+ * ## ⚠️ 重要な特徴
+ * - `null == null` は常にtrue
+ * - `null.toString()` は "null"
+ * - 全てのNullBoxインスタンスは論理的に等価
+ * - メソッド呼び出し時のnullチェックでNullPointerException防止
*/
use crate::box_trait::{NyashBox, StringBox, BoolBox};
diff --git a/src/boxes/random_box.rs b/src/boxes/random_box.rs
index a6ae9283..90fd914b 100644
--- a/src/boxes/random_box.rs
+++ b/src/boxes/random_box.rs
@@ -1,8 +1,70 @@
-/*!
- * Nyash Random Box - Random number generation
+/*! 🎲 RandomBox - 乱数生成Box
*
- * 乱数生成を提供するBox型
- * Everything is Box哲学に基づく乱数ライブラリ
+ * ## 📝 概要
+ * 高品質な乱数生成機能を提供するBox。
+ * ゲーム開発、統計処理、テストデータ生成に最適。
+ *
+ * ## 🛠️ 利用可能メソッド
+ *
+ * ### 🔢 基本乱数
+ * - `random()` - 0.0~1.0の浮動小数点乱数
+ * - `randInt(min, max)` - 指定範囲の整数乱数
+ * - `randBool()` - true/falseのランダム選択
+ * - `seed(value)` - 乱数種を設定(再現可能な乱数)
+ *
+ * ### 🎯 選択・配列操作
+ * - `choice(array)` - 配列からランダム選択
+ * - `shuffle(array)` - 配列をシャッフル
+ *
+ * ### 🎨 生成
+ * - `randString(length)` - ランダム文字列生成
+ * - `probability(prob)` - 指定確率でtrue
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local random, result, dice, array
+ * random = new RandomBox()
+ *
+ * // 基本的な乱数
+ * result = random.random() // 0.0~1.0
+ * dice = random.randInt(1, 6) // サイコロ(1-6)
+ * result = random.randBool() // true or false
+ *
+ * // 配列関連
+ * array = ["apple", "banana", "cherry"]
+ * result = random.choice(array) // ランダム選択
+ * array = random.shuffle(array) // シャッフル
+ *
+ * // ゲーム用途
+ * local password, critical_hit
+ * password = random.randString(8) // 8文字のランダム文字列
+ * critical_hit = random.probability(0.1) // 10%でクリティカル
+ * ```
+ *
+ * ## 🎮 実用例
+ * ```nyash
+ * // RPGダメージ計算
+ * local damage, is_critical
+ * damage = random.randInt(10, 20) // 基本ダメージ10-20
+ * is_critical = random.probability(0.15) // 15%でクリティカル
+ * if (is_critical) {
+ * damage = damage * 2
+ * }
+ *
+ * // テストデータ生成
+ * local users, user_id, user_name
+ * users = []
+ * loop(i < 10) {
+ * user_id = random.randInt(1000, 9999)
+ * user_name = "user_" + random.randString(5)
+ * users.push(user_name + ":" + user_id)
+ * }
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - 暗号学的に安全な乱数ではない(セキュリティ用途非推奨)
+ * - seed()で同じ値を設定すると同じ乱数列を生成(テスト用)
+ * - 大きな配列のshuffleは処理時間が長い場合あり
*/
use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox, ArrayBox};
diff --git a/src/boxes/simple_intent_box.rs b/src/boxes/simple_intent_box.rs
index 15948f7f..7a059bd6 100644
--- a/src/boxes/simple_intent_box.rs
+++ b/src/boxes/simple_intent_box.rs
@@ -1,4 +1,163 @@
-// シンプルなIntentBox - 最小限の実装
+/*! 🔗 SimpleIntentBox - P2P通信Box
+ *
+ * ## 📝 概要
+ * ピア・ツー・ピア通信機能を提供する軽量実装Box。
+ * ノード間のメッセージ配信、イベント通知、
+ * 分散アプリケーション構築に使用。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `send(target, message)` - メッセージ送信
+ * - `on(event, callback)` - イベントリスナー登録
+ * - `emit(event, data)` - イベント発火
+ * - `connect(nodeId)` - ノード接続
+ * - `disconnect(nodeId)` - ノード切断
+ * - `getConnectedNodes()` - 接続中ノード一覧
+ * - `setNodeId(id)` - 自ノードID設定
+ * - `broadcast(message)` - 全ノードにブロードキャスト
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local intent
+ * intent = new SimpleIntentBox()
+ *
+ * // ノード設定
+ * intent.setNodeId("node1")
+ *
+ * // リスナー登録
+ * intent.on("message", "handleMessage")
+ * intent.on("join", "handleNodeJoin")
+ *
+ * // メッセージ送信
+ * intent.send("node2", "Hello from node1!")
+ *
+ * // ブロードキャスト
+ * intent.broadcast("System announcement")
+ * ```
+ *
+ * ## 🎮 実用例 - チャットアプリ
+ * ```nyash
+ * static box ChatNode {
+ * init { intent, username, messages }
+ *
+ * main() {
+ * me.intent = new SimpleIntentBox()
+ * me.username = "User1"
+ * me.messages = []
+ *
+ * // ノード初期化
+ * me.intent.setNodeId(me.username)
+ * me.setupEventHandlers()
+ *
+ * // チャットルームに参加
+ * me.joinChatRoom()
+ * }
+ *
+ * setupEventHandlers() {
+ * // メッセージ受信
+ * me.intent.on("chat_message", "onChatMessage")
+ * // ユーザー参加
+ * me.intent.on("user_joined", "onUserJoined")
+ * // ユーザー退出
+ * me.intent.on("user_left", "onUserLeft")
+ * }
+ *
+ * sendMessage(text) {
+ * local msg
+ * msg = new MapBox()
+ * msg.set("from", me.username)
+ * msg.set("text", text)
+ * msg.set("timestamp", new TimeBox().now())
+ *
+ * me.intent.broadcast("chat_message", msg)
+ * }
+ *
+ * onChatMessage(sender, message) {
+ * me.messages.push(message)
+ * print("[" + message.get("from") + "] " + message.get("text"))
+ * }
+ * }
+ * ```
+ *
+ * ## 🌐 分散計算例
+ * ```nyash
+ * static box DistributedWorker {
+ * init { intent, node_id, tasks }
+ *
+ * main() {
+ * me.intent = new SimpleIntentBox()
+ * me.node_id = "worker_" + RandomBox.randInt(1000, 9999)
+ * me.tasks = []
+ *
+ * me.intent.setNodeId(me.node_id)
+ * me.registerAsWorker()
+ * }
+ *
+ * registerAsWorker() {
+ * // タスク受信リスナー
+ * me.intent.on("task_assign", "processTask")
+ * // 結果送信完了リスナー
+ * me.intent.on("result_received", "onResultReceived")
+ *
+ * // ワーカー登録通知
+ * me.intent.broadcast("worker_ready", me.node_id)
+ * }
+ *
+ * processTask(coordinator, task) {
+ * print("Processing task: " + task.get("id"))
+ *
+ * // 重い計算処理...
+ * local result
+ * result = heavyCalculation(task.get("data"))
+ *
+ * // 結果を送信
+ * me.intent.send(coordinator, result)
+ * }
+ * }
+ * ```
+ *
+ * ## 🎯 ゲーム用マルチプレイヤー
+ * ```nyash
+ * static box GameClient {
+ * init { intent, player_id, game_state }
+ *
+ * main() {
+ * me.intent = new SimpleIntentBox()
+ * me.player_id = "player_" + me.generateId()
+ * me.game_state = new MapBox()
+ *
+ * me.connectToGame()
+ * }
+ *
+ * connectToGame() {
+ * me.intent.setNodeId(me.player_id)
+ *
+ * // ゲームイベント
+ * me.intent.on("player_move", "onPlayerMove")
+ * me.intent.on("game_update", "onGameUpdate")
+ * me.intent.on("player_joined", "onPlayerJoined")
+ *
+ * // ゲーム参加
+ * me.intent.broadcast("join_game", me.player_id)
+ * }
+ *
+ * movePlayer(x, y) {
+ * local move_data
+ * move_data = new MapBox()
+ * move_data.set("player", me.player_id)
+ * move_data.set("x", x)
+ * move_data.set("y", y)
+ *
+ * me.intent.broadcast("player_move", move_data)
+ * }
+ * }
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - 現在は最小限実装(フル機能開発中)
+ * - ネットワーク通信は未実装(ローカル通信のみ)
+ * - メッセージ配信は同一プロセス内限定
+ * - 本格P2P実装は将来バージョンで提供予定
+ */
use crate::box_trait::{NyashBox, StringBox, BoolBox};
use std::any::Any;
diff --git a/src/boxes/sound_box.rs b/src/boxes/sound_box.rs
index ae3fb05b..8f999dc5 100644
--- a/src/boxes/sound_box.rs
+++ b/src/boxes/sound_box.rs
@@ -1,8 +1,141 @@
-/*!
- * Nyash Sound Box - Simple sound generation
+/*! 🔊 SoundBox - サウンド・音響効果Box
*
- * 音響効果を提供するBox型
- * Everything is Box哲学に基づく音響ライブラリ
+ * ## 📝 概要
+ * システム音・効果音を提供するBox。
+ * ゲーム効果音、通知音、アラート音の生成に使用。
+ * クロスプラットフォーム対応のシンプルなサウンドシステム。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `beep()` - 基本ビープ音
+ * - `beeps(count)` - 指定回数ビープ
+ * - `bell()` - ベル音
+ * - `alarm()` - アラーム音
+ * - `playTone(frequency, duration)` - 指定周波数・時間で音生成
+ * - `playFile(filename)` - 音声ファイル再生
+ * - `setVolume(level)` - 音量設定 (0.0-1.0)
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local sound
+ * sound = new SoundBox()
+ *
+ * // 基本的な音
+ * sound.beep() // シンプルビープ
+ * sound.beeps(3) // 3回ビープ
+ * sound.bell() // ベル音
+ *
+ * // ゲーム効果音
+ * sound.playTone(440, 500) // ラの音を500ms
+ * sound.playTone(880, 200) // 高いラの音を200ms
+ * ```
+ *
+ * ## 🎮 実用例 - ゲーム効果音
+ * ```nyash
+ * static box GameSFX {
+ * init { sound }
+ *
+ * main() {
+ * me.sound = new SoundBox()
+ * me.sound.setVolume(0.7)
+ *
+ * // ゲームイベント
+ * me.playerJump()
+ * me.coinCollect()
+ * me.gameOver()
+ * }
+ *
+ * playerJump() {
+ * // ジャンプ音:低→高
+ * me.sound.playTone(220, 100)
+ * me.sound.playTone(440, 150)
+ * }
+ *
+ * coinCollect() {
+ * // コイン音:上昇音階
+ * me.sound.playTone(523, 80) // ド
+ * me.sound.playTone(659, 80) // ミ
+ * me.sound.playTone(784, 120) // ソ
+ * }
+ *
+ * gameOver() {
+ * // ゲームオーバー音:下降
+ * me.sound.playTone(440, 200)
+ * me.sound.playTone(392, 200)
+ * me.sound.playTone(349, 400)
+ * }
+ * }
+ * ```
+ *
+ * ## 🚨 通知・アラート用途
+ * ```nyash
+ * static box NotificationSystem {
+ * init { sound }
+ *
+ * main() {
+ * me.sound = new SoundBox()
+ * me.testNotifications()
+ * }
+ *
+ * info() {
+ * me.sound.beep() // 情報通知
+ * }
+ *
+ * warning() {
+ * me.sound.beeps(2) // 警告
+ * }
+ *
+ * error() {
+ * // エラー音:断続的
+ * me.sound.playTone(200, 100)
+ * // 短い間隔
+ * me.sound.playTone(200, 100)
+ * me.sound.playTone(200, 200)
+ * }
+ *
+ * success() {
+ * // 成功音:上昇音階
+ * me.sound.playTone(523, 150) // ド
+ * me.sound.playTone(659, 150) // ミ
+ * me.sound.playTone(784, 200) // ソ
+ * }
+ * }
+ * ```
+ *
+ * ## 🎵 音楽生成例
+ * ```nyash
+ * static box MusicBox {
+ * init { sound, notes }
+ *
+ * main() {
+ * me.sound = new SoundBox()
+ * me.notes = new MapBox()
+ * me.setupNotes()
+ * me.playMelody()
+ * }
+ *
+ * setupNotes() {
+ * // 音階定義
+ * me.notes.set("C", 261) // ド
+ * me.notes.set("D", 293) // レ
+ * me.notes.set("E", 329) // ミ
+ * me.notes.set("F", 349) // ファ
+ * me.notes.set("G", 392) // ソ
+ * }
+ *
+ * playNote(note, duration) {
+ * local freq
+ * freq = me.notes.get(note)
+ * me.sound.playTone(freq, duration)
+ * }
+ * }
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - システムによってはビープ音が無効化されている場合あり
+ * - 音量設定は環境依存
+ * - 長時間音生成はCPU使用率に注意
+ * - ファイル再生は対応フォーマット限定
+ * - Web環境では制限が多い(ユーザー操作後のみ音声再生可能)
*/
use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox};
diff --git a/src/boxes/string_box.rs b/src/boxes/string_box.rs
index 3d7c8095..83f28b13 100644
--- a/src/boxes/string_box.rs
+++ b/src/boxes/string_box.rs
@@ -1,4 +1,32 @@
-// StringBox implementation - String values in Nyash
+/*! 🔤 StringBox - 文字列操作Box
+ *
+ * ## 📝 概要
+ * UTF-8エンコード文字列を扱うためのBox。
+ * JavaScript風のメソッドで直感的な文字列操作が可能。
+ *
+ * ## 🛠️ 利用可能メソッド
+ * - `length()` - 文字列長を取得
+ * - `concat(other)` - 文字列結合
+ * - `split(separator)` - 区切り文字で分割
+ * - `substring(start, end)` - 部分文字列取得
+ * - `toUpperCase()` - 大文字変換
+ * - `toLowerCase()` - 小文字変換
+ * - `trim()` - 前後の空白除去
+ * - `indexOf(search)` - 文字列検索
+ * - `replace(from, to)` - 文字列置換
+ * - `charAt(index)` - 指定位置の文字取得
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local text, parts, result
+ * text = "Hello, World!"
+ *
+ * print(text.length()) // 13
+ * print(text.toUpperCase()) // "HELLO, WORLD!"
+ * parts = text.split(",") // ["Hello", " World!"]
+ * result = text.concat(" Nyash") // "Hello, World! Nyash"
+ * ```
+ */
use crate::box_trait::NyashBox;
use std::any::Any;
use std::fmt::Display;
diff --git a/src/boxes/time_box.rs b/src/boxes/time_box.rs
index dd83e932..d3f620e4 100644
--- a/src/boxes/time_box.rs
+++ b/src/boxes/time_box.rs
@@ -1,8 +1,121 @@
-/*!
- * Nyash Time Box - Time and Date operations
+/*! ⏰ TimeBox - 時間・日付操作Box
*
- * 時間と日付操作を提供するBox型
- * Everything is Box哲学に基づく時間ライブラリ
+ * ## 📝 概要
+ * 高精度な時間・日付操作を提供するBox。
+ * JavaScript Date、Python datetime、C# DateTimeと同等機能。
+ * タイムスタンプ処理、フォーマット、時差計算をサポート。
+ *
+ * ## 🛠️ 利用可能メソッド
+ *
+ * ### 📅 基本操作
+ * - `now()` - 現在日時取得
+ * - `fromTimestamp(timestamp)` - UNIXタイムスタンプから日時作成
+ * - `parse(date_string)` - 文字列から日時パース
+ * - `format(pattern)` - 指定フォーマットで文字列化
+ *
+ * ### 🔢 値取得
+ * - `year()` - 年取得
+ * - `month()` - 月取得 (1-12)
+ * - `day()` - 日取得 (1-31)
+ * - `hour()` - 時取得 (0-23)
+ * - `minute()` - 分取得 (0-59)
+ * - `second()` - 秒取得 (0-59)
+ * - `weekday()` - 曜日取得 (0=日曜)
+ *
+ * ### ⏱️ 計算
+ * - `addDays(days)` - 日数加算
+ * - `addHours(hours)` - 時間加算
+ * - `addMinutes(minutes)` - 分加算
+ * - `diffDays(other)` - 日数差計算
+ * - `diffHours(other)` - 時間差計算
+ *
+ * ## 💡 使用例
+ * ```nyash
+ * local time, now, birthday, age
+ * time = new TimeBox()
+ *
+ * // 現在日時
+ * now = time.now()
+ * print("現在: " + now.format("yyyy/MM/dd HH:mm:ss"))
+ *
+ * // 誕生日から年齢計算
+ * birthday = time.parse("1995-03-15")
+ * age = now.diffYears(birthday)
+ * print("年齢: " + age.toString() + "歳")
+ *
+ * // 1週間後
+ * local next_week
+ * next_week = now.addDays(7)
+ * print("1週間後: " + next_week.format("MM月dd日"))
+ * ```
+ *
+ * ## 🎮 実用例 - イベントスケジューラー
+ * ```nyash
+ * static box EventScheduler {
+ * init { time, events, current }
+ *
+ * main() {
+ * me.time = new TimeBox()
+ * me.events = []
+ * me.current = me.time.now()
+ *
+ * // イベント追加
+ * me.addEvent("会議", me.current.addHours(2))
+ * me.addEvent("ランチ", me.current.addHours(5))
+ * me.addEvent("プレゼン", me.current.addDays(1))
+ *
+ * me.showUpcomingEvents()
+ * }
+ *
+ * addEvent(title, datetime) {
+ * local event
+ * event = new MapBox()
+ * event.set("title", title)
+ * event.set("datetime", datetime)
+ * event.set("timestamp", datetime.toTimestamp())
+ * me.events.push(event)
+ * }
+ *
+ * showUpcomingEvents() {
+ * print("=== 今後のイベント ===")
+ * loop(i < me.events.length()) {
+ * local event, hours_until
+ * event = me.events.get(i)
+ * hours_until = event.get("datetime").diffHours(me.current)
+ *
+ * print(event.get("title") + " - " +
+ * hours_until.toString() + "時間後")
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ## 🕐 時間計算例
+ * ```nyash
+ * local time, start, end, duration
+ * time = new TimeBox()
+ *
+ * // 作業時間計測
+ * start = time.now()
+ * // 何か重い処理...
+ * heavyCalculation()
+ * end = time.now()
+ *
+ * duration = end.diffSeconds(start)
+ * print("処理時間: " + duration.toString() + "秒")
+ *
+ * // 締切まで残り時間
+ * local deadline, remaining
+ * deadline = time.parse("2025-12-31 23:59:59")
+ * remaining = deadline.diffDays(time.now())
+ * print("締切まで" + remaining.toString() + "日")
+ * ```
+ *
+ * ## ⚠️ 注意
+ * - ローカルタイムゾーンに基づく処理
+ * - パース可能な日時フォーマットは限定的
+ * - UNIXタイムスタンプは秒単位
+ * - 夏時間切り替え時は計算に注意
*/
use crate::box_trait::{NyashBox, StringBox, IntegerBox, BoolBox};
diff --git a/src/main.rs b/src/main.rs
index 02f55262..b9c7c1ab 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -27,17 +27,43 @@ use interpreter::NyashInterpreter;
use std::env;
use std::fs;
use std::process;
+use clap::{Arg, Command};
fn main() {
- let args: Vec = env::args().collect();
+ // 🔥 clap使ったコマンド引数解析
+ let matches = Command::new("nyash")
+ .version("1.0")
+ .author("Claude Code ")
+ .about("🦀 Nyash Programming Language - Everything is Box in Rust! 🦀")
+ .arg(
+ Arg::new("file")
+ .help("Nyash file to execute")
+ .value_name("FILE")
+ .index(1)
+ )
+ .arg(
+ Arg::new("debug-fuel")
+ .long("debug-fuel")
+ .value_name("ITERATIONS")
+ .help("Set parser debug fuel limit (default: 100000, 'unlimited' for no limit)")
+ .default_value("100000")
+ )
+ .get_matches();
- if args.len() > 1 {
+ // デバッグ燃料の解析
+ let debug_fuel = parse_debug_fuel(matches.get_one::("debug-fuel").unwrap());
+
+ if let Some(filename) = matches.get_one::("file") {
// File mode: parse and execute the provided .nyash file
- let filename = &args[1];
println!("🦀 Nyash Rust Implementation - Executing file: {} 🦀", filename);
+ if let Some(fuel) = debug_fuel {
+ println!("🔥 Debug fuel limit: {} iterations", fuel);
+ } else {
+ println!("🔥 Debug fuel limit: unlimited");
+ }
println!("====================================================");
- execute_nyash_file(filename);
+ execute_nyash_file(filename, debug_fuel);
} else {
// Demo mode: run built-in demonstrations
println!("🦀 Nyash Rust Implementation - Everything is Box! 🦀");
@@ -69,7 +95,16 @@ fn main() {
}
}
-fn execute_nyash_file(filename: &str) {
+/// デバッグ燃料値をパース("unlimited" または数値)
+fn parse_debug_fuel(value: &str) -> Option {
+ if value == "unlimited" {
+ None // 無制限
+ } else {
+ value.parse::().ok()
+ }
+}
+
+fn execute_nyash_file(filename: &str, debug_fuel: Option) {
// Read the file
let code = match fs::read_to_string(filename) {
Ok(content) => content,
@@ -85,9 +120,9 @@ fn execute_nyash_file(filename: &str) {
// テスト用:即座にファイル作成
std::fs::write("/mnt/c/git/nyash/development/debug_hang_issue/test.txt", "START").ok();
- // Parse the code
- eprintln!("🔍 DEBUG: Starting parse...");
- let ast = match NyashParser::parse_from_string(&code) {
+ // Parse the code with debug fuel limit
+ eprintln!("🔍 DEBUG: Starting parse with fuel: {:?}...", debug_fuel);
+ let ast = match NyashParser::parse_from_string_with_fuel(&code, debug_fuel) {
Ok(ast) => {
eprintln!("🔍 DEBUG: Parse completed, AST created");
ast
diff --git a/src/parser/expressions.rs b/src/parser/expressions.rs
index ef8b0fce..3ac53e8c 100644
--- a/src/parser/expressions.rs
+++ b/src/parser/expressions.rs
@@ -9,6 +9,38 @@ use crate::tokenizer::TokenType;
use crate::ast::{ASTNode, BinaryOperator, LiteralValue, UnaryOperator, Span};
use super::{NyashParser, ParseError};
+// ===== 🔥 Debug Macros (copied from parent module) =====
+
+/// Infinite loop detection macro - must be called in every loop that advances tokens
+/// Prevents parser from hanging due to token consumption bugs
+/// Uses parser's debug_fuel field for centralized fuel management
+macro_rules! must_advance {
+ ($parser:expr, $fuel:expr, $location:literal) => {
+ // デバッグ燃料がSomeの場合のみ制限チェック
+ if let Some(ref mut limit) = $parser.debug_fuel {
+ if *limit == 0 {
+ eprintln!("🚨 PARSER INFINITE LOOP DETECTED at {}", $location);
+ eprintln!("🔍 Current token: {:?} at line {}", $parser.current_token().token_type, $parser.current_token().line);
+ eprintln!("🔍 Parser position: {}/{}", $parser.current, $parser.tokens.len());
+ return Err(ParseError::InfiniteLoop {
+ location: $location.to_string(),
+ token: $parser.current_token().token_type.clone(),
+ line: $parser.current_token().line,
+ });
+ }
+ *limit -= 1;
+ }
+ // None の場合は無制限なのでチェックしない
+ };
+}
+
+/// Initialize debug fuel for loop monitoring
+macro_rules! debug_fuel {
+ () => {
+ 100_000 // Default: 100k iterations should be enough for any reasonable program
+ };
+}
+
impl NyashParser {
/// 式をパース (演算子優先順位あり)
pub(super) fn parse_expression(&mut self) -> Result {
@@ -214,6 +246,8 @@ impl NyashParser {
let mut arg_count = 0;
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "method call argument parsing");
+
arguments.push(self.parse_expression()?);
arg_count += 1;
@@ -254,6 +288,8 @@ impl NyashParser {
let mut arguments = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "function call argument parsing");
+
arguments.push(self.parse_expression()?);
if self.match_token(&TokenType::COMMA) {
self.advance();
@@ -372,6 +408,8 @@ impl NyashParser {
let mut arguments = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "new expression argument parsing");
+
arguments.push(self.parse_expression()?);
if self.match_token(&TokenType::COMMA) {
self.advance();
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 71752db0..24674958 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -22,6 +22,38 @@ use crate::ast::{ASTNode, Span};
use std::collections::HashMap;
use thiserror::Error;
+// ===== 🔥 Debug Macros =====
+
+/// Infinite loop detection macro - must be called in every loop that advances tokens
+/// Prevents parser from hanging due to token consumption bugs
+/// Uses parser's debug_fuel field for centralized fuel management
+macro_rules! must_advance {
+ ($parser:expr, $fuel:expr, $location:literal) => {
+ // デバッグ燃料がSomeの場合のみ制限チェック
+ if let Some(ref mut limit) = $parser.debug_fuel {
+ if *limit == 0 {
+ eprintln!("🚨 PARSER INFINITE LOOP DETECTED at {}", $location);
+ eprintln!("🔍 Current token: {:?} at line {}", $parser.current_token().token_type, $parser.current_token().line);
+ eprintln!("🔍 Parser position: {}/{}", $parser.current, $parser.tokens.len());
+ return Err(ParseError::InfiniteLoop {
+ location: $location.to_string(),
+ token: $parser.current_token().token_type.clone(),
+ line: $parser.current_token().line,
+ });
+ }
+ *limit -= 1;
+ }
+ // None の場合は無制限なのでチェックしない
+ };
+}
+
+/// Initialize debug fuel for loop monitoring
+macro_rules! debug_fuel {
+ () => {
+ 100_000 // Default: 100k iterations should be enough for any reasonable program
+ };
+}
+
// Two-phase parser structures are no longer needed - simplified to direct parsing
/// パースエラー
@@ -42,6 +74,9 @@ pub enum ParseError {
#[error("Circular dependency detected between static boxes: {cycle}")]
CircularDependency { cycle: String },
+ #[error("🚨 Infinite loop detected in parser at {location} - token: {token:?} at line {line}")]
+ InfiniteLoop { location: String, token: TokenType, line: usize },
+
#[error("Tokenize error: {0}")]
TokenizeError(#[from] TokenizeError),
}
@@ -52,6 +87,8 @@ pub struct NyashParser {
current: usize,
/// 🔥 Static box依存関係追跡(循環依存検出用)
static_box_dependencies: std::collections::HashMap>,
+ /// 🔥 デバッグ燃料:無限ループ検出用制限値 (None = 無制限)
+ debug_fuel: Option,
}
impl NyashParser {
@@ -61,15 +98,23 @@ impl NyashParser {
tokens,
current: 0,
static_box_dependencies: std::collections::HashMap::new(),
+ debug_fuel: Some(100_000), // デフォルト値
}
}
/// 文字列からパース (トークナイズ + パース)
pub fn parse_from_string(input: impl Into) -> Result {
+ Self::parse_from_string_with_fuel(input, Some(100_000))
+ }
+
+ /// 文字列からパース (デバッグ燃料指定版)
+ /// fuel: Some(n) = n回まで、None = 無制限
+ pub fn parse_from_string_with_fuel(input: impl Into, fuel: Option) -> Result {
let mut tokenizer = crate::tokenizer::NyashTokenizer::new(input);
let tokens = tokenizer.tokenize()?;
let mut parser = Self::new(tokens);
+ parser.debug_fuel = fuel;
let result = parser.parse();
result
}
@@ -161,7 +206,7 @@ impl NyashParser {
};
// from句のパース(継承)
- let extends = if self.match_token(&TokenType::FROM) {
+ let extends = if self.match_token(&TokenType::COLON) {
self.advance(); // consume 'from'
if let TokenType::IDENTIFIER(parent_name) = &self.current_token().token_type {
@@ -275,6 +320,8 @@ impl NyashParser {
let mut params = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "constructor parameter parsing");
+
if let TokenType::IDENTIFIER(param) = &self.current_token().token_type {
params.push(param.clone());
self.advance();
@@ -315,6 +362,7 @@ impl NyashParser {
let mut params = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "box method parameter parsing");
if let TokenType::IDENTIFIER(param) = &self.current_token().token_type {
params.push(param.clone());
@@ -532,6 +580,8 @@ impl NyashParser {
let mut params = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "function declaration parameter parsing");
+
if let TokenType::IDENTIFIER(param) = &self.current_token().token_type {
params.push(param.clone());
self.advance();
@@ -634,6 +684,8 @@ impl NyashParser {
let mut params = Vec::new();
while !self.match_token(&TokenType::RPAREN) && !self.is_at_end() {
+ must_advance!(self, _unused, "static function parameter parsing");
+
if let TokenType::IDENTIFIER(param) = &self.current_token().token_type {
params.push(param.clone());
self.advance();
@@ -725,7 +777,7 @@ impl NyashParser {
};
// from句のパース(継承)- static boxでも継承可能
- let extends = if self.match_token(&TokenType::FROM) {
+ let extends = if self.match_token(&TokenType::COLON) {
self.advance(); // consume 'from'
if let TokenType::IDENTIFIER(parent_name) = &self.current_token().token_type {
diff --git a/src/tokenizer.rs b/src/tokenizer.rs
index 19a7a54d..e0c0a037 100644
--- a/src/tokenizer.rs
+++ b/src/tokenizer.rs
@@ -35,7 +35,7 @@ pub enum TokenType {
NOWAIT, // nowait
AWAIT, // await
INTERFACE, // interface
- FROM, // from (継承用)
+ COLON, // : (継承用)
INCLUDE, // include (ファイル読み込み)
TRY, // try
CATCH, // catch
@@ -266,6 +266,10 @@ impl NyashTokenizer {
self.advance();
Ok(Token::new(TokenType::COMMA, start_line, start_column))
}
+ Some(':') => {
+ self.advance();
+ Ok(Token::new(TokenType::COLON, start_line, start_column))
+ }
Some('\n') => {
self.advance();
Ok(Token::new(TokenType::NEWLINE, start_line, start_column))
@@ -387,7 +391,6 @@ impl NyashTokenizer {
"nowait" => TokenType::NOWAIT,
"await" => TokenType::AWAIT,
"interface" => TokenType::INTERFACE,
- "from" => TokenType::FROM,
"include" => TokenType::INCLUDE,
"try" => TokenType::TRY,
"catch" => TokenType::CATCH,
diff --git a/test_args_progression.nyash b/test_args_progression.nyash
deleted file mode 100644
index c1e8e230..00000000
--- a/test_args_progression.nyash
+++ /dev/null
@@ -1,55 +0,0 @@
-// 引数数段階テスト - 問題の境界を特定
-
-print("=== Args Progression Test ===")
-
-box TestBox {
- init { name }
-
- // 0引数
- method0() {
- print("method0: success")
- }
-
- // 1引数
- method1(a) {
- print("method1: " + a)
- }
-
- // 2引数
- method2(a, b) {
- print("method2: " + a + ", " + b)
- }
-
- // 3引数
- method3(a, b, c) {
- print("method3: " + a + ", " + b + ", " + c)
- }
-
- // 4引数
- method4(a, b, c, d) {
- print("method4: " + a + ", " + b + ", " + c + ", " + d)
- }
-}
-
-print("Creating TestBox...")
-local testBox
-testBox = new TestBox()
-
-print("Testing 0 args...")
-testBox.method0()
-
-print("Testing 1 arg...")
-testBox.method1("arg1")
-
-print("Testing 2 args...")
-testBox.method2("arg1", "arg2")
-
-print("Testing 3 args...")
-testBox.method3("arg1", "arg2", "arg3")
-
-print("If you see this, 3 args worked!")
-
-print("Testing 4 args...")
-testBox.method4("arg1", "arg2", "arg3", "arg4")
-
-print("All tests completed!")
\ No newline at end of file
diff --git a/test_async_demo.nyash b/test_async_demo.nyash
deleted file mode 100644
index 35fe6edd..00000000
--- a/test_async_demo.nyash
+++ /dev/null
@@ -1,32 +0,0 @@
-# 非同期処理テスト - FutureBoxとChannelBoxのメソッド確認
-
-print("=== Nyash Async Methods Test ===")
-
-# FutureBoxの基本テスト(簡単な例)
-print("\n1. FutureBox Basic Test")
-
-# ChannelBoxの基本テスト
-print("\n2. ChannelBox Basic Test")
-try {
- # ChannelBoxの作成とメソッド呼び出し
- channel = new ChannelBox("TestSender", "TestReceiver")
-
- # sendMessageメソッドテスト
- message = channel.sendMessage("Hello Async World!")
- print("Sent message: " + message.toString())
-
- # announceメソッドテスト
- broadcast = channel.announce("Broadcasting test message")
- print("Broadcast: " + broadcast)
-
- # sender/receiverメソッドテスト
- sender_info = channel.sender()
- print("Sender info: " + sender_info.toString())
-
- print("\n✅ ChannelBox methods work correctly!")
-
-} catch (error) {
- print("⚠️ ChannelBox test failed: " + error.toString())
-}
-
-print("\n=== Async Methods Test Completed ===")
\ No newline at end of file
diff --git a/test_basic_print.nyash b/test_basic_print.nyash
deleted file mode 100644
index 702f509b..00000000
--- a/test_basic_print.nyash
+++ /dev/null
@@ -1,5 +0,0 @@
-// 最も基本的なテスト
-
-print("Hello!")
-print("1 + 1 = " + (1 + 1))
-print("Done!")
\ No newline at end of file
diff --git a/test_box_method_call.nyash b/test_box_method_call.nyash
deleted file mode 100644
index fb291591..00000000
--- a/test_box_method_call.nyash
+++ /dev/null
@@ -1,49 +0,0 @@
-// Box間メソッド呼び出しテスト
-
-print("=== Box Method Call Test ===")
-
-// 受信側Box
-box Receiver {
- init { name }
-
- setName(n) {
- me.name = n
- print("Receiver name set to: " + n)
- }
-
- receive(message) {
- print("Receiver got message: " + message)
- }
-}
-
-// 送信側Box
-box Sender {
- init { receiver }
-
- setReceiver(r) {
- me.receiver = r
- print("Sender connected to receiver")
- }
-
- send(message) {
- print("Sender about to send: " + message)
- me.receiver.receive(message)
- print("Sender finished sending")
- }
-}
-
-// テスト
-print("Creating receiver...")
-local receiver
-receiver = new Receiver()
-receiver.setName("TestReceiver")
-
-print("Creating sender...")
-local sender
-sender = new Sender()
-sender.setReceiver(receiver)
-
-print("Sending message...")
-sender.send("Hello World!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_complex_hang.nyash b/test_complex_hang.nyash
deleted file mode 100644
index 3525a81e..00000000
--- a/test_complex_hang.nyash
+++ /dev/null
@@ -1,49 +0,0 @@
-// Complex hang test case - cross-object method calls
-
-print("=== Complex Hang Test ===")
-
-box MessageHub {
- init { handlers }
-
- setup() {
- print("MessageHub setup start")
- me.handlers = new MapBox()
- print("MessageHub setup complete")
- }
-
- deliver(messageType, data, from) {
- print("Message: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-box PeerNode {
- init { nodeId, messageHub }
-
- setup(hub) {
- print("PeerNode setup start")
- me.nodeId = "Node123"
- me.messageHub = hub
- print("PeerNode setup complete")
- }
-
- send(recipient, message) {
- print("Sending message via hub...")
- // This could cause the hang - complex field access in method call
- me.messageHub.deliver("message", message, me.nodeId)
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-hub.setup()
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-node.setup(hub)
-
-print("Testing cross-object method call...")
-node.send("alice", "Hello!")
-
-print("Complex test completed!")
\ No newline at end of file
diff --git a/test_cross_box_args.nyash b/test_cross_box_args.nyash
deleted file mode 100644
index 585b351b..00000000
--- a/test_cross_box_args.nyash
+++ /dev/null
@@ -1,81 +0,0 @@
-// Box間3引数メソッド呼び出しテスト
-
-print("=== Cross Box Args Test ===")
-
-// TargetBox - メソッドを提供する側
-box TargetBox {
- init { name }
-
- process2(a, b) {
- print("TargetBox.process2: " + a + ", " + b)
- }
-
- process3(a, b, c) {
- print("TargetBox.process3: " + a + ", " + b + ", " + c)
- }
-
- process4(a, b, c, d) {
- print("TargetBox.process4: " + a + ", " + b + ", " + c + ", " + d)
- }
-}
-
-// CallerBox - メソッドを呼び出す側
-box CallerBox {
- init { target, myField }
-
- setup(targetRef) {
- me.target = targetRef
- me.myField = "myValue"
- print("CallerBox setup completed")
- }
-
- call2() {
- print("Calling 2-arg method...")
- me.target.process2("arg1", "arg2")
- print("2-arg call completed")
- }
-
- call3() {
- print("Calling 3-arg method...")
- me.target.process3("arg1", "arg2", "arg3")
- print("3-arg call completed")
- }
-
- call3WithField() {
- print("Calling 3-arg method with field...")
- me.target.process3("arg1", "arg2", me.myField)
- print("3-arg with field completed")
- }
-
- call4() {
- print("Calling 4-arg method...")
- me.target.process4("arg1", "arg2", "arg3", "arg4")
- print("4-arg call completed")
- }
-}
-
-// テスト
-print("Creating TargetBox...")
-local target
-target = new TargetBox()
-
-print("Creating CallerBox...")
-local caller
-caller = new CallerBox()
-caller.setup(target)
-
-print("Testing 2-arg cross-box call...")
-caller.call2()
-
-print("Testing 3-arg cross-box call...")
-caller.call3()
-
-print("If you see this, 3-arg cross-box worked!")
-
-print("Testing 3-arg with field...")
-caller.call3WithField()
-
-print("Testing 4-arg cross-box call...")
-caller.call4()
-
-print("All cross-box tests completed!")
\ No newline at end of file
diff --git a/test_cross_mapbox_reference.nyash b/test_cross_mapbox_reference.nyash
deleted file mode 100644
index 1885b896..00000000
--- a/test_cross_mapbox_reference.nyash
+++ /dev/null
@@ -1,54 +0,0 @@
-// MapBox間Box参照3引数テスト
-
-print("=== Cross MapBox Reference Test ===")
-
-// TargetBox - MapBoxを持つ受信側
-box TargetBox {
- init { handlers }
-
- setup() {
- print("TargetBox setup start")
- me.handlers = new MapBox()
- print("TargetBox setup complete with MapBox")
- }
-
- deliver(messageType, data, from) {
- print("deliver: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// CallerBox - MapBoxを持つ送信側
-box CallerBox {
- init { target, nodeId, myData }
-
- setup(targetRef) {
- print("CallerBox setup start")
- me.target = targetRef
- me.nodeId = "TestNode"
- me.myData = new MapBox() // CallerBoxもMapBoxを持つ
- print("CallerBox setup complete with MapBox")
- }
-
- testCall() {
- print("About to call 3-arg method across MapBox-containing Boxes...")
- me.target.deliver("hello", "data", me.nodeId)
- print("Cross MapBox 3-arg call completed")
- }
-}
-
-print("Creating TargetBox with MapBox...")
-local target
-target = new TargetBox()
-target.setup()
-
-print("Creating CallerBox with MapBox...")
-local caller
-caller = new CallerBox()
-caller.setup(target)
-
-print("Executing cross-MapBox 3-arg call...")
-caller.testCall()
-
-print("If you see this, cross-MapBox worked!")
-
-print("All cross-MapBox reference tests completed!")
\ No newline at end of file
diff --git a/test_cross_mapbox_simple.nyash b/test_cross_mapbox_simple.nyash
deleted file mode 100644
index dbda1b31..00000000
--- a/test_cross_mapbox_simple.nyash
+++ /dev/null
@@ -1,48 +0,0 @@
-// より簡単なクロスMapBoxテスト
-
-print("=== Simple Cross MapBox Test ===")
-
-// まず2つのBoxを作るが、MapBoxは1つずつ
-box BoxA {
- init { data }
-
- setup() {
- print("BoxA setup start")
- me.data = new MapBox()
- print("BoxA setup complete with MapBox")
- }
-
- callOther(other, message) {
- print("BoxA calling other with: " + message)
- other.receive(message)
- }
-}
-
-box BoxB {
- init { otherBox }
-
- setup(otherRef) {
- print("BoxB setup start")
- me.otherBox = otherRef
- print("BoxB setup complete")
- }
-
- receive(message) {
- print("BoxB received: " + message)
- }
-}
-
-print("Creating BoxA with MapBox...")
-local boxA
-boxA = new BoxA()
-boxA.setup()
-
-print("Creating BoxB without MapBox...")
-local boxB
-boxB = new BoxB()
-boxB.setup(boxA)
-
-print("Testing cross-box call (2 args)...")
-boxA.callOther(boxB, "Hello")
-
-print("Simple cross-MapBox test completed!")
\ No newline at end of file
diff --git a/test_debug_constructor.nyash b/test_debug_constructor.nyash
deleted file mode 100644
index d1531675..00000000
--- a/test_debug_constructor.nyash
+++ /dev/null
@@ -1,35 +0,0 @@
-// コンストラクタのデバッグテスト
-
-print("=== Constructor Debug Test ===")
-
-// Step 1: 最もシンプルなBox
-box SimpleBox {
- init { }
-
- constructor() {
- print("SimpleBox constructor called")
- }
-}
-
-print("Creating SimpleBox...")
-local s
-s = new SimpleBox()
-print("SimpleBox created!")
-
-// Step 2: フィールドを持つBox
-box BoxWithField {
- init { value }
-
- constructor() {
- print("BoxWithField constructor called")
- me.value = 42
- print("Field set to 42")
- }
-}
-
-print("\nCreating BoxWithField...")
-local b
-b = new BoxWithField()
-print("BoxWithField created!")
-
-print("\nAll tests completed!")
\ No newline at end of file
diff --git a/test_debug_hang.nyash b/test_debug_hang.nyash
deleted file mode 100644
index 0d99edcd..00000000
--- a/test_debug_hang.nyash
+++ /dev/null
@@ -1,34 +0,0 @@
-// Debug hang test case - minimal reproduction
-
-print("=== Debug Hang Test ===")
-
-box TestBox {
- init { mapField, simpleField }
-
- setup() {
- print("Step 1: Setting up TestBox")
- me.mapField = new MapBox()
- me.simpleField = "test_value"
- print("Step 2: TestBox setup complete")
- }
-
- methodWith3Args(arg1, arg2, arg3) {
- print("methodWith3Args called with: " + arg1 + ", " + arg2 + ", " + arg3)
- }
-}
-
-print("Step 3: Creating TestBox instance")
-local testObj
-testObj = new TestBox()
-
-print("Step 4: Running setup")
-testObj.setup()
-
-print("Step 5: Testing 3-arg method with literals")
-testObj.methodWith3Args("a", "b", "c")
-
-print("Step 6: Testing 3-arg method with field access")
-print("About to call method with field access...")
-testObj.methodWith3Args("a", "b", testObj.simpleField)
-
-print("Step 7: All tests completed successfully!")
\ No newline at end of file
diff --git a/test_direct_mapbox_call.nyash b/test_direct_mapbox_call.nyash
deleted file mode 100644
index b645f2fb..00000000
--- a/test_direct_mapbox_call.nyash
+++ /dev/null
@@ -1,62 +0,0 @@
-// 直接MapBoxメソッド呼び出しテスト
-
-print("=== Direct MapBox Call Test ===")
-
-// Step 1: MapBox直接作成・使用
-print("Step 1: Direct MapBox usage")
-local map
-map = new MapBox()
-print("MapBox created")
-
-map.set("key1", "value1")
-print("MapBox.set() completed")
-
-local result
-result = map.get("key1")
-print("MapBox.get() result: " + result)
-
-// Step 2: MapBoxを持つBox作成(3引数なし)
-print("Step 2: Box with MapBox (no 3-arg calls)")
-box SimpleBox {
- init { data }
-
- setup() {
- print("SimpleBox setup start")
- me.data = new MapBox()
- print("SimpleBox setup complete")
- }
-
- twoArgMethod(a, b) {
- print("twoArgMethod: " + a + ", " + b)
- }
-}
-
-local box1
-box1 = new SimpleBox()
-box1.setup()
-box1.twoArgMethod("arg1", "arg2")
-
-// Step 3: MapBoxを持つBoxで3引数メソッド呼び出し
-print("Step 3: Box with MapBox (3-arg call)")
-box TestBox {
- init { data }
-
- setup() {
- print("TestBox setup start")
- me.data = new MapBox()
- print("TestBox setup complete")
- }
-
- threeArgMethod(a, b, c) {
- print("threeArgMethod: " + a + ", " + b + ", " + c)
- }
-}
-
-local box2
-box2 = new TestBox()
-box2.setup()
-
-print("About to call 3-arg method on Box with MapBox...")
-box2.threeArgMethod("arg1", "arg2", "arg3")
-
-print("All direct MapBox tests completed!")
\ No newline at end of file
diff --git a/test_double_mapbox.nyash b/test_double_mapbox.nyash
deleted file mode 100644
index d9a2c4ff..00000000
--- a/test_double_mapbox.nyash
+++ /dev/null
@@ -1,48 +0,0 @@
-// 両方のBoxがMapBoxを持つケース
-
-print("=== Double MapBox Test ===")
-
-box BoxA {
- init { data, message }
-
- setup() {
- print("BoxA setup start")
- me.data = new MapBox()
- me.message = "Hello from A"
- print("BoxA setup complete with MapBox")
- }
-
- callOther(other) {
- print("BoxA calling other...")
- other.receive(me.message) // フィールドアクセス含む
- }
-}
-
-box BoxB {
- init { storage }
-
- setup() {
- print("BoxB setup start")
- me.storage = new MapBox() // こちらもMapBox
- print("BoxB setup complete with MapBox")
- }
-
- receive(message) {
- print("BoxB received: " + message)
- }
-}
-
-print("Creating BoxA with MapBox...")
-local boxA
-boxA = new BoxA()
-boxA.setup()
-
-print("Creating BoxB with MapBox...")
-local boxB
-boxB = new BoxB()
-boxB.setup()
-
-print("Testing cross-box call (both have MapBox)...")
-boxA.callOther(boxB)
-
-print("Double MapBox test completed!")
\ No newline at end of file
diff --git a/test_double_mapbox_3args.nyash b/test_double_mapbox_3args.nyash
deleted file mode 100644
index 75ce9723..00000000
--- a/test_double_mapbox_3args.nyash
+++ /dev/null
@@ -1,48 +0,0 @@
-// 両方のBoxがMapBoxを持ち3引数テスト
-
-print("=== Double MapBox 3-Args Test ===")
-
-box BoxA {
- init { data, nodeId }
-
- setup() {
- print("BoxA setup start")
- me.data = new MapBox()
- me.nodeId = "NodeA"
- print("BoxA setup complete with MapBox")
- }
-
- callOther(other) {
- print("BoxA calling other with 3 args...")
- other.receive("message", "data", me.nodeId) // 3引数 + フィールドアクセス
- }
-}
-
-box BoxB {
- init { storage }
-
- setup() {
- print("BoxB setup start")
- me.storage = new MapBox() // こちらもMapBox
- print("BoxB setup complete with MapBox")
- }
-
- receive(type, data, from) {
- print("BoxB received: " + from + " -> " + type + " = " + data)
- }
-}
-
-print("Creating BoxA with MapBox...")
-local boxA
-boxA = new BoxA()
-boxA.setup()
-
-print("Creating BoxB with MapBox...")
-local boxB
-boxB = new BoxB()
-boxB.setup()
-
-print("Testing 3-arg cross-box call (both have MapBox)...")
-boxA.callOther(boxB)
-
-print("Double MapBox 3-arg test completed!")
\ No newline at end of file
diff --git a/test_field_access_args.nyash b/test_field_access_args.nyash
deleted file mode 100644
index cd65aff3..00000000
--- a/test_field_access_args.nyash
+++ /dev/null
@@ -1,37 +0,0 @@
-// フィールドアクセス付き引数テスト
-
-print("=== Field Access Args Test ===")
-
-box TestBox {
- init { field1, field2, field3 }
-
- setup() {
- me.field1 = "value1"
- me.field2 = "value2"
- me.field3 = "value3"
- print("Setup completed")
- }
-
- process(a, b, c) {
- print("process: " + a + ", " + b + ", " + c)
- }
-}
-
-print("Creating TestBox...")
-local testBox
-testBox = new TestBox()
-testBox.setup()
-
-print("Testing with literals...")
-testBox.process("lit1", "lit2", "lit3")
-
-print("Testing with 1 field access...")
-testBox.process(testBox.field1, "lit2", "lit3")
-
-print("Testing with 2 field accesses...")
-testBox.process(testBox.field1, testBox.field2, "lit3")
-
-print("Testing with 3 field accesses...")
-testBox.process(testBox.field1, testBox.field2, testBox.field3)
-
-print("All field access tests completed!")
\ No newline at end of file
diff --git a/test_field_access_mapbox.nyash b/test_field_access_mapbox.nyash
deleted file mode 100644
index 39c46c03..00000000
--- a/test_field_access_mapbox.nyash
+++ /dev/null
@@ -1,34 +0,0 @@
-// MapBox + フィールドアクセス3引数テスト
-
-print("=== MapBox + Field Access Test ===")
-
-box TestBox {
- init { data, myField }
-
- setup() {
- print("TestBox setup start")
- me.data = new MapBox()
- me.myField = "field_value"
- print("TestBox setup complete with MapBox")
- }
-
- threeArgMethod(a, b, c) {
- print("threeArgMethod: " + a + ", " + b + ", " + c)
- }
-}
-
-print("Creating TestBox...")
-local testBox
-testBox = new TestBox()
-testBox.setup()
-
-print("Test 1: All literals (should work)")
-testBox.threeArgMethod("arg1", "arg2", "arg3")
-
-print("Test 2: One field access (potential issue)")
-print("About to call with field access...")
-testBox.threeArgMethod("arg1", "arg2", testBox.myField)
-
-print("If you see this, field access worked!")
-
-print("All MapBox field access tests completed!")
\ No newline at end of file
diff --git a/test_field_in_args.nyash b/test_field_in_args.nyash
deleted file mode 100644
index 3970bc53..00000000
--- a/test_field_in_args.nyash
+++ /dev/null
@@ -1,68 +0,0 @@
-// フィールドを引数に含む3引数呼び出しテスト
-
-print("=== Field In Args Test ===")
-
-box TargetBox {
- init { name }
-
- process3(a, b, c) {
- print("process3: " + a + ", " + b + ", " + c)
- }
-}
-
-box CallerBox {
- init { target, field1, field2, field3 }
-
- setup(targetRef) {
- me.target = targetRef
- me.field1 = "field_value_1"
- me.field2 = "field_value_2"
- me.field3 = "field_value_3"
- print("CallerBox setup completed")
- }
-
- test1_AllLiterals() {
- print("Test 1: All literals...")
- me.target.process3("lit1", "lit2", "lit3")
- print("Test 1 completed")
- }
-
- test2_OneField() {
- print("Test 2: One field (3rd position)...")
- me.target.process3("lit1", "lit2", me.field3)
- print("Test 2 completed")
- }
-
- test3_TwoFields() {
- print("Test 3: Two fields...")
- me.target.process3("lit1", me.field2, me.field3)
- print("Test 3 completed")
- }
-
- test4_ThreeFields() {
- print("Test 4: All fields...")
- me.target.process3(me.field1, me.field2, me.field3)
- print("Test 4 completed")
- }
-}
-
-// テスト実行
-print("Creating boxes...")
-local target
-target = new TargetBox()
-
-local caller
-caller = new CallerBox()
-caller.setup(target)
-
-print("Starting tests...")
-
-caller.test1_AllLiterals()
-caller.test2_OneField()
-
-print("If you see this, one field worked!")
-
-caller.test3_TwoFields()
-caller.test4_ThreeFields()
-
-print("All field tests completed!")
\ No newline at end of file
diff --git a/test_field_names.nyash b/test_field_names.nyash
deleted file mode 100644
index 0c4c2011..00000000
--- a/test_field_names.nyash
+++ /dev/null
@@ -1,68 +0,0 @@
-// 特定のフィールド名テスト
-
-print("=== Field Names Test ===")
-
-box TargetBox {
- init { name }
-
- deliver(a, b, c) {
- print("deliver: " + a + ", " + b + ", " + c)
- }
-}
-
-// Test 1: 正常動作したフィールド名を使用
-box GoodBox {
- init { target, field1 }
-
- setup(targetRef) {
- me.target = targetRef
- me.field1 = "TestValue"
- print("GoodBox setup completed")
- }
-
- test() {
- print("GoodBox: Using target and field1...")
- me.target.deliver("hello", "data", me.field1)
- print("GoodBox test completed")
- }
-}
-
-// Test 2: ハングしたフィールド名を使用
-box BadBox {
- init { messageHub, nodeId }
-
- setup(targetRef) {
- me.messageHub = targetRef
- me.nodeId = "TestValue"
- print("BadBox setup completed")
- }
-
- test() {
- print("BadBox: Using messageHub and nodeId...")
- me.messageHub.deliver("hello", "data", me.nodeId)
- print("BadBox test completed")
- }
-}
-
-// テスト実行
-print("Creating target...")
-local target
-target = new TargetBox()
-
-print("Testing with good field names...")
-local goodBox
-goodBox = new GoodBox()
-goodBox.setup(target)
-goodBox.test()
-
-print("Good field names worked!")
-
-print("Testing with bad field names...")
-local badBox
-badBox = new BadBox()
-badBox.setup(target)
-badBox.test()
-
-print("If you see this, bad field names also worked!")
-
-print("All field name tests completed!")
\ No newline at end of file
diff --git a/test_gradual_change.nyash b/test_gradual_change.nyash
deleted file mode 100644
index 4defc846..00000000
--- a/test_gradual_change.nyash
+++ /dev/null
@@ -1,39 +0,0 @@
-// 段階的変更テスト - 動作版をP2P構造に近づける
-
-print("=== Gradual Change Test ===")
-
-// Hub → MessageHub に名前変更
-box MessageHub {
- init { name }
-
- process(messageType, data, from) {
- print("MessageHub.process(): " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// Node → PeerNode に名前変更、フィールド名変更
-box PeerNode {
- init { nodeId, messageHub }
-
- connect(nodeId, hubRef) {
- me.nodeId = nodeId
- me.messageHub = hubRef
- print("PeerNode connected: " + nodeId)
- }
-
- send(messageType, data) {
- print("PeerNode.send(): " + me.nodeId + " sending " + messageType)
- me.messageHub.process(messageType, data, me.nodeId)
- }
-}
-
-print("Test starting...")
-local hub
-hub = new MessageHub()
-
-local alice
-alice = new PeerNode()
-alice.connect("Alice", hub)
-
-alice.send("hello", "Hi there!")
-print("Test completed!")
\ No newline at end of file
diff --git a/test_local_variables.nyash b/test_local_variables.nyash
deleted file mode 100644
index 69c0a1f1..00000000
--- a/test_local_variables.nyash
+++ /dev/null
@@ -1,25 +0,0 @@
-// 🔥 Local変数テスト - 厳密性の実証
-
-static box Main {
- init {
- console, finalResult
- }
-
- main() {
- me.console = new ConsoleBox()
- me.console.log("🔥 Testing local variables!")
-
- // ✅ local変数の正しい使用
- local x, y, result
- x = 42
- y = 58
- result = x + y
- me.console.log("Local calculation: " + result)
-
- // ✅ local変数からフィールドへの代入
- me.finalResult = result
- me.console.log("Final result: " + me.finalResult)
-
- return "Local variables work perfectly!"
- }
-}
\ No newline at end of file
diff --git a/test_mapbox.nyash b/test_mapbox.nyash
deleted file mode 100644
index ec7c84d8..00000000
--- a/test_mapbox.nyash
+++ /dev/null
@@ -1,23 +0,0 @@
-// MapBoxが正しく動作するかテスト
-
-print("=== MapBox Test ===")
-
-local map
-map = new MapBox()
-
-// 値を設定
-map.set("name", "Alice")
-map.set("age", 25)
-
-// 値を取得
-print("Name: " + map.get("name"))
-print("Age: " + map.get("age"))
-
-// 存在しないキー
-local value
-value = map.get("unknown")
-if (value == null) {
- print("Unknown key returns null: OK")
-}
-
-print("Done!")
\ No newline at end of file
diff --git a/test_mapbox_combination.nyash b/test_mapbox_combination.nyash
deleted file mode 100644
index 3dd76afd..00000000
--- a/test_mapbox_combination.nyash
+++ /dev/null
@@ -1,69 +0,0 @@
-// MapBox + 3引数組み合わせテスト
-
-print("=== MapBox Combination Test ===")
-
-box TargetBox {
- init { handlers }
-
- // MapBoxなしのsetup
- setup1() {
- print("Setup without MapBox")
- }
-
- // MapBoxありのsetup
- setup2() {
- print("Setup with MapBox...")
- me.handlers = new MapBox()
- print("MapBox created successfully")
- }
-
- deliver(messageType, data, from) {
- print("deliver: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-box CallerBox {
- init { target, nodeId }
-
- setup(targetRef) {
- me.target = targetRef
- me.nodeId = "TestNode"
- print("CallerBox setup completed")
- }
-
- testCall() {
- print("About to call 3-arg method...")
- me.target.deliver("hello", "data", me.nodeId)
- print("3-arg call completed")
- }
-}
-
-// Test 1: MapBoxなし
-print("Test 1: Without MapBox...")
-local target1
-target1 = new TargetBox()
-target1.setup1()
-
-local caller1
-caller1 = new CallerBox()
-caller1.setup(target1)
-caller1.testCall()
-
-print("Without MapBox: SUCCESS")
-
-// Test 2: MapBoxあり
-print("Test 2: With MapBox...")
-local target2
-target2 = new TargetBox()
-target2.setup2()
-
-print("MapBox setup completed, now testing 3-arg call...")
-
-local caller2
-caller2 = new CallerBox()
-caller2.setup(target2)
-caller2.testCall()
-
-print("If you see this, MapBox + 3-arg worked!")
-
-print("All MapBox combination tests completed!")
\ No newline at end of file
diff --git a/test_mapbox_in_constructor.nyash b/test_mapbox_in_constructor.nyash
deleted file mode 100644
index fcb41989..00000000
--- a/test_mapbox_in_constructor.nyash
+++ /dev/null
@@ -1,21 +0,0 @@
-// コンストラクタ内でMapBox作成のテスト
-
-print("=== MapBox in Constructor Test ===")
-
-// Step 1: コンストラクタでMapBox作成
-box BoxWithMap {
- init { data }
-
- constructor() {
- print("Before creating MapBox")
- me.data = new MapBox()
- print("After creating MapBox")
- }
-
- test() {
- print("Test method called")
- }
-}
-
-print("About to create BoxWithMap...")
-local box1
\ No newline at end of file
diff --git a/test_mapbox_step_by_step.nyash b/test_mapbox_step_by_step.nyash
deleted file mode 100644
index 34ecb0d9..00000000
--- a/test_mapbox_step_by_step.nyash
+++ /dev/null
@@ -1,28 +0,0 @@
-// 段階的にテスト
-
-print("=== Step by Step Test ===")
-
-// Step 1: 直接MapBox使用
-print("Step 1: Direct MapBox")
-local map1
-map1 = new MapBox()
-print("Direct MapBox created!")
-
-// Step 2: コンストラクタでMapBox
-print("Step 2: MapBox in constructor")
-box TestBox {
- init { data }
-
- constructor() {
- print("Constructor starts")
- me.data = new MapBox()
- print("Constructor ends")
- }
-}
-
-print("About to create TestBox...")
-local box1
-box1 = new TestBox()
-print("TestBox created!")
-
-print("All done!")
\ No newline at end of file
diff --git a/test_me_workaround.nyash b/test_me_workaround.nyash
deleted file mode 100644
index b652e2cf..00000000
--- a/test_me_workaround.nyash
+++ /dev/null
@@ -1,70 +0,0 @@
-// me回避策テスト
-
-print("=== Me Workaround Test ===")
-
-box TargetBox {
- init { name }
-
- deliver(messageType, data, from) {
- print("deliver: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-box CallerBox {
- init { target, nodeId }
-
- setup(targetRef) {
- me.target = targetRef
- me.nodeId = "TestNode"
- print("CallerBox setup completed")
- }
-
- getNodeId() {
- return me.nodeId
- }
-
- // 方法1: me.nodeIdを直接使用(元の問題のある方法)
- testDirect() {
- print("Test 1: Direct me.nodeId usage...")
- me.target.deliver("hello", "data1", me.nodeId)
- print("Direct test completed")
- }
-
- // 方法2: local変数経由
- testViaLocal() {
- print("Test 2: Via local variable...")
- local nodeIdCopy
- nodeIdCopy = me.nodeId
- me.target.deliver("hello", "data2", nodeIdCopy)
- print("Local variable test completed")
- }
-
- // 方法3: getterメソッド経由
- testViaGetter() {
- print("Test 3: Via getter method...")
- me.target.deliver("hello", "data3", me.getNodeId())
- print("Getter method test completed")
- }
-}
-
-// テスト実行
-print("Creating boxes...")
-local target
-target = new TargetBox()
-
-local caller
-caller = new CallerBox()
-caller.setup(target)
-
-print("Testing via local variable...")
-caller.testViaLocal()
-
-print("Testing via getter method...")
-caller.testViaGetter()
-
-print("Testing direct me access...")
-caller.testDirect()
-
-print("If you see this, direct me access worked!")
-
-print("All me workaround tests completed!")
\ No newline at end of file
diff --git a/test_messagehub_only.nyash b/test_messagehub_only.nyash
deleted file mode 100644
index 49ad4eb7..00000000
--- a/test_messagehub_only.nyash
+++ /dev/null
@@ -1,18 +0,0 @@
-// MessageHub単体テスト
-
-print("=== MessageHub Only Test ===")
-
-box MessageHub {
- init { name }
-
- hello() {
- print("MessageHub says hello")
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-print("Calling hello...")
-hub.hello()
-print("Test completed!")
\ No newline at end of file
diff --git a/test_minimal_box.nyash b/test_minimal_box.nyash
deleted file mode 100644
index dd4ecf65..00000000
--- a/test_minimal_box.nyash
+++ /dev/null
@@ -1,45 +0,0 @@
-// 最小限のBoxテスト
-
-print("=== Minimal Box Test ===")
-
-// Step 1: フィールドなしBox
-box EmptyBox {
- init { }
-
- hello() {
- print("Hello from EmptyBox")
- }
-}
-
-print("Creating EmptyBox...")
-local e
-e = new EmptyBox()
-print("Calling hello...")
-e.hello()
-print("EmptyBox test done")
-
-// Step 2: フィールドありBox
-box BoxWithField {
- init { value }
-
- setValue(v) {
- me.value = v
- print("Value set to: " + v)
- }
-
- getValue() {
- return me.value
- }
-}
-
-print("\nCreating BoxWithField...")
-local b
-b = new BoxWithField()
-print("Setting value...")
-b.setValue("test")
-print("Getting value...")
-local result
-result = b.getValue()
-print("Result: " + result)
-
-print("\nAll tests completed!")
\ No newline at end of file
diff --git a/test_no_mapbox_cross_3args.nyash b/test_no_mapbox_cross_3args.nyash
deleted file mode 100644
index 78764b91..00000000
--- a/test_no_mapbox_cross_3args.nyash
+++ /dev/null
@@ -1,47 +0,0 @@
-// MapBoxなしCross-Box 3引数テスト
-
-print("=== No MapBox Cross-Box 3-Args Test ===")
-
-box BoxA {
- init { nodeId }
-
- setup() {
- print("BoxA setup start")
- me.nodeId = "NodeA" // MapBoxなし
- print("BoxA setup complete (no MapBox)")
- }
-
- callOther(other) {
- print("BoxA calling other with 3 args (no MapBox)...")
- other.receive("message", "data", me.nodeId) // 3引数 + フィールドアクセス
- }
-}
-
-box BoxB {
- init { result }
-
- setup() {
- print("BoxB setup start")
- me.result = "initialized" // MapBoxなし
- print("BoxB setup complete (no MapBox)")
- }
-
- receive(type, data, from) {
- print("BoxB received: " + from + " -> " + type + " = " + data)
- }
-}
-
-print("Creating BoxA (no MapBox)...")
-local boxA
-boxA = new BoxA()
-boxA.setup()
-
-print("Creating BoxB (no MapBox)...")
-local boxB
-boxB = new BoxB()
-boxB.setup()
-
-print("Testing 3-arg cross-box call (no MapBox)...")
-boxA.callOther(boxB)
-
-print("No MapBox cross-box 3-arg test completed!")
\ No newline at end of file
diff --git a/test_one_way_reference.nyash b/test_one_way_reference.nyash
deleted file mode 100644
index 64e439cb..00000000
--- a/test_one_way_reference.nyash
+++ /dev/null
@@ -1,42 +0,0 @@
-// 一方向参照テスト
-
-print("=== One Way Reference Test ===")
-
-// Hub側
-box MessageHub {
- init { name }
-
- process(data) {
- print("MessageHub processing: " + data)
- }
-}
-
-// Node側 - Hubを参照
-box PeerNode {
- init { nodeId, hub }
-
- setup(id, hubRef) {
- me.nodeId = id
- me.hub = hubRef
- print("PeerNode setup: " + id)
- }
-
- send(data) {
- print("PeerNode sending: " + data)
- me.hub.process(data)
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-node.setup("TestNode", hub)
-
-print("Sending data...")
-node.send("test data")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_concept.nyash b/test_p2p_concept.nyash
deleted file mode 100644
index 630f168d..00000000
--- a/test_p2p_concept.nyash
+++ /dev/null
@@ -1,43 +0,0 @@
-// P2PBoxの概念実証 - 純粋なNyashコードのみ
-
-// シンプルなメッセージ配信
-box MessageBus {
- init { handlers }
-
- constructor() {
- me.handlers = new MapBox()
- }
-
- // メッセージ送信(登録されたハンドラーに配信)
- send(type, data, from) {
- local list
- list = me.handlers.get(type)
-
- if (list != null) {
- // とりあえずprintで確認
- print(from + " -> " + type + ": " + data)
- }
- }
-
- // ハンドラー登録(今は登録だけ)
- on(type, nodeId) {
- me.handlers.set(type, nodeId)
- print("Registered: " + nodeId + " listens to " + type)
- }
-}
-
-// テスト実行
-print("=== Message Bus Test ===")
-
-local bus
-bus = new MessageBus()
-
-// 登録
-bus.on("hello", "Bob")
-bus.on("bye", "Alice")
-
-// 送信
-bus.send("hello", "Hi there!", "Alice")
-bus.send("bye", "See you!", "Bob")
-
-print("Done!")
\ No newline at end of file
diff --git a/test_p2p_debug.nyash b/test_p2p_debug.nyash
deleted file mode 100644
index dca44462..00000000
--- a/test_p2p_debug.nyash
+++ /dev/null
@@ -1,67 +0,0 @@
-// P2Pテスト - デバッグ版
-
-print("=== P2P Debug Test ===")
-
-// IntentBox
-box IntentBox {
- init { handlers }
-
- setup() {
- print("IntentBox.setup() ENTER")
- me.handlers = new MapBox()
- print("IntentBox.setup() EXIT")
- }
-
- deliver(messageType, data, from) {
- print("IntentBox.deliver() ENTER - args: " + messageType + ", " + data + ", " + from)
- print("Message: " + from + " -> " + messageType + " = " + data)
- print("IntentBox.deliver() EXIT")
- }
-}
-
-// P2PBox
-box P2PBox {
- init { nodeId, intentBox }
-
- setup(nodeId, intentBox) {
- print("P2PBox.setup() ENTER - nodeId: " + nodeId)
- me.nodeId = nodeId
- me.intentBox = intentBox
- print("P2PBox.setup() EXIT for " + nodeId)
- }
-
- send(messageType, data) {
- print("P2PBox.send() ENTER - node: " + me.nodeId + ", type: " + messageType + ", data: " + data)
- print("About to call intentBox.deliver...")
- me.intentBox.deliver(messageType, data, me.nodeId)
- print("P2PBox.send() EXIT")
- }
-}
-
-// テスト開始
-print("Creating IntentBox...")
-local bus
-bus = new IntentBox()
-print("Calling bus.setup()...")
-bus.setup()
-print("IntentBox ready!")
-
-print("Creating Alice...")
-local alice
-alice = new P2PBox()
-print("Calling alice.setup()...")
-alice.setup("Alice", bus)
-print("Alice ready!")
-
-print("Creating Bob...")
-local bob
-bob = new P2PBox()
-print("Calling bob.setup()...")
-bob.setup("Bob", bus)
-print("Bob ready!")
-
-print("Alice sending message...")
-alice.send("hello", "Hi there!")
-print("Alice message sent!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_elements.nyash b/test_p2p_elements.nyash
deleted file mode 100644
index dcb9ff07..00000000
--- a/test_p2p_elements.nyash
+++ /dev/null
@@ -1,51 +0,0 @@
-// P2Pの要素を段階的にテスト
-
-print("=== P2P Elements Test ===")
-
-// Element 1: MapBox操作
-print("Test 1: MapBox operations")
-local map
-map = new MapBox()
-map.set("hello", "Alice")
-local value
-value = map.get("hello")
-print("Got value: " + value)
-
-// Element 2: 存在しないキーのアクセス
-print("Test 2: Non-existent key")
-local missing
-missing = map.get("nonexistent")
-print("Missing value is: " + missing)
-
-// Element 3: if文での比較
-print("Test 3: If comparison")
-if (missing == "something") {
- print("This should not print")
-} else {
- print("Else branch worked")
-}
-
-// Element 4: Box間の相互参照
-print("Test 4: Box references")
-box SimpleNode {
- init { name, messageBox }
-
- setName(n) {
- me.name = n
- }
-
- setMessageBox(m) {
- me.messageBox = m
- }
-
- sendTo(type, data) {
- print("Sending: " + type + " = " + data)
- }
-}
-
-local node
-node = new SimpleNode()
-node.setName("TestNode")
-node.sendTo("test", "data")
-
-print("All elements test completed!")
\ No newline at end of file
diff --git a/test_p2p_exact_reproduction.nyash b/test_p2p_exact_reproduction.nyash
deleted file mode 100644
index cf6e9e21..00000000
--- a/test_p2p_exact_reproduction.nyash
+++ /dev/null
@@ -1,50 +0,0 @@
-// P2P完全再現テスト - 段階的
-
-print("=== P2P Exact Reproduction Test ===")
-
-// Step 1: 元の構造を完全再現(ただし`setup`メソッドあり)
-box MessageHub {
- init { handlers }
-
- setup() {
- print("MessageHub setup called")
- }
-
- deliver(messageType, data, from) {
- print("MessageHub deliver called")
- print("Message: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-box PeerNode {
- init { nodeId, messageHub }
-
- setup(nodeId, hub) {
- print("PeerNode setup called")
- me.nodeId = nodeId
- me.messageHub = hub
- print("PeerNode setup completed")
- }
-
- send(messageType, data) {
- print("PeerNode send called")
- print("About to call messageHub.deliver...")
- me.messageHub.deliver(messageType, data, me.nodeId)
- print("PeerNode send completed")
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-hub.setup()
-
-print("Creating PeerNode...")
-local alice
-alice = new PeerNode()
-alice.setup("Alice", hub)
-
-print("Sending message...")
-alice.send("hello", "Hi there!")
-
-print("Test completed successfully!")
\ No newline at end of file
diff --git a/test_p2p_fixed.nyash b/test_p2p_fixed.nyash
deleted file mode 100644
index f84ffd71..00000000
--- a/test_p2p_fixed.nyash
+++ /dev/null
@@ -1,40 +0,0 @@
-// 修正版P2Pテスト - nullを使わない
-
-print("=== Fixed P2P Test ===")
-
-box MessageBus {
- init { handlers }
-
- setup() {
- me.handlers = new MapBox()
- print("MessageBus setup complete")
- }
-
- send(type, data, from) {
- local list
- list = me.handlers.get(type)
-
- // "Key not found" で始まるかチェック
- if (list == "Bob") { // 仮の実装
- print(from + " -> " + type + ": " + data)
- }
- }
-
- on(type, nodeId) {
- me.handlers.set(type, nodeId)
- print("Registered: " + nodeId + " listens to " + type)
- }
-}
-
-print("Creating MessageBus...")
-local bus
-bus = new MessageBus()
-bus.setup()
-
-print("Registering handlers...")
-bus.on("hello", "Bob")
-
-print("Sending message...")
-bus.send("hello", "Hi!", "Alice")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_method_names.nyash b/test_p2p_method_names.nyash
deleted file mode 100644
index 2af501da..00000000
--- a/test_p2p_method_names.nyash
+++ /dev/null
@@ -1,51 +0,0 @@
-// P2P テスト - メソッド名変更
-
-print("=== P2P Method Names Test ===")
-
-box HubBox {
- init { handlers }
-
- setup() {
- print("HubBox setup called")
- }
-
- // deliver → process3 に変更
- process3(messageType, data, from) {
- print("HubBox process3 called")
- print("Message: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-box NodeBox {
- init { nodeId, messageHub }
-
- setup(nodeId, hub) {
- print("NodeBox setup called")
- me.nodeId = nodeId
- me.messageHub = hub
- print("NodeBox setup completed")
- }
-
- // send → call3 に変更
- call3(messageType, data) {
- print("NodeBox call3 called")
- print("About to call messageHub.process3...")
- me.messageHub.process3(messageType, data, me.nodeId)
- print("NodeBox call3 completed")
- }
-}
-
-print("Creating HubBox...")
-local hub
-hub = new HubBox()
-hub.setup()
-
-print("Creating NodeBox...")
-local alice
-alice = new NodeBox()
-alice.setup("Alice", hub)
-
-print("Calling call3...")
-alice.call3("hello", "Hi there!")
-
-print("Test completed successfully!")
\ No newline at end of file
diff --git a/test_p2p_no_constructor.nyash b/test_p2p_no_constructor.nyash
deleted file mode 100644
index 3f9c9641..00000000
--- a/test_p2p_no_constructor.nyash
+++ /dev/null
@@ -1,54 +0,0 @@
-// コンストラクタを使わないP2Pテスト
-
-print("=== P2P Test (No Constructor) ===")
-
-// IntentBox - コンストラクタなし版
-box IntentBox {
- init { handlers }
-
- // セットアップメソッド(コンストラクタの代わり)
- setup() {
- me.handlers = new MapBox()
- print("IntentBox setup complete")
- }
-
- deliver(messageType, data, from) {
- print("Message: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// P2PBox - コンストラクタなし版
-box P2PBox {
- init { nodeId, intentBox }
-
- setup(nodeId, intentBox) {
- me.nodeId = nodeId
- me.intentBox = intentBox
- print("P2PBox setup for " + nodeId)
- }
-
- send(messageType, data) {
- me.intentBox.deliver(messageType, data, me.nodeId)
- }
-}
-
-// テスト
-print("Creating IntentBox...")
-local bus
-bus = new IntentBox()
-bus.setup()
-
-print("Creating P2PBoxes...")
-local alice
-alice = new P2PBox()
-alice.setup("Alice", bus)
-
-local bob
-bob = new P2PBox()
-bob.setup("Bob", bus)
-
-print("Sending messages...")
-alice.send("hello", "Hi there!")
-bob.send("reply", "Hello back!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_no_mapbox.nyash b/test_p2p_no_mapbox.nyash
deleted file mode 100644
index d9358beb..00000000
--- a/test_p2p_no_mapbox.nyash
+++ /dev/null
@@ -1,52 +0,0 @@
-// P2Pテスト - MapBoxなし版
-
-print("=== P2P No MapBox Test ===")
-
-// MessageHub - MapBox使わない
-box MessageHub {
- init { name }
-
- setup() {
- print("MessageHub.setup() ENTER")
- me.name = "CentralHub"
- print("MessageHub.setup() EXIT")
- }
-
- deliver(messageType, data, from) {
- print("MessageHub.deliver() ENTER")
- print("Message: " + from + " -> " + messageType + " = " + data)
- print("MessageHub.deliver() EXIT")
- }
-}
-
-// PeerNode
-box PeerNode {
- init { nodeId, messageHub }
-
- setup(nodeId, hub) {
- print("PeerNode.setup() ENTER - nodeId: " + nodeId)
- me.nodeId = nodeId
- me.messageHub = hub
- print("PeerNode.setup() EXIT")
- }
-
- send(messageType, data) {
- print("PeerNode.send() ENTER - node: " + me.nodeId)
- print("About to call messageHub.deliver...")
- me.messageHub.deliver(messageType, data, me.nodeId)
- print("PeerNode.send() EXIT")
- }
-}
-
-// テスト
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-hub.setup()
-
-print("Creating Alice...")
-local alice
-alice = new PeerNode()
-alice.setup("Alice", hub)
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_nyash_style.nyash b/test_p2p_nyash_style.nyash
deleted file mode 100644
index 9eadf8fe..00000000
--- a/test_p2p_nyash_style.nyash
+++ /dev/null
@@ -1,84 +0,0 @@
-// P2PBox/IntentBoxをNyashスタイルで実装
-
-// IntentBox - シンプルなメッセージバス
-box IntentBox {
- init { listeners }
-
- constructor() {
- me.listeners = new MapBox()
- }
-
- // メッセージを登録されたリスナーに配信
- deliver(messageType, data, from) {
- local handlers
- handlers = me.listeners.get(messageType)
-
- if (handlers != null) {
- local i
- i = 0
- loop (i < handlers.length()) {
- local handler
- handler = handlers.get(i)
- handler.invoke(data, from) // MethodBoxのinvoke
- i = i + 1
- }
- }
- }
-
- // リスナー登録
- register(messageType, handler) {
- local handlers
- handlers = me.listeners.get(messageType)
-
- if (handlers == null) {
- handlers = new ArrayBox()
- me.listeners.set(messageType, handlers)
- }
-
- handlers.add(handler)
- }
-}
-
-// P2PBox - IntentBoxを使ってメッセージを送るノード
-box P2PBox {
- init { nodeId, intentBox }
-
- constructor(nodeId, intentBox) {
- me.nodeId = nodeId
- me.intentBox = intentBox
- }
-
- // メッセージ送信(IntentBoxに任せる)
- send(messageType, data) {
- me.intentBox.deliver(messageType, data, me.nodeId)
- }
-
- // メッセージ受信登録
- on(messageType, handler) {
- me.intentBox.register(messageType, handler)
- }
-}
-
-// テスト
-print("=== P2PBox Test ===")
-
-// 1. IntentBox作成
-local bus
-bus = new IntentBox()
-
-// 2. P2PBox作成
-local alice
-alice = new P2PBox("Alice", bus)
-
-local bob
-bob = new P2PBox("Bob", bus)
-
-// 3. Bobがメッセージ受信設定
-bob.on("greeting", new MethodBox(|data, from| {
- print("Bob received from " + from + ": " + data)
-}))
-
-// 4. Aliceがメッセージ送信
-alice.send("greeting", "Hello Bob!")
-
-print("Done!")
\ No newline at end of file
diff --git a/test_p2p_renamed.nyash b/test_p2p_renamed.nyash
deleted file mode 100644
index fc16225c..00000000
--- a/test_p2p_renamed.nyash
+++ /dev/null
@@ -1,63 +0,0 @@
-// P2Pテスト - 名前衝突回避版
-
-print("=== P2P Renamed Test ===")
-
-// MessageHub (旧IntentBox)
-box MessageHub {
- init { handlers }
-
- setup() {
- print("MessageHub.setup() ENTER")
- me.handlers = new MapBox()
- print("MessageHub.setup() EXIT")
- }
-
- deliver(messageType, data, from) {
- print("MessageHub.deliver() ENTER")
- print("Message: " + from + " -> " + messageType + " = " + data)
- print("MessageHub.deliver() EXIT")
- }
-}
-
-// PeerNode (旧P2PBox)
-box PeerNode {
- init { nodeId, messageHub }
-
- setup(nodeId, hub) {
- print("PeerNode.setup() ENTER - nodeId: " + nodeId)
- me.nodeId = nodeId
- me.messageHub = hub
- print("PeerNode.setup() EXIT")
- }
-
- send(messageType, data) {
- print("PeerNode.send() ENTER - node: " + me.nodeId)
- print("About to call messageHub.deliver...")
- me.messageHub.deliver(messageType, data, me.nodeId)
- print("PeerNode.send() EXIT")
- }
-}
-
-// テスト
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-hub.setup()
-
-print("Creating Alice...")
-local alice
-alice = new PeerNode()
-alice.setup("Alice", hub)
-
-print("Creating Bob...")
-local bob
-bob = new PeerNode()
-bob.setup("Bob", hub)
-
-print("Alice sending message...")
-alice.send("hello", "Hi there!")
-
-print("Bob sending reply...")
-bob.send("reply", "Hello back!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_renamed_boxes.nyash b/test_p2p_renamed_boxes.nyash
deleted file mode 100644
index d821b156..00000000
--- a/test_p2p_renamed_boxes.nyash
+++ /dev/null
@@ -1,51 +0,0 @@
-// P2Pテスト - Box名のみ変更
-
-print("=== P2P Renamed Boxes Test ===")
-
-// MessageHub → HubBox に変更
-box HubBox {
- init { handlers }
-
- setup() {
- print("HubBox setup called")
- }
-
- deliver(messageType, data, from) {
- print("HubBox deliver called")
- print("Message: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// PeerNode → NodeBox に変更
-box NodeBox {
- init { nodeId, messageHub }
-
- setup(nodeId, hub) {
- print("NodeBox setup called")
- me.nodeId = nodeId
- me.messageHub = hub
- print("NodeBox setup completed")
- }
-
- send(messageType, data) {
- print("NodeBox send called")
- print("About to call messageHub.deliver...")
- me.messageHub.deliver(messageType, data, me.nodeId)
- print("NodeBox send completed")
- }
-}
-
-print("Creating HubBox...")
-local hub
-hub = new HubBox()
-hub.setup()
-
-print("Creating NodeBox...")
-local alice
-alice = new NodeBox()
-alice.setup("Alice", hub)
-
-print("Sending message...")
-alice.send("hello", "Hi there!")
-
-print("Test completed successfully!")
\ No newline at end of file
diff --git a/test_p2p_simple.nyash b/test_p2p_simple.nyash
deleted file mode 100644
index 25e3cfe0..00000000
--- a/test_p2p_simple.nyash
+++ /dev/null
@@ -1,25 +0,0 @@
-// P2PBox/IntentBoxの最もシンプルなテスト
-
-// 1. 共通のIntentBoxを作成
-local bus
-bus = new IntentBox()
-
-// 2. 2つのP2PBoxを作成(同じIntentBoxを共有)
-local node_a
-node_a = new P2PBox("node-a", bus)
-
-local node_b
-node_b = new P2PBox("node-b", bus)
-
-// 3. node_bでメッセージを受信する準備
-node_b.on("hello", |data, from| {
- print("node_b received: " + data + " from " + from)
-})
-
-// 4. node_aからメッセージを送信
-node_a.send("hello", "Hello from A!", "node-b")
-
-// 5. ブロードキャスト(全員に送信)
-node_a.send("broadcast", "Hello everyone!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_simple_print.nyash b/test_p2p_simple_print.nyash
deleted file mode 100644
index 29e47452..00000000
--- a/test_p2p_simple_print.nyash
+++ /dev/null
@@ -1,49 +0,0 @@
-// 超シンプルなP2PBoxテスト(printだけ)
-
-// IntentBox - メッセージをprintするだけ
-box IntentBox {
- init { }
-
- constructor() {
- }
-
- // メッセージを配信(今は単にprintするだけ)
- deliver(messageType, data, from) {
- print("IntentBox: " + from + " sent " + messageType + " with data: " + data)
- }
-}
-
-// P2PBox - IntentBoxにメッセージを送る
-box P2PBox {
- init { nodeId, intentBox }
-
- constructor(nodeId, intentBox) {
- me.nodeId = nodeId
- me.intentBox = intentBox
- }
-
- // メッセージ送信
- send(messageType, data) {
- me.intentBox.deliver(messageType, data, me.nodeId)
- }
-}
-
-// テスト
-print("=== Simple P2PBox Test ===")
-
-// 1. IntentBox作成
-local bus
-bus = new IntentBox()
-
-// 2. P2PBox作成
-local alice
-alice = new P2PBox("Alice", bus)
-
-local bob
-bob = new P2PBox("Bob", bus)
-
-// 3. メッセージ送信
-alice.send("greeting", "Hello!")
-bob.send("reply", "Hi there!")
-
-print("Done!")
\ No newline at end of file
diff --git a/test_p2p_two_args.nyash b/test_p2p_two_args.nyash
deleted file mode 100644
index 494f4ad4..00000000
--- a/test_p2p_two_args.nyash
+++ /dev/null
@@ -1,75 +0,0 @@
-// P2P実装 - 2引数制限対応版
-
-print("=== P2P Two Args Version ===")
-
-// メッセージオブジェクト - データと送信者を1つにまとめる
-box Message {
- init { type, data, sender }
-
- setup(msgType, msgData, msgSender) {
- me.type = msgType
- me.data = msgData
- me.sender = msgSender
- print("Message created: " + msgType + " from " + msgSender)
- }
-
- getType() {
- return me.type
- }
-
- getData() {
- return me.data
- }
-
- getSender() {
- return me.sender
- }
-}
-
-// MessageHub - 2引数のdeliverメソッド
-box MessageHub {
- init { name }
-
- deliver(message) {
- print("Hub delivering message:")
- print(" Type: " + message.getType())
- print(" Data: " + message.getData())
- print(" From: " + message.getSender())
- }
-}
-
-// PeerNode - メッセージオブジェクトを作成してsend
-box PeerNode {
- init { nodeId, hub }
-
- setup(id, hubRef) {
- me.nodeId = id
- me.hub = hubRef
- print("PeerNode setup: " + id)
- }
-
- send(msgType, msgData) {
- print("PeerNode creating message...")
- local msg
- msg = new Message()
- msg.setup(msgType, msgData, me.nodeId)
-
- print("PeerNode sending message...")
- me.hub.deliver(msg)
- }
-}
-
-// テスト
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-
-print("Creating PeerNode...")
-local alice
-alice = new PeerNode()
-alice.setup("Alice", hub)
-
-print("Sending message...")
-alice.send("hello", "Hi there!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_p2p_very_simple.nyash b/test_p2p_very_simple.nyash
deleted file mode 100644
index 488352df..00000000
--- a/test_p2p_very_simple.nyash
+++ /dev/null
@@ -1,22 +0,0 @@
-// 超シンプルなP2PBoxテスト
-
-// 1. IntentBoxを作る(メッセージバス)
-local bus
-bus = new IntentBox()
-
-// 2. P2PBoxを2つ作る(同じIntentBoxを共有)
-local alice
-alice = new P2PBox("alice", bus)
-
-local bob
-bob = new P2PBox("bob", bus)
-
-// 3. bobが受信準備
-bob.on("hello", |data| {
- print("Bob received: " + data)
-})
-
-// 4. aliceがメッセージ送信
-alice.send("hello", "Hi Bob!")
-
-print("Done!")
\ No newline at end of file
diff --git a/test_peernode_only.nyash b/test_peernode_only.nyash
deleted file mode 100644
index f21f9a7b..00000000
--- a/test_peernode_only.nyash
+++ /dev/null
@@ -1,18 +0,0 @@
-// PeerNode単体テスト
-
-print("=== PeerNode Only Test ===")
-
-box PeerNode {
- init { nodeId }
-
- hello() {
- print("PeerNode says hello")
- }
-}
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-print("Calling hello...")
-node.hello()
-print("Test completed!")
\ No newline at end of file
diff --git a/test_shared_reference.nyash b/test_shared_reference.nyash
deleted file mode 100644
index b7df7a02..00000000
--- a/test_shared_reference.nyash
+++ /dev/null
@@ -1,73 +0,0 @@
-// 共有参照とマルチ引数テスト
-
-print("=== Shared Reference Test ===")
-
-// 共有されるBox
-box SharedBox {
- init { name }
-
- setName(n) {
- me.name = n
- print("SharedBox name: " + n)
- }
-
- // 3つの引数を受け取るメソッド
- process(arg1, arg2, arg3) {
- print("SharedBox processing: " + arg1 + ", " + arg2 + ", " + arg3)
- }
-}
-
-// 共有参照を持つBox1
-box Node1 {
- init { nodeId, sharedRef }
-
- setup(id, shared) {
- me.nodeId = id
- me.sharedRef = shared
- print("Node1 setup: " + id)
- }
-
- action() {
- print("Node1 calling shared method...")
- me.sharedRef.process("data1", "from", me.nodeId)
- print("Node1 action completed")
- }
-}
-
-// 共有参照を持つBox2
-box Node2 {
- init { nodeId, sharedRef }
-
- setup(id, shared) {
- me.nodeId = id
- me.sharedRef = shared
- print("Node2 setup: " + id)
- }
-
- action() {
- print("Node2 calling shared method...")
- me.sharedRef.process("data2", "from", me.nodeId)
- print("Node2 action completed")
- }
-}
-
-// テスト
-print("Creating shared box...")
-local shared
-shared = new SharedBox()
-shared.setName("CentralHub")
-
-print("Creating nodes...")
-local node1
-node1 = new Node1()
-node1.setup("NodeA", shared)
-
-local node2
-node2 = new Node2()
-node2.setup("NodeB", shared)
-
-print("Testing actions...")
-node1.action()
-node2.action()
-
-print("Shared reference test completed!")
\ No newline at end of file
diff --git a/test_simple_box_no_args.nyash b/test_simple_box_no_args.nyash
deleted file mode 100644
index 16b06e04..00000000
--- a/test_simple_box_no_args.nyash
+++ /dev/null
@@ -1,35 +0,0 @@
-// 引数なしコンストラクタのテスト
-
-print("=== Simple Box Test (No Args) ===")
-
-box Counter {
- init { count }
-
- constructor() {
- me.count = 0
- print("Counter created!")
- }
-
- increment() {
- me.count = me.count + 1
- }
-
- getCount() {
- return me.count
- }
-}
-
-// テスト
-local c
-c = new Counter()
-
-print("Initial count: " + c.getCount())
-
-c.increment()
-print("After increment: " + c.getCount())
-
-c.increment()
-c.increment()
-print("After 3 increments: " + c.getCount())
-
-print("Done!")
\ No newline at end of file
diff --git a/test_simple_circular.nyash b/test_simple_circular.nyash
deleted file mode 100644
index 59fe3a8a..00000000
--- a/test_simple_circular.nyash
+++ /dev/null
@@ -1,30 +0,0 @@
-// 簡単な循環参照テスト
-
-print("=== Simple Circular Reference Test ===")
-
-box TestBox {
- init { value }
-
- setup() {
- print("TestBox setup start")
- me.value = "test"
- print("TestBox setup complete")
- }
-
- getValue() {
- print("About to access me.value...")
- return me.value
- }
-}
-
-print("Creating TestBox...")
-local testBox
-testBox = new TestBox()
-testBox.setup()
-
-print("Testing field access...")
-local result
-result = testBox.getValue()
-print("Result: " + result)
-
-print("Simple circular test completed!")
\ No newline at end of file
diff --git a/test_simple_names.nyash b/test_simple_names.nyash
deleted file mode 100644
index a39de723..00000000
--- a/test_simple_names.nyash
+++ /dev/null
@@ -1,48 +0,0 @@
-// シンプル名でのテスト
-
-print("=== Simple Names Test ===")
-
-// Hub
-box Hub {
- init { data }
-
- constructor() {
- print("Hub.constructor() called")
- me.data = new MapBox()
- }
-
- process(type, value, sender) {
- print("Hub.process(): " + sender + " -> " + type + " = " + value)
- }
-}
-
-// Node
-box Node {
- init { id, hub }
-
- constructor() {
- print("Node.constructor() called")
- }
-
- connect(nodeId, hubRef) {
- me.id = nodeId
- me.hub = hubRef
- print("Node connected: " + nodeId)
- }
-
- send(type, value) {
- print("Node.send(): " + me.id + " sending " + type)
- me.hub.process(type, value, me.id)
- }
-}
-
-print("Test starting...")
-local h
-h = new Hub()
-
-local n
-n = new Node()
-n.connect("TestNode", h)
-
-n.send("test", "data")
-print("Test completed!")
\ No newline at end of file
diff --git a/test_single_mapbox_3args.nyash b/test_single_mapbox_3args.nyash
deleted file mode 100644
index a61bc285..00000000
--- a/test_single_mapbox_3args.nyash
+++ /dev/null
@@ -1,34 +0,0 @@
-// 単一MapBox+3引数テスト
-
-print("=== Single MapBox 3-Args Test ===")
-
-box TestBox {
- init { data, nodeId }
-
- setup() {
- print("TestBox setup start")
- me.data = new MapBox()
- me.nodeId = "TestNode"
- print("TestBox setup complete")
- }
-
- testMethod(arg1, arg2, arg3) {
- print("TestMethod called: " + arg1 + ", " + arg2 + ", " + arg3)
- }
-
- callSelf() {
- print("About to call self with 3 args...")
- me.testMethod("first", "second", me.nodeId) // 自分自身への3引数呼び出し
- print("Self call completed")
- }
-}
-
-print("Creating TestBox...")
-local testBox
-testBox = new TestBox()
-testBox.setup()
-
-print("Testing self 3-arg call...")
-testBox.callSelf()
-
-print("Single MapBox 3-arg test completed!")
\ No newline at end of file
diff --git a/test_specific_arg_names.nyash b/test_specific_arg_names.nyash
deleted file mode 100644
index 7a4c9e4d..00000000
--- a/test_specific_arg_names.nyash
+++ /dev/null
@@ -1,56 +0,0 @@
-// 特定の引数名テスト
-
-print("=== Specific Arg Names Test ===")
-
-box TargetBox {
- init { name }
-
- // 元の引数名を使用
- deliver(messageType, data, from) {
- print("deliver: " + from + " -> " + messageType + " = " + data)
- }
-
- // 一般的な引数名
- process(a, b, c) {
- print("process: " + a + ", " + b + ", " + c)
- }
-}
-
-box CallerBox {
- init { target, nodeId }
-
- setup(targetRef) {
- me.target = targetRef
- me.nodeId = "TestNode"
- print("CallerBox setup completed")
- }
-
- testGeneric() {
- print("Testing generic args...")
- me.target.process("arg1", "arg2", me.nodeId)
- print("Generic test completed")
- }
-
- testSpecific() {
- print("Testing specific args...")
- me.target.deliver("hello", "Hi there!", me.nodeId)
- print("Specific test completed")
- }
-}
-
-// テスト実行
-print("Creating boxes...")
-local target
-target = new TargetBox()
-
-local caller
-caller = new CallerBox()
-caller.setup(target)
-
-print("Testing with generic arg names...")
-caller.testGeneric()
-
-print("Testing with specific arg names (messageType, data, from)...")
-caller.testSpecific()
-
-print("All arg name tests completed!")
\ No newline at end of file
diff --git a/test_static_box_main.nyash b/test_static_box_main.nyash
deleted file mode 100644
index af83123d..00000000
--- a/test_static_box_main.nyash
+++ /dev/null
@@ -1,42 +0,0 @@
-// 🎯 Static Box Main パターンのテスト - 正統派Nyashスタイル
-
-static box Main {
- init {
- console, x, y, result, isActive, isInactive, canEnter
- }
-
- main() {
- me.console = new ConsoleBox()
- me.console.log("🎉 Hello from proper Nyash!")
- me.console.log("Static box Main pattern working!")
-
- me.x = 42
- me.y = 58
- me.result = me.x + me.y
- me.console.log("Calculation result: " + me.result)
-
- // NOT演算子テスト
- me.isActive = true
- me.isInactive = not me.isActive
- me.console.log("NOT test - isInactive: " + me.isInactive)
-
- // AND/OR演算子テスト
- me.canEnter = me.x > 30 and me.y < 100
- me.console.log("AND test - canEnter: " + me.canEnter)
-
- return "Main completed successfully!"
- }
-}
-
-// デモ用のBoxも定義可能
-box TestBox {
- init { value }
-
- TestBox() {
- me.value = "from TestBox"
- }
-
- getValue() {
- return me.value
- }
-}
\ No newline at end of file
diff --git a/test_three_args.nyash b/test_three_args.nyash
deleted file mode 100644
index ce46ab0e..00000000
--- a/test_three_args.nyash
+++ /dev/null
@@ -1,42 +0,0 @@
-// 3つの引数テスト
-
-print("=== Three Args Test ===")
-
-// Hub側 - 3つの引数を受け取る
-box MessageHub {
- init { name }
-
- process(messageType, data, from) {
- print("MessageHub processing: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// Node側
-box PeerNode {
- init { nodeId, hub }
-
- setup(id, hubRef) {
- me.nodeId = id
- me.hub = hubRef
- print("PeerNode setup: " + id)
- }
-
- send(messageType, data) {
- print("PeerNode sending: " + messageType)
- me.hub.process(messageType, data, me.nodeId)
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-node.setup("TestNode", hub)
-
-print("Sending message...")
-node.send("hello", "Hi there!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_three_args_literal.nyash b/test_three_args_literal.nyash
deleted file mode 100644
index b415a809..00000000
--- a/test_three_args_literal.nyash
+++ /dev/null
@@ -1,43 +0,0 @@
-// 3つの引数テスト - リテラル値のみ
-
-print("=== Three Args Literal Test ===")
-
-// Hub側 - 3つの引数を受け取る
-box MessageHub {
- init { name }
-
- process(messageType, data, from) {
- print("MessageHub processing: " + from + " -> " + messageType + " = " + data)
- }
-}
-
-// Node側
-box PeerNode {
- init { nodeId, hub }
-
- setup(id, hubRef) {
- me.nodeId = id
- me.hub = hubRef
- print("PeerNode setup: " + id)
- }
-
- send(messageType, data) {
- print("PeerNode sending: " + messageType)
- // me.nodeId の代わりにリテラル値を使用
- me.hub.process(messageType, data, "LiteralSender")
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-node.setup("TestNode", hub)
-
-print("Sending message...")
-node.send("hello", "Hi there!")
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_try_catch_simple.nyash b/test_try_catch_simple.nyash
deleted file mode 100644
index d8ed449a..00000000
--- a/test_try_catch_simple.nyash
+++ /dev/null
@@ -1,33 +0,0 @@
-// 🔥 超簡単なtry/catchテスト
-
-static box Main {
- init { console }
-
- main() {
- me.console = new ConsoleBox()
- me.console.log("🎯 try/catchテスト開始")
-
- // テスト1: 正常動作
- me.console.log("テスト1: 正常動作")
- try {
- me.console.log("try内部: 正常処理実行")
- } catch (Exception e) {
- me.console.log("catch: " + e)
- }
- me.console.log("テスト1完了")
-
- // テスト2: エラー発生
- me.console.log("テスト2: エラー発生")
- try {
- me.console.log("try内部: エラーを起こします")
- local fakeVar
- fakeVar = new NonExistentBox()
- } catch (Exception e) {
- me.console.log("catch成功: " + e)
- }
- me.console.log("テスト2完了")
-
- me.console.log("🎉 try/catchテスト終了")
- return "テスト成功"
- }
-}
\ No newline at end of file
diff --git a/test_two_boxes_simple.nyash b/test_two_boxes_simple.nyash
deleted file mode 100644
index f3cb320b..00000000
--- a/test_two_boxes_simple.nyash
+++ /dev/null
@@ -1,33 +0,0 @@
-// 2つのBox - 相互参照なし
-
-print("=== Two Boxes Simple Test ===")
-
-// 1つ目のBox
-box MessageHub {
- init { name }
-
- hello() {
- print("MessageHub says hello")
- }
-}
-
-// 2つ目のBox
-box PeerNode {
- init { nodeId }
-
- hello() {
- print("PeerNode says hello")
- }
-}
-
-print("Creating MessageHub...")
-local hub
-hub = new MessageHub()
-hub.hello()
-
-print("Creating PeerNode...")
-local node
-node = new PeerNode()
-node.hello()
-
-print("Test completed!")
\ No newline at end of file
diff --git a/test_undeclared_variable_error.nyash b/test_undeclared_variable_error.nyash
deleted file mode 100644
index 94ebdaaa..00000000
--- a/test_undeclared_variable_error.nyash
+++ /dev/null
@@ -1,11 +0,0 @@
-// 🚨 未宣言変数エラーテスト - 厳密性の実証
-
-static box Main {
- main() {
- // ❌ これは未宣言変数エラーになるはず
- x = 42
- console = new ConsoleBox()
- console.log("This should not work!")
- return "This should fail!"
- }
-}
\ No newline at end of file
diff --git a/test_unused_field.nyash b/test_unused_field.nyash
deleted file mode 100644
index fb85e110..00000000
--- a/test_unused_field.nyash
+++ /dev/null
@@ -1,79 +0,0 @@
-// 未使用フィールドテスト
-
-print("=== Unused Field Test ===")
-
-// Test 1: 未使用フィールドなし
-box CleanTargetBox {
- init { name }
-
- deliver(a, b, c) {
- print("CleanTargetBox.deliver: " + a + ", " + b + ", " + c)
- }
-}
-
-box CleanCallerBox {
- init { target, nodeId }
-
- setup(targetRef) {
- me.target = targetRef
- me.nodeId = "TestValue"
- print("CleanCallerBox setup completed")
- }
-
- test() {
- print("Clean test: No unused fields...")
- me.target.deliver("hello", "data", me.nodeId)
- print("Clean test completed")
- }
-}
-
-// Test 2: 未使用フィールドあり(元のハングパターン)
-box DirtyTargetBox {
- init { handlers } // 未使用フィールド!
-
- deliver(a, b, c) {
- print("DirtyTargetBox.deliver: " + a + ", " + b + ", " + c)
- }
-}
-
-box DirtyCallerBox {
- init { target, nodeId, unusedField } // 一部未使用
-
- setup(targetRef) {
- me.target = targetRef
- me.nodeId = "TestValue"
- // me.unusedField は設定しない
- print("DirtyCallerBox setup completed")
- }
-
- test() {
- print("Dirty test: With unused fields...")
- me.target.deliver("hello", "data", me.nodeId)
- print("Dirty test completed")
- }
-}
-
-// テスト実行
-print("Testing clean boxes (no unused fields)...")
-local cleanTarget
-cleanTarget = new CleanTargetBox()
-
-local cleanCaller
-cleanCaller = new CleanCallerBox()
-cleanCaller.setup(cleanTarget)
-cleanCaller.test()
-
-print("Clean boxes worked!")
-
-print("Testing dirty boxes (with unused fields)...")
-local dirtyTarget
-dirtyTarget = new DirtyTargetBox()
-
-local dirtyCaller
-dirtyCaller = new DirtyCallerBox()
-dirtyCaller.setup(dirtyTarget)
-dirtyCaller.test()
-
-print("If you see this, unused fields also worked!")
-
-print("All unused field tests completed!")
\ No newline at end of file
diff --git a/test_user_box.nyash b/test_user_box.nyash
deleted file mode 100644
index 50173f87..00000000
--- a/test_user_box.nyash
+++ /dev/null
@@ -1,35 +0,0 @@
-// ユーザー定義Boxが正しく動作するかテスト
-
-print("=== User Box Test ===")
-
-// シンプルなBox定義
-box SimpleBox {
- init { value }
-
- constructor(v) {
- me.value = v
- }
-
- getValue() {
- return me.value
- }
-
- setValue(v) {
- me.value = v
- }
-}
-
-// テスト
-local box1
-box1 = new SimpleBox("Hello")
-print("box1 value: " + box1.getValue())
-
-box1.setValue("World")
-print("box1 new value: " + box1.getValue())
-
-// 2つ目のインスタンス
-local box2
-box2 = new SimpleBox(42)
-print("box2 value: " + box2.getValue())
-
-print("Done!")
\ No newline at end of file