From 3744062c7177f3fe026aa788024f807a8e8f2a99 Mon Sep 17 00:00:00 2001 From: TriMill Date: Thu, 22 Sep 2022 22:34:23 -0400 Subject: [PATCH] aaa more ambiguity fixed --- complexpr/src/lexer.rs | 1 + complexpr/src/parser.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/complexpr/src/lexer.rs b/complexpr/src/lexer.rs index 7d654c9..1152f6f 100644 --- a/complexpr/src/lexer.rs +++ b/complexpr/src/lexer.rs @@ -219,6 +219,7 @@ impl Lexer { }, _ => self.add_token(TokenType::Pipe, "|"), }, + '~' => self.add_token(TokenType::Tilde, "~"), ',' => self.add_token(TokenType::Comma, ","), ';' => self.add_token(TokenType::Semicolon, ";"), ':' => self.add_token(TokenType::Colon, ":"), diff --git a/complexpr/src/parser.rs b/complexpr/src/parser.rs index d6638a7..6f6f759 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::Colon => expr = self.structinit_inner(expr)?, + TokenType::Tilde => expr = self.structinit_inner(expr)?, _ => return Ok(expr) } } @@ -478,7 +478,7 @@ impl Parser { fn structinit_inner(&mut self, expr: Expr) -> Result { let colon = self.next(); if !self.expect(TokenType::LBrace).0 { - return Err(self.mk_error("Expected left brace in struct initialization")) + return Err(self.mk_error("Expected tilde in struct initialization")) } let args = self.commalist(TokenType::RBrace, Self::assignment)?; Ok(Expr::StructInit { ty: Box::new(expr), args, pos: colon.pos })