diff --git a/complexpr/Cargo.toml b/complexpr/Cargo.toml index 69a6074..8321d4c 100644 --- a/complexpr/Cargo.toml +++ b/complexpr/Cargo.toml @@ -7,6 +7,5 @@ edition = "2021" num-complex = "0.4.2" num-rational = "0.4.1" num-traits = "0.2.15" -strum_macros = "0.24.3" strum = { version = "0.24.1", features = ["derive"] } paste = "1.0.9" diff --git a/complexpr/src/parser.rs b/complexpr/src/parser.rs index d2fed9b..d6638a7 100644 --- a/complexpr/src/parser.rs +++ b/complexpr/src/parser.rs @@ -449,7 +449,7 @@ impl Parser { match self.peek().ty { TokenType::LParen => expr = self.fncall_inner(expr)?, TokenType::LBrack => expr = self.arrindex_inner(expr)?, - TokenType::LBrace => expr = self.structinit_inner(expr)?, + TokenType::Colon => expr = self.structinit_inner(expr)?, _ => return Ok(expr) } } @@ -474,11 +474,14 @@ impl Parser { Ok(Expr::Index { lhs: Box::new(expr), index: Box::new(index), pos: lbrack.pos }) } - // struct initialization: A { b } + // struct initialization: A: { b } fn structinit_inner(&mut self, expr: Expr) -> Result { - let lbrace = self.next(); + let colon = self.next(); + if !self.expect(TokenType::LBrace).0 { + return Err(self.mk_error("Expected left brace in struct initialization")) + } let args = self.commalist(TokenType::RBrace, Self::assignment)?; - Ok(Expr::StructInit { ty: Box::new(expr), args, pos: lbrace.pos }) + Ok(Expr::StructInit { ty: Box::new(expr), args, pos: colon.pos }) } // key-value pairs for maps