]> granicus.if.org Git - icinga2/commitdiff
Allow functions to return values.
authorGunnar Beutner <gunnar@beutner.name>
Wed, 2 Apr 2014 07:04:49 +0000 (09:04 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 2 Apr 2014 15:27:04 +0000 (17:27 +0200)
Fixes #5922

lib/config/aexpression.cpp
lib/config/config_parser.yy

index 7f1f51b1950225da2db5214e6a12fba2794571ee..cbecdb4c068ab766715c1ac6cdc36af7cfef059d 100644 (file)
@@ -475,7 +475,8 @@ Value AExpression::FunctionWrapper(const std::vector<Value>& arguments, const Ar
        for (int i = 0; i < std::min(arguments.size(), funcargs->GetLength()); i++)
                locals->Set(funcargs->Get(i), arguments[i]);
 
-       return expr->Evaluate(locals);
+       expr->Evaluate(locals);
+       return locals->Get("__result");
 }
 
 Value AExpression::OpFunction(const AExpression* expr, const Dictionary::Ptr& locals)
index 4a56e2005dab0ff6757e91b754c34e04659fa81c..7e3f520b6a8cabc2c7bf4b8f5eefd75d50a364aa 100644 (file)
@@ -781,8 +781,12 @@ rterm: T_STRING
 
                arr->Add(Empty);
 
-               arr->Add(*$4);
+               Array::Ptr arrex = make_shared<Array>();
+               arrex->Add(make_shared<AExpression>(&AExpression::OpSet, make_shared<AExpression>(&AExpression::OpLiteral, "__result", @4), *$4, @4));
                delete $4;
+               AExpression::Ptr aexpr = make_shared<AExpression>(&AExpression::OpDict, arrex, true, @4);
+
+               arr->Add(aexpr);
 
                $$ = new Value(make_shared<AExpression>(&AExpression::OpFunction, arr, Array::Ptr($2), DebugInfoRange(@1, @4)));
        }