grammar: add expr.namedargs
authorJean Privat <jean@pryen.org>
Thu, 16 Apr 2015 11:42:50 +0000 (18:42 +0700)
committerJean Privat <jean@pryen.org>
Sat, 25 Apr 2015 02:14:58 +0000 (09:14 +0700)
Signed-off-by: Jean Privat <jean@pryen.org>

src/parser/nit.sablecc3xx
src/parser/parser_nodes.nit

index e47b96c..4436571 100644 (file)
@@ -619,6 +619,7 @@ expr_atom~nopar~nobra {-> expr}
 arg~nopar~nobra {-> expr}
        = [expr]:expr~nopar~nobra {-> expr.expr}
        | {vararg} [expr]:expr~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
+       | {namedarg} id assign [expr]:expr~nopar~nobra  {-> New expr.namedarg(id, assign, expr.expr) }
        ;
 
 expr_single~nopar~nobra {-> expr}
@@ -1000,6 +1001,7 @@ expr      = {block} expr* kwend?
        | {isset_attr} kwisset expr [id]:attrid
        | {debug_type} kwdebug kwtype expr type
        | {vararg} expr dotdotdot
+       | {namedarg} id assign expr
        | {type} type
        | {methid} expr [id]:methid
        | {at} annotations
index 1a37332..a9613f6 100644 (file)
@@ -2537,6 +2537,20 @@ class AVarargExpr
        var n_dotdotdot: TDotdotdot is writable, noinit
 end
 
+# An named notation used to pass an expression by name in a parameter
+class ANamedargExpr
+       super AExpr
+
+       # The name of the argument
+       var n_id: TId is writable, noinit
+
+       # The `=` synbol
+       var n_assign: TAssign is writable, noinit
+
+       # The passed expression
+       var n_expr: AExpr is writable, noinit
+end
+
 # A list of expression separated with commas (arguments for instance)
 class AManyExpr
        super AExpr