grammar: add elipsys notation to pass an expression in a vararg parameter
authorJean Privat <jean@pryen.org>
Wed, 18 Jun 2014 02:17:58 +0000 (22:17 -0400)
committerJean Privat <jean@pryen.org>
Wed, 16 Jul 2014 20:56:48 +0000 (16:56 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

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

index c72928b..9ddfa21 100644 (file)
@@ -571,6 +571,7 @@ expr_atom~nopar~nobra {-> expr}
         | {as_cast} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no type [n4]:no cpar {-> New expr.as_cast(expr_atom~nopar~nobra.expr, kwas, opar, type, cpar)}
         | {as_notnull} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no kwnot [n4]:no kwnull [n5]:no cpar {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, opar, kwnot, kwnull, cpar)}
         | {as_notnull2}expr_atom~nopar~nobra dot no kwas [n2]:no kwnot [n4]:no kwnull {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, Null, kwnot, kwnull, Null)}
+       | {vararg} [expr]:expr_atom~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
        ;
 
 superstring {-> expr} 
@@ -867,6 +868,7 @@ expr        = {block} expr* kwend?
         | {as_notnull} expr kwas opar? kwnot kwnull cpar?
        | {isset_attr} kwisset expr [id]:attrid
        | {debug_type} kwdebug kwtype expr type
+       | {vararg} expr dotdotdot
        ;
 exprs
        = {list} [exprs]:expr*
index 768597f..99fb9c6 100644 (file)
@@ -2250,6 +2250,18 @@ class AIssetAttrExpr
        init do end
 end
 
+# A elyspis notation used to pass an expression as it in a vararg parameter
+class AVarargExpr
+       super AExpr
+       var _n_expr: AExpr
+       fun n_expr: AExpr do return _n_expr
+       fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
+       var _n_dotdotdot: TDotdotdot
+       fun n_dotdotdot: TDotdotdot do return _n_dotdotdot
+       fun n_dotdotdot=(n_dotdotdot: TDotdotdot) do _n_dotdotdot = n_dotdotdot
+       init do end
+end
+
 # A list of expression separated with commas (arguments for instance)
 abstract class AExprs
        super Prod 
@@ -2257,6 +2269,7 @@ abstract class AExprs
        init do end
 end
 
+
 class ADebugTypeExpr
        super AExpr
        var _n_kwdebug: TKwdebug