Revert "Eval errors are now correctly spanned"

This reverts commit 9b81ccf57c.
This commit is contained in:
Erin 2021-08-29 00:26:40 +02:00 committed by ondra05
parent 90d0ed7a93
commit d6e99acdc9
2 changed files with 28 additions and 11 deletions

View file

@ -355,10 +355,7 @@ impl ExecEnv {
} }
let stmts = crate::parser::Parser::new(&code).init()?; let stmts = crate::parser::Parser::new(&code).init()?;
self.eval_stmts(&stmts).map_err(|x| Error { self.eval_stmts(&stmts)?;
span: span.clone(),
..x
})?;
} }
} }
Ok(()) Ok(())

View file

@ -93,16 +93,11 @@ impl Value {
Value::Abool(a) => a as _, Value::Abool(a) => a as _,
Value::Bool(b) => b as _, Value::Bool(b) => b as _,
Value::Functio(func) => match func { Value::Functio(func) => match func {
// Compares lengths of functions:
// BfFunctio - Sum of lengths of instructions and length of tape
// AbleFunctio - Sum of argument count and body length
// Eval - Length of input code
Functio::BfFunctio { Functio::BfFunctio {
instructions, instructions,
tape_len, tape_len,
} => (instructions.len() + tape_len) as _, } => (instructions.len() + tape_len) as _,
Functio::AbleFunctio { params, body } => (params.len() + format!("{:?}", body).len()) as _, Functio::AbleFunctio { params, body } => (params.len() + body.len()) as _,
Functio::Eval(s) => s.len() as _, Functio::Eval(s) => s.len() as _,
}, },
Value::Int(i) => i, Value::Int(i) => i,
@ -366,7 +361,32 @@ impl PartialOrd for Value {
Value::Int(i) => Some(i.cmp(&other.into_i32())), Value::Int(i) => Some(i.cmp(&other.into_i32())),
Value::Bool(b) => Some(b.cmp(&other.into_bool())), Value::Bool(b) => Some(b.cmp(&other.into_bool())),
Value::Abool(a) => a.partial_cmp(&other.into_abool()), Value::Abool(a) => a.partial_cmp(&other.into_abool()),
Value::Functio(_) => self.clone().into_i32().partial_cmp(&other.into_i32()), Value::Functio(f) => {
// Compares lengths of functions:
// BfFunctio - Sum of lengths of instructions and length of tape
// AbleFunctio - Sum of argument count and body length
// Eval - Length of input code
let selfl = match f {
Functio::BfFunctio {
instructions,
tape_len,
} => instructions.len() + tape_len,
Functio::AbleFunctio { params, body } => params.len() + body.len(),
Functio::Eval(s) => s.len(),
};
let otherl = match other.into_functio() {
Functio::BfFunctio {
instructions,
tape_len,
} => instructions.len() + tape_len,
Functio::AbleFunctio { params, body } => params.len() + body.len(),
Functio::Eval(s) => s.len(),
};
Some(selfl.cmp(&otherl))
}
Value::Cart(c) => Some(c.len().cmp(&other.into_cart().len())), Value::Cart(c) => Some(c.len().cmp(&other.into_cart().len())),
} }
} }