mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 10:41:11 +08:00
54 lines
2.1 KiB
Rust
54 lines
2.1 KiB
Rust
use crate::coercion;
|
|
use crate::vm::Vm;
|
|
use oxide_types::value::JsValue;
|
|
|
|
impl Vm {
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_eq(&mut self, rd: usize, a: usize, b: usize) {
|
|
let eq = coercion::abstract_eq(self.regs[a], self.regs[b], self.kernel.string_forge().as_ref());
|
|
self.regs[rd] = JsValue::bool(eq);
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_neq(&mut self, rd: usize, a: usize, b: usize) {
|
|
let ne = !coercion::abstract_eq(self.regs[a], self.regs[b], self.kernel.string_forge().as_ref());
|
|
self.regs[rd] = JsValue::bool(ne);
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_lt(&mut self, rd: usize, a: usize, b: usize) {
|
|
let rel = coercion::relational_compare(self.kernel.string_forge().as_ref(), self.regs[a], self.regs[b]);
|
|
self.regs[rd] = JsValue::bool(rel.unwrap_or(false));
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_gt(&mut self, rd: usize, a: usize, b: usize) {
|
|
let rel = coercion::relational_compare(self.kernel.string_forge().as_ref(), self.regs[b], self.regs[a]);
|
|
self.regs[rd] = JsValue::bool(rel.unwrap_or(false));
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_lte(&mut self, rd: usize, a: usize, b: usize) {
|
|
let rel = coercion::relational_compare(self.kernel.string_forge().as_ref(), self.regs[b], self.regs[a]);
|
|
self.regs[rd] = JsValue::bool(!rel.unwrap_or(true));
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_gte(&mut self, rd: usize, a: usize, b: usize) {
|
|
let rel = coercion::relational_compare(self.kernel.string_forge().as_ref(), self.regs[a], self.regs[b]);
|
|
self.regs[rd] = JsValue::bool(!rel.unwrap_or(true));
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_strict_eq(&mut self, rd: usize, a: usize, b: usize) {
|
|
let eq = coercion::strict_equality(self.regs[a], self.regs[b]);
|
|
self.regs[rd] = JsValue::bool(eq);
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn dispatch_strict_neq(&mut self, rd: usize, a: usize, b: usize) {
|
|
let ne = !coercion::strict_equality(self.regs[a], self.regs[b]);
|
|
self.regs[rd] = JsValue::bool(ne);
|
|
}
|
|
}
|