From 7b28fd9d6c75977a1880b4be265eb2d13ed69502 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 11 Nov 2019 20:45:03 -0600 Subject: [PATCH] DEV: Better error messages on cast failures. --- src/build/opcode/vm.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/build/opcode/vm.rs b/src/build/opcode/vm.rs index f5ada4e..c8db7a2 100644 --- a/src/build/opcode/vm.rs +++ b/src/build/opcode/vm.rs @@ -221,9 +221,8 @@ where Ok(()) } - fn op_cast(&mut self, t: CastType) -> Result<(), Error> { - let (val, pos) = self.pop()?; - if let Value::P(ref p) = val.as_ref() { + fn do_cast(&mut self, t: CastType, val: &Value, pos: Position) -> Result<(), Error> { + if let Value::P(ref p) = val { self.push( Rc::new(match t { CastType::Str => Value::P(Primitive::Str(format!("{}", p))), @@ -236,6 +235,10 @@ where } 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> { let (val, pos) = self.pop()?;