]> granicus.if.org Git - icinga2/commitdiff
Implement support for lambdas
authorGunnar Beutner <gunnar@beutner.name>
Sat, 13 Dec 2014 11:18:26 +0000 (12:18 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Sat, 13 Dec 2014 12:50:47 +0000 (13:50 +0100)
refs #8030

lib/config/config_parser.yy

index 54ffb43ccc4e30bad921e14734ab0df12441d912..b9f4dab9def722f0f2964fd4c255d5cc45f62364 100644 (file)
@@ -222,7 +222,7 @@ static void MakeRBinaryOp(Expression** result, Expression *left, Expression *rig
 %right '!' '~'
 %left '.' '(' '['
 %right ';' ','
-%right T_NEWLINE
+%right T_NEWLINE T_FOLLOWS
 %{
 
 int yylex(YYSTYPE *lvalp, YYLTYPE *llocp, void *scanner);
@@ -869,6 +869,27 @@ rterm_without_indexer: T_STRING
                $$ = new FunctionExpression("", *$3, $5, aexpr, DebugInfoRange(@1, @5));
                delete $3;
        }
+       | identifier T_FOLLOWS rterm
+       {
+               DictExpression *aexpr = dynamic_cast<DictExpression *>($3);
+               if (aexpr)
+                       aexpr->MakeInline();
+
+               std::vector<String> args;
+               args.push_back($1);
+               free($1);
+
+               $$ = new FunctionExpression("", args, new std::map<String, Expression *>(), $3, DebugInfoRange(@1, @3));
+       }
+       | T_BINARY_OR identifier_items T_BINARY_OR T_FOLLOWS rterm
+       {
+               DictExpression *aexpr = dynamic_cast<DictExpression *>($5);
+               if (aexpr)
+                       aexpr->MakeInline();
+
+               $$ = new FunctionExpression("", *$2, new std::map<String, Expression *>(), $5, DebugInfoRange(@1, @5));
+               delete $2;
+       }
        ;
 
 target_type_specifier: /* empty */