diff --git a/src/vstc/virtual_machine/vs_function.rs b/src/vstc/virtual_machine/vs_function.rs index e449001..8df5852 100644 --- a/src/vstc/virtual_machine/vs_function.rs +++ b/src/vstc/virtual_machine/vs_function.rs @@ -51,4 +51,8 @@ impl VsValue for VsFunction { return true; } + + fn is_truthy(&self) -> bool { + return true; + } } diff --git a/src/vstc/virtual_machine/vs_number.rs b/src/vstc/virtual_machine/vs_number.rs index 319a8b8..1263831 100644 --- a/src/vstc/virtual_machine/vs_number.rs +++ b/src/vstc/virtual_machine/vs_number.rs @@ -35,4 +35,8 @@ impl VsValue for VsNumber { fn push_frame(&self, vm: &mut VirtualMachine) -> bool { return false; } + + fn is_truthy(&self) -> bool { + return self.value != 0_f64; + } } diff --git a/src/vstc/virtual_machine/vs_pointer.rs b/src/vstc/virtual_machine/vs_pointer.rs index de2f162..53c4f86 100644 --- a/src/vstc/virtual_machine/vs_pointer.rs +++ b/src/vstc/virtual_machine/vs_pointer.rs @@ -93,4 +93,8 @@ impl VsValue for VsPointer { fn push_frame(&self, vm: &mut VirtualMachine) -> bool { return self.decode().push_frame(vm); } + + fn is_truthy(&self) -> bool { + return self.decode().is_truthy(); + } } diff --git a/src/vstc/virtual_machine/vs_string.rs b/src/vstc/virtual_machine/vs_string.rs index 103cd0a..9df8a1f 100644 --- a/src/vstc/virtual_machine/vs_string.rs +++ b/src/vstc/virtual_machine/vs_string.rs @@ -39,4 +39,8 @@ impl VsValue for VsString { fn push_frame(&self, vm: &mut VirtualMachine) -> bool { return false; } + + fn is_truthy(&self) -> bool { + return self.value != ""; + } } diff --git a/src/vstc/virtual_machine/vs_undefined.rs b/src/vstc/virtual_machine/vs_undefined.rs index c6782bc..364de19 100644 --- a/src/vstc/virtual_machine/vs_undefined.rs +++ b/src/vstc/virtual_machine/vs_undefined.rs @@ -33,4 +33,8 @@ impl VsValue for VsUndefined { fn push_frame(&self, vm: &mut VirtualMachine) -> bool { return false; } + + fn is_truthy(&self) -> bool { + return false; + } } diff --git a/src/vstc/virtual_machine/vs_value.rs b/src/vstc/virtual_machine/vs_value.rs index f7682d8..96e07c7 100644 --- a/src/vstc/virtual_machine/vs_value.rs +++ b/src/vstc/virtual_machine/vs_value.rs @@ -37,6 +37,7 @@ pub trait VsValue { fn to_string(&self) -> String; fn to_number(&self) -> f64; fn is_primitive(&self) -> bool; + fn is_truthy(&self) -> bool; fn push_frame(&self, vm: &mut VirtualMachine) -> bool; }