syntax: add lambda construction with the fun keyword
authorJean Privat <jean@pryen.org>
Thu, 4 Jul 2019 19:34:29 +0000 (15:34 -0400)
committerJean Privat <jean@pryen.org>
Mon, 19 Aug 2019 13:09:17 +0000 (09:09 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/parser/nit.sablecc3xx
src/parser/parser_nodes.nit
src/semantize/scope.nit

index 8e8bce4..9e54809 100644 (file)
@@ -671,6 +671,8 @@ expr_single~nopar~nobra {-> expr}
        | {char} char annotations_o {-> New expr.char(char, annotations_o.annotations)}
        | {string} string annotations_o {-> New expr.string(string, annotations_o.annotations)}
        | {superstring} superstring  {-> superstring.expr}
+       | {lambdan} kwmeth signature kwdo no stmts [n2]:no kwend {-> New expr.lambda(kwmeth, signature, kwdo, stmts.expr)}
+       | {lambda0} kwmeth signature kwdo no endblock {-> New expr.lambda(kwmeth, signature, kwdo, endblock.expr)}
 !nopar | {par} expr_par {-> expr_par.expr}
 // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
 !nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, dotdot, expr2.expr, cbra, annotations_o.annotations)}
@@ -1050,6 +1052,7 @@ expr      = {block} expr* kwend?
        | {mid_string} [string]:mid_string
        | {end_string} [string]:end_string
        | {superstring} [exprs]:expr* annotations?
+       | {lambda} kwmeth signature kwdo expr
        | {par} opar expr cpar annotations?
         | {as_cast} expr kwas opar? type cpar?
         | {as_notnull} expr kwas opar? kwnot kwnull cpar?
index 10e732a..f19547d 100644 (file)
@@ -2707,6 +2707,14 @@ class ASuperstringExpr
        var n_exprs = new ANodes[AExpr](self)
 end
 
+class ALambdaExpr
+       super AExpr
+       var n_kwmeth: TKwmeth is writable, noinit
+       var n_signature: ASignature is writable, noinit
+       var n_kwdo: TKwdo is writable, noinit
+       var n_expr: AExpr is writable, noinit
+end
+
 # A simple parenthesis. eg `(x)`
 class AParExpr
        super AExpr
index 2f8a1bf..4c5da3f 100644 (file)
@@ -523,3 +523,11 @@ redef class ACallReassignExpr
                return new AVarReassignExpr.init_avarreassignexpr(n_qid.n_id, n_assign_op, n_value)
        end
 end
+
+redef class ALambdaExpr
+       redef fun accept_scope_visitor(v)
+       do
+               # TODO
+               return
+       end
+end