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:
@ -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()))
|
||||
|
||||
Reference in New Issue
Block a user