refactor: 大規模ファイル分割とプラグインリファクタリング

## 🎯 プラグイン整理
-  **nyash-json-plugin**: プロバイダー抽象化、NodeRep統一
-  **nyash-string-plugin**: TLVヘルパー整理
-  **nyash-net-plugin**: HTTPヘルパー分離、ソケット管理改善
-  **nyash-counter-plugin/fixture-plugin**: 基本構造整理

## 📂 mir_interpreter分割
-  **mir_interpreter.rs → mir_interpreter/ディレクトリ**
  - mod.rs: メイン構造体定義
  - execution.rs: 実行エンジン
  - memory.rs: メモリ管理
  - instructions/: 命令別実装

## 🔧 その他の改善
- テストファイル群の最適化
- LLVMコンパイラのメイン関数整理
- 不要なインポート削除

1000行超のファイルを適切なモジュール構造に分割完了!

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Selfhosting Dev
2025-09-25 01:09:48 +09:00
parent d052f9dc97
commit 824ca600ea
27 changed files with 1605 additions and 1060 deletions

View File

@ -2,7 +2,10 @@
use once_cell::sync::Lazy;
use std::collections::HashMap;
use std::sync::{atomic::{AtomicU32, Ordering}, Mutex};
use std::sync::{
atomic::{AtomicU32, Ordering},
Mutex,
};
// ===== Error Codes (BID-1 alignment) =====
const NYB_SUCCESS: i32 = 0;
@ -42,7 +45,9 @@ pub extern "C" fn nyash_plugin_invoke(
result: *mut u8,
result_len: *mut usize,
) -> i32 {
if type_id != TYPE_ID_FIXTURE { return NYB_E_INVALID_TYPE; }
if type_id != TYPE_ID_FIXTURE {
return NYB_E_INVALID_TYPE;
}
unsafe { dispatch(method_id, instance_id, args, args_len, result, result_len) }
}
@ -72,7 +77,9 @@ unsafe impl Sync for NyashTypeBoxFfi {}
extern "C" fn fixture_resolve(name: *const std::os::raw::c_char) -> u32 {
unsafe {
if name.is_null() { return 0; }
if name.is_null() {
return 0;
}
let s = std::ffi::CStr::from_ptr(name).to_string_lossy();
match s.as_ref() {
"birth" => METHOD_BIRTH,
@ -125,12 +132,18 @@ unsafe fn dispatch(
}
unsafe fn birth(result: *mut u8, result_len: *mut usize) -> i32 {
if result_len.is_null() { return NYB_E_INVALID_ARGS; }
if preflight(result, result_len, 4) { return NYB_E_SHORT_BUFFER; }
if result_len.is_null() {
return NYB_E_INVALID_ARGS;
}
if preflight(result, result_len, 4) {
return NYB_E_SHORT_BUFFER;
}
let id = INSTANCE_COUNTER.fetch_add(1, Ordering::Relaxed);
if let Ok(mut map) = INSTANCES.lock() {
map.insert(id, FixtureInstance { alive: true });
} else { return NYB_E_PLUGIN_ERROR; }
} else {
return NYB_E_PLUGIN_ERROR;
}
let bytes = id.to_le_bytes();
std::ptr::copy_nonoverlapping(bytes.as_ptr(), result, 4);
*result_len = 4;
@ -141,33 +154,43 @@ unsafe fn fini(instance_id: u32) -> i32 {
if let Ok(mut map) = INSTANCES.lock() {
map.remove(&instance_id);
NYB_SUCCESS
} else { NYB_E_PLUGIN_ERROR }
} else {
NYB_E_PLUGIN_ERROR
}
}
unsafe fn echo(
args: *const u8,
args_len: usize,
result: *mut u8,
result_len: *mut usize,
) -> i32 {
unsafe fn echo(args: *const u8, args_len: usize, result: *mut u8, result_len: *mut usize) -> i32 {
// Expect TLV with 1 argument: tag=6 (String)
if args.is_null() || args_len < 4 { return NYB_E_INVALID_ARGS; }
if args.is_null() || args_len < 4 {
return NYB_E_INVALID_ARGS;
}
let slice = std::slice::from_raw_parts(args, args_len);
// Minimal TLV parse: skip header (ver/argc) and verify first entry is String
if slice.len() < 8 { return NYB_E_INVALID_ARGS; }
if slice.len() < 8 {
return NYB_E_INVALID_ARGS;
}
if slice[0] != 1 || slice[1] != 0 { /* ver=1 little endian */ }
// position 4.. is first entry; [tag, rsv, sz_lo, sz_hi, payload...]
let tag = slice[4];
if tag != 6 { return NYB_E_INVALID_ARGS; }
if tag != 6 {
return NYB_E_INVALID_ARGS;
}
let sz = u16::from_le_bytes([slice[6], slice[7]]) as usize;
if 8 + sz > slice.len() { return NYB_E_INVALID_ARGS; }
if 8 + sz > slice.len() {
return NYB_E_INVALID_ARGS;
}
let payload = &slice[8..8 + sz];
let s = match std::str::from_utf8(payload) { Ok(t) => t, Err(_) => return NYB_E_INVALID_ARGS };
let s = match std::str::from_utf8(payload) {
Ok(t) => t,
Err(_) => return NYB_E_INVALID_ARGS,
};
write_tlv_str(s, result, result_len)
}
fn write_tlv_result(payloads: &[(u8, &[u8])], result: *mut u8, result_len: *mut usize) -> i32 {
if result_len.is_null() { return NYB_E_INVALID_ARGS; }
if result_len.is_null() {
return NYB_E_INVALID_ARGS;
}
let needed = 4 + payloads.iter().map(|(_, p)| 4 + p.len()).sum::<usize>();
let mut buf: Vec<u8> = Vec::with_capacity(needed);
buf.extend_from_slice(&1u16.to_le_bytes()); // ver
@ -195,7 +218,9 @@ fn write_tlv_str(s: &str, result: *mut u8, result_len: *mut usize) -> i32 {
fn preflight(result: *mut u8, result_len: *mut usize, needed: usize) -> bool {
unsafe {
if result_len.is_null() { return false; }
if result_len.is_null() {
return false;
}
if result.is_null() || *result_len < needed {
*result_len = needed;
return true;
@ -203,4 +228,3 @@ fn preflight(result: *mut u8, result_len: *mut usize, needed: usize) -> bool {
}
false
}