Step -> ControlFlow (use ?)
This commit is contained in:
@@ -13,12 +13,8 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let rhs = self.pop_forced();
|
||||
let lhs = self.pop_forced();
|
||||
if let (Some(ls), Some(rs)) = (
|
||||
@@ -27,13 +23,13 @@ impl<'gc> crate::Vm<'gc> {
|
||||
) {
|
||||
let ns = Gc::new(mc, crate::NixString::new(format!("{ls}{rs}")));
|
||||
self.push(Value::new_gc(ns));
|
||||
return Step::Continue;
|
||||
return Step::Continue(());
|
||||
}
|
||||
let res = numeric_binop(lhs, rhs, mc, i64::wrapping_add, |a, b| a + b);
|
||||
match res {
|
||||
Ok(val) => {
|
||||
self.push(val);
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
Err(e) => self.finish_vm_err(e),
|
||||
}
|
||||
@@ -65,19 +61,15 @@ impl<'gc> crate::Vm<'gc> {
|
||||
int_op: fn(i64, i64) -> i64,
|
||||
float_op: fn(f64, f64) -> f64,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let rhs = self.pop_forced();
|
||||
let lhs = self.pop_forced();
|
||||
let res = numeric_binop(lhs, rhs, mc, int_op, float_op);
|
||||
match res {
|
||||
Ok(val) => {
|
||||
self.push(val);
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
Err(e) => self.finish_vm_err(e),
|
||||
}
|
||||
@@ -89,12 +81,8 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let rhs = self.pop_forced();
|
||||
let lhs = self.pop_forced();
|
||||
match (get_num(rhs), get_num(lhs)) {
|
||||
@@ -109,7 +97,7 @@ impl<'gc> crate::Vm<'gc> {
|
||||
match res {
|
||||
Ok(val) => {
|
||||
self.push(val);
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
Err(e) => self.finish_vm_err(e),
|
||||
}
|
||||
@@ -122,18 +110,14 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let eq = match self.values_equal(ctx) {
|
||||
Ok(eq) => eq,
|
||||
Err(e) => return self.finish_vm_err(e),
|
||||
};
|
||||
self.push(Value::new_inline(eq));
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
@@ -143,18 +127,14 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let eq = match self.values_equal(ctx) {
|
||||
Ok(eq) => eq,
|
||||
Err(e) => return self.finish_vm_err(e),
|
||||
};
|
||||
self.push(Value::new_inline(!eq));
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
@@ -204,14 +184,10 @@ impl<'gc> crate::Vm<'gc> {
|
||||
mc: &Mutation<'gc>,
|
||||
pred: fn(Ordering) -> bool,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
match self.compare_values_inner(ctx, pred) {
|
||||
Ok(()) => Step::Continue,
|
||||
Ok(()) => Step::Continue(()),
|
||||
Err(e) => self.finish_vm_err(e),
|
||||
}
|
||||
}
|
||||
@@ -222,12 +198,8 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let r = match self.pop_forced_expect_gc::<List>() {
|
||||
Ok(val) => val,
|
||||
Err(got) => return self.finish_type_err(NixType::List, got)
|
||||
@@ -240,7 +212,7 @@ impl<'gc> crate::Vm<'gc> {
|
||||
items.extend_from_slice(&l);
|
||||
items.extend_from_slice(&r);
|
||||
self.push(Value::new_gc(Gc::new(mc, crate::List { inner: items })));
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
@@ -249,12 +221,8 @@ impl<'gc> crate::Vm<'gc> {
|
||||
reader: &mut BytecodeReader<'_>,
|
||||
mc: &Mutation<'gc>,
|
||||
) -> Step {
|
||||
if let Some(step) = self.try_force(1, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
if let Some(step) = self.try_force(0, reader, mc) {
|
||||
return step;
|
||||
}
|
||||
self.try_force(1, reader, mc)?;
|
||||
self.try_force(0, reader, mc)?;
|
||||
let r = match self.pop_forced_expect_gc::<AttrSet>() {
|
||||
Ok(val) => val,
|
||||
Err(got) => return self.finish_type_err(NixType::AttrSet, got)
|
||||
@@ -264,7 +232,7 @@ impl<'gc> crate::Vm<'gc> {
|
||||
Err(got) => return self.finish_type_err(NixType::AttrSet, got)
|
||||
};
|
||||
self.push(Value::new_gc(l.merge(&r, mc)));
|
||||
Step::Continue
|
||||
Step::Continue(())
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
|
||||
Reference in New Issue
Block a user