From c6f4a06b4297f498da4bc2cd747aa38effb855b0 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
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