From b9b609035507191772c12588681732c330f10bb9 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 4 Jul 2019 15:34:29 -0400 Subject: [PATCH] syntax: add lambda construction with the fun keyword Signed-off-by: Jean Privat --- src/parser/nit.sablecc3xx | 3 +++ src/parser/parser_nodes.nit | 8 ++++++++ src/semantize/scope.nit | 8 ++++++++ 3 files changed, 19 insertions(+) diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 8e8bce4..9e54809 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -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? diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 10e732a..f19547d 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -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 diff --git a/src/semantize/scope.nit b/src/semantize/scope.nit index 2f8a1bf..4c5da3f 100644 --- a/src/semantize/scope.nit +++ b/src/semantize/scope.nit @@ -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 -- 1.7.9.5