From d8576feb488fa55a90b94ac3dbb52cd582c777af Mon Sep 17 00:00:00 2001 From: Sam Vervaeck Date: Fri, 9 Feb 2024 23:52:55 +0100 Subject: [PATCH] Add support for parsing prefix and suffix let-declarations --- bootstrap/cxx/src/Parser.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bootstrap/cxx/src/Parser.cc b/bootstrap/cxx/src/Parser.cc index 400d98f9c..52f180a69 100644 --- a/bootstrap/cxx/src/Parser.cc +++ b/bootstrap/cxx/src/Parser.cc @@ -1183,7 +1183,19 @@ finish: auto T2 = Tokens.peek(0); auto T3 = Tokens.peek(1); auto T4 = Tokens.peek(2); - if (T2->getKind() == NodeKind::LParen && isOperator(T3) && T4->getKind() == NodeKind::RParen) { + if (isOperator(T2)) { + Tokens.get(); + auto P1 = parseNarrowPattern(); + Params.push_back(new Parameter(P1, nullptr)); + Name = new BindPattern(T2); + goto after_params; + } else if (isOperator(T3) && (T4->getKind() == NodeKind::Colon || T4->getKind() == NodeKind::Equals || T4->getKind() == NodeKind::BlockStart || T4->getKind() == NodeKind::LineFoldEnd)) { + auto P1 = parseNarrowPattern(); + Params.push_back(new Parameter(P1, nullptr)); + Tokens.get(); + Name = new BindPattern(T3); + goto after_params; + } else if (T2->getKind() == NodeKind::LParen && isOperator(T3) && T4->getKind() == NodeKind::RParen) { Tokens.get(); Tokens.get(); Tokens.get();