From e728cc3290fa0e1c36067fdb67c02ffb4132b87b Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 17 Jun 2014 22:17:58 -0400 Subject: [PATCH] grammar: add elipsys notation to pass an expression in a vararg parameter Signed-off-by: Jean Privat --- src/parser/nit.sablecc3xx | 2 ++ src/parser/parser_nodes.nit | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index c72928b..9ddfa21 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -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* diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 768597f..99fb9c6 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -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 -- 1.7.9.5