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

@ -68,10 +68,19 @@ impl StringBox {
}
/// Find substring and return position (or -1 if not found)
/// Env gate: NYASH_STR_CP=1 → return codepoint index; default is byte index
pub fn find(&self, search: &str) -> Box<dyn NyashBox> {
use crate::boxes::integer_box::IntegerBox;
match self.value.find(search) {
Some(pos) => Box::new(IntegerBox::new(pos as i64)),
Some(byte_pos) => {
let use_cp = std::env::var("NYASH_STR_CP").ok().as_deref() == Some("1");
let idx = if use_cp {
self.value[..byte_pos].chars().count() as i64
} else {
byte_pos as i64
};
Box::new(IntegerBox::new(idx))
}
None => Box::new(IntegerBox::new(-1)),
}
}
@ -81,6 +90,24 @@ impl StringBox {
Box::new(StringBox::new(self.value.replace(old, new)))
}
/// Return the last index of `search` or -1 if not found.
/// Env gate: NYASH_STR_CP=1 → return codepoint index; default is byte index.
pub fn lastIndexOf(&self, search: &str) -> Box<dyn NyashBox> {
use crate::boxes::integer_box::IntegerBox;
match self.value.rfind(search) {
Some(byte_pos) => {
let use_cp = std::env::var("NYASH_STR_CP").ok().as_deref() == Some("1");
let idx = if use_cp {
self.value[..byte_pos].chars().count() as i64
} else {
byte_pos as i64
};
Box::new(IntegerBox::new(idx))
}
None => Box::new(IntegerBox::new(-1)),
}
}
/// Trim whitespace from both ends
pub fn trim(&self) -> Box<dyn NyashBox> {
Box::new(StringBox::new(self.value.trim()))