| {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}
| {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*
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
init do end
end
+
class ADebugTypeExpr
super AExpr
var _n_kwdebug: TKwdebug