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

@ -51,8 +51,8 @@ enum NodeRep {
}
struct DocInst {
root: Option<Arc<Value>>, // Serde provider
doc_ptr: Option<usize>, // Yyjson provider (opaque pointer value)
root: Option<Arc<Value>>, // Serde provider
doc_ptr: Option<usize>, // Yyjson provider (opaque pointer value)
last_err: Option<String>,
}
static DOCS: Lazy<Mutex<HashMap<u32, DocInst>>> = Lazy::new(|| Mutex::new(HashMap::new()));
@ -150,7 +150,14 @@ extern "C" fn jsondoc_invoke_id(
JD_BIRTH => {
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let Ok(mut m) = DOCS.lock() {
m.insert(id, DocInst { root: None, doc_ptr: None, last_err: None });
m.insert(
id,
DocInst {
root: None,
doc_ptr: None,
last_err: None,
},
);
} else {
return E_PLUGIN;
}
@ -166,19 +173,32 @@ extern "C" fn jsondoc_invoke_id(
match provider_kind() {
ProviderKind::Serde => {
match provider_parse(&text) {
Ok(v) => { doc.root = Some(Arc::new(v)); doc.doc_ptr = None; doc.last_err = None; }
Err(e) => { doc.root = None; doc.doc_ptr = None; doc.last_err = Some(e.to_string()); }
Ok(v) => {
doc.root = Some(Arc::new(v));
doc.doc_ptr = None;
doc.last_err = None;
}
Err(e) => {
doc.root = None;
doc.doc_ptr = None;
doc.last_err = Some(e.to_string());
}
}
return write_tlv_void(result, result_len);
}
ProviderKind::Yyjson => {
let c = CString::new(text.as_bytes()).unwrap_or_default();
let mut ec: i32 = -1;
let p = nyjson_parse_doc(c.as_ptr(), text.len(), &mut ec as *mut i32);
let p =
nyjson_parse_doc(c.as_ptr(), text.len(), &mut ec as *mut i32);
if p.is_null() {
doc.root = None; doc.doc_ptr = None; doc.last_err = Some(format!("E{}", ec));
doc.root = None;
doc.doc_ptr = None;
doc.last_err = Some(format!("E{}", ec));
} else {
doc.root = None; doc.doc_ptr = Some(p as usize); doc.last_err = None;
doc.root = None;
doc.doc_ptr = Some(p as usize);
doc.last_err = None;
}
return write_tlv_void(result, result_len);
}
@ -197,8 +217,15 @@ extern "C" fn jsondoc_invoke_id(
ProviderKind::Serde => {
if let Some(root_arc) = doc.root.as_ref().map(|r| Arc::clone(r)) {
let node_id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let Ok(mut nn) = NODES.lock() { nn.insert(node_id, NodeRep::Serde(root_arc)); }
return write_tlv_handle(T_JSON_NODE, node_id, result, result_len);
if let Ok(mut nn) = NODES.lock() {
nn.insert(node_id, NodeRep::Serde(root_arc));
}
return write_tlv_handle(
T_JSON_NODE,
node_id,
result,
result_len,
);
}
return E_PLUGIN;
}
@ -206,8 +233,21 @@ extern "C" fn jsondoc_invoke_id(
if let Some(dp) = doc.doc_ptr {
let vp = nyjson_doc_root(dp as *mut c_void);
let node_id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let Ok(mut nn) = NODES.lock() { nn.insert(node_id, NodeRep::Yy { doc_id: instance_id, ptr: vp as usize }); }
return write_tlv_handle(T_JSON_NODE, node_id, result, result_len);
if let Ok(mut nn) = NODES.lock() {
nn.insert(
node_id,
NodeRep::Yy {
doc_id: instance_id,
ptr: vp as usize,
},
);
}
return write_tlv_handle(
T_JSON_NODE,
node_id,
result,
result_len,
);
}
return E_PLUGIN;
}
@ -231,7 +271,9 @@ extern "C" fn jsondoc_invoke_id(
JD_FINI => {
if let Ok(mut m) = DOCS.lock() {
if let Some(mut di) = m.remove(&instance_id) {
if let Some(dp) = di.doc_ptr.take() { nyjson_doc_free(dp as *mut c_void); }
if let Some(dp) = di.doc_ptr.take() {
nyjson_doc_free(dp as *mut c_void);
}
}
}
return write_tlv_void(result, result_len);
@ -281,146 +323,330 @@ extern "C" fn jsonnode_invoke_id(
) -> i32 {
unsafe {
let node_rep = match NODES.lock() {
Ok(m) => match m.get(&instance_id) { Some(v) => v.clone(), None => return E_HANDLE },
Ok(m) => match m.get(&instance_id) {
Some(v) => v.clone(),
None => return E_HANDLE,
},
Err(_) => return E_PLUGIN,
};
match method_id {
JN_BIRTH => {
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let Ok(mut m) = NODES.lock() { m.insert(id, NodeRep::Serde(Arc::new(Value::Null))); } else { return E_PLUGIN; }
if let Ok(mut m) = NODES.lock() {
m.insert(id, NodeRep::Serde(Arc::new(Value::Null)));
} else {
return E_PLUGIN;
}
return write_u32(id, result, result_len);
}
JN_KIND => {
match provider_kind() {
ProviderKind::Serde => {
let k = match node_rep { NodeRep::Serde(ref a) => match &**a {
JN_KIND => match provider_kind() {
ProviderKind::Serde => {
let k = match node_rep {
NodeRep::Serde(ref a) => match &**a {
Value::Null => "null",
Value::Bool(_) => "bool",
Value::Number(n) => { if n.is_i64() { "int" } else { "real" } },
Value::Number(n) => {
if n.is_i64() {
"int"
} else {
"real"
}
}
Value::String(_) => "string",
Value::Array(_) => "array",
Value::Object(_) => "object",
}, _ => "null"};
write_tlv_string(k, result, result_len)
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
let k = if v.is_null() { "null" }
else if nyjson_is_obj(v) != 0 { "object" }
else if nyjson_is_arr(v) != 0 { "array" }
else if nyjson_is_str(v) != 0 { "string" }
else if nyjson_is_int(v) != 0 { "int" }
else if nyjson_is_real(v) != 0 { "real" }
else if nyjson_is_bool(v) != 0 { "bool" }
else { "null" };
write_tlv_string(k, result, result_len)
}
},
_ => "null",
};
write_tlv_string(k, result, result_len)
}
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
let k = if v.is_null() {
"null"
} else if nyjson_is_obj(v) != 0 {
"object"
} else if nyjson_is_arr(v) != 0 {
"array"
} else if nyjson_is_str(v) != 0 {
"string"
} else if nyjson_is_int(v) != 0 {
"int"
} else if nyjson_is_real(v) != 0 {
"real"
} else if nyjson_is_bool(v) != 0 {
"bool"
} else {
"null"
};
write_tlv_string(k, result, result_len)
}
},
JN_GET => {
let key = match read_arg_string(args, args_len, 0) { Some(s) => s, None => return E_ARGS };
let key = match read_arg_string(args, args_len, 0) {
Some(s) => s,
None => return E_ARGS,
};
match provider_kind() {
ProviderKind::Serde => {
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let NodeRep::Serde(ref a) = node_rep {
if let Value::Object(map) = &**a {
if let Some(child) = map.get(&key) {
if let Ok(mut mm) = NODES.lock() { mm.insert(id, NodeRep::Serde(Arc::new(child.clone()))); }
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, NodeRep::Serde(Arc::new(child.clone())));
}
return write_tlv_handle(T_JSON_NODE, id, result, result_len);
}
}
}
if let Ok(mut mm) = NODES.lock() { mm.insert(id, NodeRep::Serde(Arc::new(Value::Null))); }
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, NodeRep::Serde(Arc::new(Value::Null)));
}
write_tlv_handle(T_JSON_NODE, id, result, result_len)
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
let mut out_ptr: *mut c_void = std::ptr::null_mut();
if !v.is_null() && nyjson_is_obj(v) != 0 {
let c = CString::new(key).unwrap_or_default();
out_ptr = nyjson_obj_get_key(v, c.as_ptr());
}
let doc_id = if let NodeRep::Yy { doc_id, .. } = node_rep { doc_id } else { 0 };
let doc_id = if let NodeRep::Yy { doc_id, .. } = node_rep {
doc_id
} else {
0
};
let rep = if out_ptr.is_null() {
NodeRep::Yy { doc_id, ptr: 0 }
} else {
NodeRep::Yy { doc_id, ptr: out_ptr as usize }
NodeRep::Yy {
doc_id,
ptr: out_ptr as usize,
}
};
if let Ok(mut mm) = NODES.lock() { mm.insert(id, rep); }
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, rep);
}
write_tlv_handle(T_JSON_NODE, id, result, result_len)
}
}
}
JN_SIZE => {
match provider_kind() {
ProviderKind::Serde => {
let n = match node_rep { NodeRep::Serde(ref a) => match &**a { Value::Array(a) => a.len() as i64, Value::Object(o) => o.len() as i64, _ => 0 }, _ => 0 };
write_tlv_i64(n, result, result_len)
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
let n = if !v.is_null() { if nyjson_is_arr(v) != 0 { nyjson_arr_size_val(v) as i64 } else if nyjson_is_obj(v) != 0 { nyjson_obj_size_val(v) as i64 } else { 0 } } else { 0 };
write_tlv_i64(n, result, result_len)
}
JN_SIZE => match provider_kind() {
ProviderKind::Serde => {
let n = match node_rep {
NodeRep::Serde(ref a) => match &**a {
Value::Array(a) => a.len() as i64,
Value::Object(o) => o.len() as i64,
_ => 0,
},
_ => 0,
};
write_tlv_i64(n, result, result_len)
}
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
let n = if !v.is_null() {
if nyjson_is_arr(v) != 0 {
nyjson_arr_size_val(v) as i64
} else if nyjson_is_obj(v) != 0 {
nyjson_obj_size_val(v) as i64
} else {
0
}
} else {
0
};
write_tlv_i64(n, result, result_len)
}
},
JN_AT => {
let idx = match read_arg_i64(args, args_len, 0) { Some(v) => v, None => return E_ARGS };
if idx < 0 { return E_ARGS; }
let idx = match read_arg_i64(args, args_len, 0) {
Some(v) => v,
None => return E_ARGS,
};
if idx < 0 {
return E_ARGS;
}
match provider_kind() {
ProviderKind::Serde => {
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
if let NodeRep::Serde(ref a) = node_rep {
if let Value::Array(arr) = &**a {
let i = idx as usize;
if i < arr.len() { if let Ok(mut mm) = NODES.lock() { mm.insert(id, NodeRep::Serde(Arc::new(arr[i].clone()))); } return write_tlv_handle(T_JSON_NODE, id, result, result_len); }
if i < arr.len() {
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, NodeRep::Serde(Arc::new(arr[i].clone())));
}
return write_tlv_handle(T_JSON_NODE, id, result, result_len);
}
}
}
if let Ok(mut mm) = NODES.lock() { mm.insert(id, NodeRep::Serde(Arc::new(Value::Null))); }
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, NodeRep::Serde(Arc::new(Value::Null)));
}
write_tlv_handle(T_JSON_NODE, id, result, result_len)
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
let mut child: *mut c_void = std::ptr::null_mut();
if !v.is_null() && nyjson_is_arr(v) != 0 { child = nyjson_arr_get_val(v, idx as usize); }
let doc_id = if let NodeRep::Yy { doc_id, .. } = node_rep { doc_id } else { 0 };
if !v.is_null() && nyjson_is_arr(v) != 0 {
child = nyjson_arr_get_val(v, idx as usize);
}
let doc_id = if let NodeRep::Yy { doc_id, .. } = node_rep {
doc_id
} else {
0
};
let rep = if child.is_null() {
NodeRep::Yy { doc_id, ptr: 0 }
} else {
NodeRep::Yy { doc_id, ptr: child as usize }
NodeRep::Yy {
doc_id,
ptr: child as usize,
}
};
if let Ok(mut mm) = NODES.lock() { mm.insert(id, rep); }
if let Ok(mut mm) = NODES.lock() {
mm.insert(id, rep);
}
write_tlv_handle(T_JSON_NODE, id, result, result_len)
}
}
}
JN_STR => match provider_kind() {
ProviderKind::Serde => {
if let NodeRep::Serde(ref a) = node_rep { match &**a { Value::String(s) => write_tlv_string(s, result, result_len), Value::Object(o) => { if let Some(Value::String(s)) = o.get("value") { write_tlv_string(s, result, result_len) } else { write_tlv_string("", result, result_len) } }, _ => write_tlv_string("", result, result_len) } } else { write_tlv_string("", result, result_len) }
if let NodeRep::Serde(ref a) = node_rep {
match &**a {
Value::String(s) => write_tlv_string(s, result, result_len),
Value::Object(o) => {
if let Some(Value::String(s)) = o.get("value") {
write_tlv_string(s, result, result_len)
} else {
write_tlv_string("", result, result_len)
}
}
_ => write_tlv_string("", result, result_len),
}
} else {
write_tlv_string("", result, result_len)
}
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
if !v.is_null() && nyjson_is_str(v) != 0 { let s = nyjson_get_str_val(v); if s.is_null() { write_tlv_string("", result, result_len) } else { let rs = CStr::from_ptr(s).to_string_lossy().to_string(); write_tlv_string(&rs, result, result_len) } }
else if !v.is_null() && nyjson_is_obj(v) != 0 { let key = CString::new("value").unwrap(); let child = nyjson_obj_get_key(v, key.as_ptr()); if !child.is_null() && nyjson_is_str(child) != 0 { let s = nyjson_get_str_val(child); if s.is_null() { write_tlv_string("", result, result_len) } else { let rs = CStr::from_ptr(s).to_string_lossy().to_string(); write_tlv_string(&rs, result, result_len) } } else { write_tlv_string("", result, result_len) } }
else { write_tlv_string("", result, result_len) }
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
if !v.is_null() && nyjson_is_str(v) != 0 {
let s = nyjson_get_str_val(v);
if s.is_null() {
write_tlv_string("", result, result_len)
} else {
let rs = CStr::from_ptr(s).to_string_lossy().to_string();
write_tlv_string(&rs, result, result_len)
}
} else if !v.is_null() && nyjson_is_obj(v) != 0 {
let key = CString::new("value").unwrap();
let child = nyjson_obj_get_key(v, key.as_ptr());
if !child.is_null() && nyjson_is_str(child) != 0 {
let s = nyjson_get_str_val(child);
if s.is_null() {
write_tlv_string("", result, result_len)
} else {
let rs = CStr::from_ptr(s).to_string_lossy().to_string();
write_tlv_string(&rs, result, result_len)
}
} else {
write_tlv_string("", result, result_len)
}
} else {
write_tlv_string("", result, result_len)
}
}
},
JN_INT => match provider_kind() {
ProviderKind::Serde => {
if let NodeRep::Serde(ref a) = node_rep { match &**a { Value::Number(n) => write_tlv_i64(n.as_i64().unwrap_or(0), result, result_len), Value::Object(o) => { if let Some(Value::Number(n)) = o.get("value") { write_tlv_i64(n.as_i64().unwrap_or(0), result, result_len) } else { write_tlv_i64(0, result, result_len) } }, _ => write_tlv_i64(0, result, result_len) } } else { write_tlv_i64(0, result, result_len) }
if let NodeRep::Serde(ref a) = node_rep {
match &**a {
Value::Number(n) => {
write_tlv_i64(n.as_i64().unwrap_or(0), result, result_len)
}
Value::Object(o) => {
if let Some(Value::Number(n)) = o.get("value") {
write_tlv_i64(n.as_i64().unwrap_or(0), result, result_len)
} else {
write_tlv_i64(0, result, result_len)
}
}
_ => write_tlv_i64(0, result, result_len),
}
} else {
write_tlv_i64(0, result, result_len)
}
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() };
if !v.is_null() && nyjson_is_int(v) != 0 { write_tlv_i64(nyjson_get_sint_val(v) as i64, result, result_len) }
else if !v.is_null() && nyjson_is_obj(v) != 0 { let key = CString::new("value").unwrap(); let child = nyjson_obj_get_key(v, key.as_ptr()); if !child.is_null() && nyjson_is_int(child) != 0 { write_tlv_i64(nyjson_get_sint_val(child) as i64, result, result_len) } else { write_tlv_i64(0, result, result_len) } }
else { write_tlv_i64(0, result, result_len) }
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
if !v.is_null() && nyjson_is_int(v) != 0 {
write_tlv_i64(nyjson_get_sint_val(v) as i64, result, result_len)
} else if !v.is_null() && nyjson_is_obj(v) != 0 {
let key = CString::new("value").unwrap();
let child = nyjson_obj_get_key(v, key.as_ptr());
if !child.is_null() && nyjson_is_int(child) != 0 {
write_tlv_i64(nyjson_get_sint_val(child) as i64, result, result_len)
} else {
write_tlv_i64(0, result, result_len)
}
} else {
write_tlv_i64(0, result, result_len)
}
}
},
JN_BOOL => match provider_kind() {
ProviderKind::Serde => { if let NodeRep::Serde(ref a) = node_rep { if let Value::Bool(b) = **a { write_tlv_bool(b, result, result_len) } else { write_tlv_bool(false, result, result_len) } } else { write_tlv_bool(false, result, result_len) } }
ProviderKind::Yyjson => { let v = if let NodeRep::Yy { ptr, .. } = node_rep { ptr as *mut c_void } else { std::ptr::null_mut() }; if !v.is_null() && nyjson_is_bool(v) != 0 { write_tlv_bool(nyjson_get_bool_val(v) != 0, result, result_len) } else { write_tlv_bool(false, result, result_len) } }
ProviderKind::Serde => {
if let NodeRep::Serde(ref a) = node_rep {
if let Value::Bool(b) = **a {
write_tlv_bool(b, result, result_len)
} else {
write_tlv_bool(false, result, result_len)
}
} else {
write_tlv_bool(false, result, result_len)
}
}
ProviderKind::Yyjson => {
let v = if let NodeRep::Yy { ptr, .. } = node_rep {
ptr as *mut c_void
} else {
std::ptr::null_mut()
};
if !v.is_null() && nyjson_is_bool(v) != 0 {
write_tlv_bool(nyjson_get_bool_val(v) != 0, result, result_len)
} else {
write_tlv_bool(false, result, result_len)
}
}
},
_ => E_METHOD,
}