From c6f4a06b4297f498da4bc2cd747aa38effb855b0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 18 Feb 2018 01:06:48 +0300 Subject: G: value_parameters, patterns & let statement --- src/parser/grammar/items/mod.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src/parser/grammar/items') diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index 3af6d13a1..1fe646652 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -218,9 +218,33 @@ fn fn_item(p: &mut Parser) { p.error("expected function arguments"); } - if p.at(L_CURLY) { - p.expect(L_CURLY); + block(p); + + fn block(p: &mut Parser) { + if !p.at(L_CURLY) { + p.error("expected block"); + } + let m = p.start(); + p.bump(); + while !p.at(EOF) && !p.at(R_CURLY) { + match p.current() { + LET_KW => let_stmt(p), + _ => p.err_and_bump("expected statement"), + } + } p.expect(R_CURLY); + m.complete(p, BLOCK); + } + + fn let_stmt(p: &mut Parser) { + assert!(p.at(LET_KW)); + let m = p.start(); + p.bump(); + patterns::pattern(p); + p.expect(EQ); + expressions::expr(p); + p.expect(SEMI); + m.complete(p, LET_STMT); } } -- cgit v1.2.3