DEV: Better error messages on cast failures.

This commit is contained in:
Jeremy Wall 2019-11-11 20:45:03 -06:00
parent cca249de2b
commit 7b28fd9d6c

View File

@ -221,9 +221,8 @@ where
Ok(()) Ok(())
} }
fn op_cast(&mut self, t: CastType) -> Result<(), Error> { fn do_cast(&mut self, t: CastType, val: &Value, pos: Position) -> Result<(), Error> {
let (val, pos) = self.pop()?; if let Value::P(ref p) = val {
if let Value::P(ref p) = val.as_ref() {
self.push( self.push(
Rc::new(match t { Rc::new(match t {
CastType::Str => Value::P(Primitive::Str(format!("{}", p))), CastType::Str => Value::P(Primitive::Str(format!("{}", p))),
@ -236,6 +235,10 @@ where
} }
Ok(()) Ok(())
} }
fn op_cast(&mut self, t: CastType) -> Result<(), Error> {
let (val, pos) = self.pop()?;
decorate_error!(pos => self.do_cast(t, &val, pos.clone()))
}
fn op_typ(&mut self) -> Result<(), Error> { fn op_typ(&mut self) -> Result<(), Error> {
let (val, pos) = self.pop()?; let (val, pos) = self.pop()?;