fix: 修复空字符串转布尔值为真问题

This commit is contained in:
2026-06-06 14:16:34 +08:00
parent 4edfec5dbf
commit 5eea6d1af3
2 changed files with 15 additions and 7 deletions
+5 -2
View File
@@ -81,7 +81,7 @@ pub fn to_string(string_forge: &StringForge, val: JsValue) -> String {
String::new()
}
pub fn to_boolean(val: JsValue) -> bool {
pub fn to_boolean(val: JsValue, string_forge: &StringForge) -> bool {
if val.is_undefined() || val.is_null() {
return false;
}
@@ -96,7 +96,10 @@ pub fn to_boolean(val: JsValue) -> bool {
return !(d == 0.0 || d == -0.0 || d.is_nan());
}
if val.is_string() {
return true;
let s = string_forge
.lookup(val.as_string_index())
.unwrap_or_default();
return !s.is_empty();
}
if val.is_object() {
return true;
+10 -5
View File
@@ -259,7 +259,8 @@ impl Vm {
}
OpCode::JMP_IF_FALSE => {
let cond = coercion::to_boolean(self.regs[rd]);
let cond =
coercion::to_boolean(self.regs[rd], self.kernel.string_forge().as_ref());
if !cond {
let offset = opcode::offset16(instr) as isize;
self.pc = ((self.pc as isize) + offset - 1) as usize;
@@ -267,7 +268,8 @@ impl Vm {
}
OpCode::JMP_IF_TRUE => {
let cond = coercion::to_boolean(self.regs[rd]);
let cond =
coercion::to_boolean(self.regs[rd], self.kernel.string_forge().as_ref());
if cond {
let offset = opcode::offset16(instr) as isize;
self.pc = ((self.pc as isize) + offset - 1) as usize;
@@ -547,17 +549,20 @@ impl Vm {
}
OpCode::NOT => {
let cond = coercion::to_boolean(self.regs[a]);
let cond =
coercion::to_boolean(self.regs[a], self.kernel.string_forge().as_ref());
self.regs[rd] = JsValue::bool(!cond);
}
OpCode::AND => {
let cond = coercion::to_boolean(self.regs[a]);
let cond =
coercion::to_boolean(self.regs[a], self.kernel.string_forge().as_ref());
self.regs[rd] = if cond { self.regs[b] } else { self.regs[a] };
}
OpCode::OR => {
let cond = coercion::to_boolean(self.regs[a]);
let cond =
coercion::to_boolean(self.regs[a], self.kernel.string_forge().as_ref());
self.regs[rd] = if cond { self.regs[a] } else { self.regs[b] };
}