chore(legacy): comment-out legacy v1 exports (nyash_plugin_invoke/abi/init) across first-party plugins; retain only TypeBox v2 path; remove legacy plugin loader and C-ABI nyash-file
This commit is contained in:
@ -18,113 +18,7 @@ struct ParseCounts {
|
||||
unsupported: usize,
|
||||
}
|
||||
|
||||
/// FFI: プラグインABIバージョン
|
||||
#[no_mangle]
|
||||
pub extern "C" fn nyash_plugin_abi_version() -> u32 {
|
||||
1
|
||||
}
|
||||
|
||||
/// FFI: プラグイン初期化
|
||||
#[no_mangle]
|
||||
pub extern "C" fn nyash_plugin_init() -> i32 {
|
||||
// Python初期化は pyo3 の auto-initialize が処理
|
||||
0
|
||||
}
|
||||
|
||||
/// FFI: プラグインメソッド呼び出し(BID形式)
|
||||
#[no_mangle]
|
||||
pub extern "C" fn nyash_plugin_invoke(
|
||||
type_id: u32,
|
||||
method_id: u32,
|
||||
_instance_id: u32,
|
||||
args: *const u8,
|
||||
args_len: usize,
|
||||
result: *mut u8,
|
||||
result_len: *mut usize,
|
||||
) -> i32 {
|
||||
const TYPE_ID_PARSER: u32 = 60;
|
||||
const METHOD_BIRTH: u32 = 0;
|
||||
const METHOD_PARSE: u32 = 1;
|
||||
const METHOD_FINI: u32 = u32::MAX;
|
||||
|
||||
if type_id != TYPE_ID_PARSER {
|
||||
return -3; // NYB_E_INVALID_METHOD
|
||||
}
|
||||
|
||||
match method_id {
|
||||
METHOD_BIRTH => {
|
||||
// インスタンスIDを返す
|
||||
unsafe {
|
||||
let instance_id = 1u32; // 簡易実装
|
||||
if *result_len < 4 {
|
||||
*result_len = 4;
|
||||
return -1; // NYB_E_SHORT_BUFFER
|
||||
}
|
||||
let out = std::slice::from_raw_parts_mut(result, *result_len);
|
||||
out[0..4].copy_from_slice(&instance_id.to_le_bytes());
|
||||
*result_len = 4;
|
||||
}
|
||||
0
|
||||
}
|
||||
METHOD_PARSE => {
|
||||
// 引数からコードを取得(TLV形式の文字列を期待)
|
||||
let code = unsafe {
|
||||
if args.is_null() || args_len < 4 {
|
||||
// 引数なしの場合は環境変数から取得
|
||||
std::env::var("NYASH_PY_CODE")
|
||||
.unwrap_or_else(|_| "def main():\n return 0".to_string())
|
||||
} else {
|
||||
// TLVデコード(簡易版)
|
||||
let buf = std::slice::from_raw_parts(args, args_len);
|
||||
if args_len >= 8 {
|
||||
let tag = u16::from_le_bytes([buf[0], buf[1]]);
|
||||
let len = u16::from_le_bytes([buf[2], buf[3]]) as usize;
|
||||
if tag == 6 && 4 + len <= args_len {
|
||||
match std::str::from_utf8(&buf[4..4 + len]) {
|
||||
Ok(s) => s.to_string(),
|
||||
Err(_) => std::env::var("NYASH_PY_CODE")
|
||||
.unwrap_or_else(|_| "def main():\n return 0".to_string()),
|
||||
}
|
||||
} else {
|
||||
std::env::var("NYASH_PY_CODE")
|
||||
.unwrap_or_else(|_| "def main():\n return 0".to_string())
|
||||
}
|
||||
} else {
|
||||
std::env::var("NYASH_PY_CODE")
|
||||
.unwrap_or_else(|_| "def main():\n return 0".to_string())
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// パース実行
|
||||
let parse_result = Python::with_gil(|py| parse_python_code(py, &code));
|
||||
|
||||
// JSONにシリアライズ
|
||||
match serde_json::to_string(&parse_result) {
|
||||
Ok(json) => {
|
||||
unsafe {
|
||||
let bytes = json.as_bytes();
|
||||
let need = 4 + bytes.len();
|
||||
if *result_len < need {
|
||||
*result_len = need;
|
||||
return -1; // NYB_E_SHORT_BUFFER
|
||||
}
|
||||
let out = std::slice::from_raw_parts_mut(result, *result_len);
|
||||
// TLVエンコード(tag=6:string)
|
||||
out[0..2].copy_from_slice(&6u16.to_le_bytes());
|
||||
out[2..4].copy_from_slice(&(bytes.len() as u16).to_le_bytes());
|
||||
out[4..4 + bytes.len()].copy_from_slice(bytes);
|
||||
*result_len = need;
|
||||
}
|
||||
0
|
||||
}
|
||||
Err(_) => -4, // エラー
|
||||
}
|
||||
}
|
||||
METHOD_FINI => 0,
|
||||
_ => -3, // NYB_E_INVALID_METHOD
|
||||
}
|
||||
}
|
||||
/* legacy v1 entries removed: nyash_plugin_abi_version/nyash_plugin_init/nyash_plugin_invoke */
|
||||
|
||||
/// FFI: Pythonコードをパース
|
||||
#[no_mangle]
|
||||
|
||||
Reference in New Issue
Block a user