From d21715c2d33bc3b00b16745b431e9f8dc955b2a2 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 30 Nov 2023 17:53:41 +0100 Subject: [PATCH] fix { x := ... } being interpreted as an object --- mers_lib/src/parsing/statements.rs | 41 +++++++++++++++++------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/mers_lib/src/parsing/statements.rs b/mers_lib/src/parsing/statements.rs index a52797d..2cf2b2b 100755 --- a/mers_lib/src/parsing/statements.rs +++ b/mers_lib/src/parsing/statements.rs @@ -321,23 +321,30 @@ pub fn parse_no_chain( let name = src.next_word().to_owned(); src.skip_whitespace(); match src.next_char() { - Some(':') => elems.push(( - name, - match parse(src, srca) { - Ok(Some(v)) => v, - Ok(None) => { - return Err(CheckError::new() - .src(vec![((pos_in_src, src.get_pos(), srca).into(), None)]) - .msg(format!("EOF after `:` in object"))) - } - Err(e) => { - return Err(CheckError::new() - .src(vec![((pos_in_src, src.get_pos(), srca).into(), None)]) - .msg(format!("Error in statement after `:` in object")) - .err(e)) - } - }, - )), + Some(':') if src.next_char().is_some_and(|c| c.is_whitespace()) => elems + .push(( + name, + match parse(src, srca) { + Ok(Some(v)) => v, + Ok(None) => { + return Err(CheckError::new() + .src(vec![( + (pos_in_src, src.get_pos(), srca).into(), + None, + )]) + .msg(format!("EOF after `:` in object"))) + } + Err(e) => { + return Err(CheckError::new() + .src(vec![( + (pos_in_src, src.get_pos(), srca).into(), + None, + )]) + .msg(format!("Error in statement after `:` in object")) + .err(e)) + } + }, + )), _ => { // not an object (or invalid syntax) src.set_pos(pos_in_src_after_bracket);