feat: 为 VM 添加结构化日志
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
use crate::vm::Vm;
|
||||
use crate::vm_trace;
|
||||
use oxide_runtime_api as coercion;
|
||||
use oxide_types::value::JsValue;
|
||||
|
||||
impl Vm {
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_add(&mut self, rd: usize, a: usize, b: usize) -> Result<(), String> {
|
||||
vm_trace!("ADD rd={} r{}={:?} r{}={:?}", rd, a, self.regs[a], b, self.regs[b]);
|
||||
let lhs = self.coerce_primitive_bounded(self.regs[a], false)?;
|
||||
let rhs = self.coerce_primitive_bounded(self.regs[b], false)?;
|
||||
if lhs.is_string() || rhs.is_string() {
|
||||
@@ -22,6 +24,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_neg(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("NEG rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let v = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(-v);
|
||||
Ok(())
|
||||
@@ -29,12 +32,14 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_unary_plus(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("UNARY_PLUS rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let v = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(v);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) fn dispatch_compound_add(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_ADD rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let lhs = self.coerce_primitive_bounded(self.regs[rd], false)?;
|
||||
let rhs = self.coerce_primitive_bounded(self.regs[a], false)?;
|
||||
if lhs.is_string() || rhs.is_string() {
|
||||
@@ -52,6 +57,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_compound_sub(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_SUB rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let l = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let r = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(l - r);
|
||||
@@ -60,6 +66,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_compound_mul(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_MUL rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let l = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let r = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(l * r);
|
||||
@@ -68,6 +75,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_compound_div(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_DIV rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let l = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let r = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(l / r);
|
||||
@@ -76,6 +84,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_compound_mod(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_MOD rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let l = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let r = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(l % r);
|
||||
@@ -84,6 +93,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_compound_exp(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("COMPOUND_EXP rd={} r{}={:?}", rd, a, self.regs[a]);
|
||||
let l = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let r = self.coerce_number_bounded(self.regs[a])?;
|
||||
self.regs[rd] = JsValue::float(l.powf(r));
|
||||
@@ -92,6 +102,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_inc_pre(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("INC_PRE rd={} a={}", rd, a);
|
||||
let n = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let result = JsValue::float(n + 1.0);
|
||||
self.regs[rd] = result;
|
||||
@@ -101,6 +112,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_inc_post(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("INC_POST rd={} a={}", rd, a);
|
||||
let n = self.coerce_number_bounded(self.regs[rd])?;
|
||||
self.regs[a] = JsValue::float(n);
|
||||
self.regs[rd] = JsValue::float(n + 1.0);
|
||||
@@ -109,6 +121,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_dec_pre(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("DEC_PRE rd={} a={}", rd, a);
|
||||
let n = self.coerce_number_bounded(self.regs[rd])?;
|
||||
let result = JsValue::float(n - 1.0);
|
||||
self.regs[rd] = result;
|
||||
@@ -118,6 +131,7 @@ impl Vm {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn dispatch_dec_post(&mut self, rd: usize, a: usize) -> Result<(), String> {
|
||||
vm_trace!("DEC_POST rd={} a={}", rd, a);
|
||||
let n = self.coerce_number_bounded(self.regs[rd])?;
|
||||
self.regs[a] = JsValue::float(n);
|
||||
self.regs[rd] = JsValue::float(n - 1.0);
|
||||
|
||||
Reference in New Issue
Block a user