66 lines
2.4 KiB
Rust
66 lines
2.4 KiB
Rust
|
|
/*!
|
|||
|
|
* CoreExecutor — JSON v0 → Execute (boxed)
|
|||
|
|
*
|
|||
|
|
* Responsibility
|
|||
|
|
* - Single entry to execute a MIR(JSON) payload under Gate‑C/Core policy.
|
|||
|
|
* - Encapsulates: optional canonicalize, v1-bridge try, v0-parse fallback,
|
|||
|
|
* OOB strict observation, and rc mapping via MIR Interpreter.
|
|||
|
|
*
|
|||
|
|
* Notes
|
|||
|
|
* - For now, execution uses the existing MIR Interpreter runner
|
|||
|
|
* (execute_mir_module_quiet_exit). Later we can swap internals to call
|
|||
|
|
* the Core Dispatcher directly without touching callers.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
use super::NyashRunner;
|
|||
|
|
|
|||
|
|
pub(crate) fn run_json_v0(runner: &NyashRunner, json: &str) -> i32 {
|
|||
|
|
let mut payload = json.to_string();
|
|||
|
|
|
|||
|
|
let use_core_wrapper = crate::config::env::nyvm_core_wrapper();
|
|||
|
|
let use_downconvert = crate::config::env::nyvm_v1_downconvert();
|
|||
|
|
|
|||
|
|
if use_core_wrapper || use_downconvert {
|
|||
|
|
// Best-effort canonicalize
|
|||
|
|
if let Ok(j) = crate::runner::modes::common_util::core_bridge::canonicalize_module_json(&payload) {
|
|||
|
|
payload = j;
|
|||
|
|
}
|
|||
|
|
match crate::runner::json_v1_bridge::try_parse_v1_to_module(&payload) {
|
|||
|
|
Ok(Some(module)) => {
|
|||
|
|
super::json_v0_bridge::maybe_dump_mir(&module);
|
|||
|
|
// OOB strict: reset observation flag
|
|||
|
|
crate::runner::child_env::pre_run_reset_oob_if_strict();
|
|||
|
|
let rc = runner.execute_mir_module_quiet_exit(&module);
|
|||
|
|
if crate::config::env::oob_strict_fail() && crate::runtime::observe::oob_seen() {
|
|||
|
|
eprintln!("[gate-c][oob-strict] Out-of-bounds observed → exit(1)");
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
return rc;
|
|||
|
|
}
|
|||
|
|
Ok(None) => { /* fall through to v0 */ }
|
|||
|
|
Err(e) => {
|
|||
|
|
eprintln!("❌ JSON v1 bridge error: {}", e);
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
match super::json_v0_bridge::parse_json_v0_to_module(&payload) {
|
|||
|
|
Ok(module) => {
|
|||
|
|
super::json_v0_bridge::maybe_dump_mir(&module);
|
|||
|
|
crate::runner::child_env::pre_run_reset_oob_if_strict();
|
|||
|
|
let rc = runner.execute_mir_module_quiet_exit(&module);
|
|||
|
|
if crate::config::env::oob_strict_fail() && crate::runtime::observe::oob_seen() {
|
|||
|
|
eprintln!("[gate-c][oob-strict] Out-of-bounds observed → exit(1)");
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
rc
|
|||
|
|
}
|
|||
|
|
Err(e) => {
|
|||
|
|
eprintln!("❌ JSON v0 bridge error: {}", e);
|
|||
|
|
1
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|