pyvm: split op handlers into ops_core/ops_box/ops_ctrl; add ops_flow + intrinsic; delegate vm.py without behavior change

net-plugin: modularize constants (consts.rs) and sockets (sockets.rs); remove legacy commented socket code; fix unused imports
mir: move instruction unit tests to tests/mir_instruction_unit.rs (file lean-up); no semantic changes
runner/pyvm: ensure using pre-strip; misc docs updates

Build: cargo build ok; legacy cfg warnings remain as before
This commit is contained in:
Selfhosting Dev
2025-09-21 08:53:00 +09:00
parent ee17cfd979
commit c8063c9e41
247 changed files with 10187 additions and 23124 deletions

View File

@ -0,0 +1,46 @@
use crate::parser::NyashParser;
fn enable_stage3() {
std::env::set_var("NYASH_PARSER_STAGE3", "1");
}
#[test]
fn expr_postfix_catch_basic() {
enable_stage3();
let src = r#"
function main(args) {
f(1) catch(e) { print(e) }
}
"#;
let ast = NyashParser::parse_from_string(src).expect("parse ok");
fn has_try(ast: &crate::ast::ASTNode) -> bool {
match ast {
crate::ast::ASTNode::TryCatch { .. } => true,
crate::ast::ASTNode::Program { statements, .. } => statements.iter().any(has_try),
crate::ast::ASTNode::FunctionDeclaration { body, .. } => body.iter().any(has_try),
_ => false,
}
}
assert!(has_try(&ast), "expected TryCatch from exprpostfix catch");
}
#[test]
fn expr_postfix_catch_on_method_chain() {
enable_stage3();
let src = r#"
function main(args) {
obj.m1().m2() catch { print("x") }
}
"#;
let ast = NyashParser::parse_from_string(src).expect("parse ok");
fn has_try(ast: &crate::ast::ASTNode) -> bool {
match ast {
crate::ast::ASTNode::TryCatch { .. } => true,
crate::ast::ASTNode::Program { statements, .. } => statements.iter().any(has_try),
crate::ast::ASTNode::FunctionDeclaration { body, .. } => body.iter().any(has_try),
_ => false,
}
}
assert!(has_try(&ast), "expected TryCatch wrapping method chain");
}