mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-27 07:34:15 +02:00
parent
606834e190
commit
91f946a40e
@ -296,7 +296,11 @@ Value AExpression::OpDict(const AExpression *expr, const Dictionary::Ptr& locals
|
|||||||
if (arr) {
|
if (arr) {
|
||||||
ObjectLock olock(arr);
|
ObjectLock olock(arr);
|
||||||
BOOST_FOREACH(const AExpression::Ptr& aexpr, arr) {
|
BOOST_FOREACH(const AExpression::Ptr& aexpr, arr) {
|
||||||
aexpr->Evaluate(in_place ? locals : result);
|
Dictionary::Ptr alocals = in_place ? locals : result;
|
||||||
|
aexpr->Evaluate(alocals);
|
||||||
|
|
||||||
|
if (alocals->Contains("__result"))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,6 +229,7 @@ assign return T_ASSIGN;
|
|||||||
ignore return T_IGNORE;
|
ignore return T_IGNORE;
|
||||||
function return T_FUNCTION;
|
function return T_FUNCTION;
|
||||||
lambda return T_LAMBDA;
|
lambda return T_LAMBDA;
|
||||||
|
return return T_RETURN;
|
||||||
\<\< { yylval->op = &AExpression::OpShiftLeft; return T_SHIFT_LEFT; }
|
\<\< { yylval->op = &AExpression::OpShiftLeft; return T_SHIFT_LEFT; }
|
||||||
\>\> { yylval->op = &AExpression::OpShiftRight; return T_SHIFT_RIGHT; }
|
\>\> { yylval->op = &AExpression::OpShiftRight; return T_SHIFT_RIGHT; }
|
||||||
\<= { yylval->op = &AExpression::OpLessThanOrEqual; return T_LESS_THAN_OR_EQUAL; }
|
\<= { yylval->op = &AExpression::OpLessThanOrEqual; return T_LESS_THAN_OR_EQUAL; }
|
||||||
|
@ -73,7 +73,7 @@ int ignore_newlines = 0;
|
|||||||
|
|
||||||
static void MakeRBinaryOp(Value** result, AExpression::OpCallback& op, Value *left, Value *right, DebugInfo& diLeft, DebugInfo& diRight)
|
static void MakeRBinaryOp(Value** result, AExpression::OpCallback& op, Value *left, Value *right, DebugInfo& diLeft, DebugInfo& diRight)
|
||||||
{
|
{
|
||||||
*result = new Value(make_shared<AExpression>(op, static_cast<AExpression::Ptr>(*left), static_cast<AExpression::Ptr>(*right), DebugInfoRange(diLeft, diRight)));
|
*result = new Value(make_shared<AExpression>(op, *left, *right, DebugInfoRange(diLeft, diRight)));
|
||||||
delete left;
|
delete left;
|
||||||
delete right;
|
delete right;
|
||||||
}
|
}
|
||||||
@ -158,6 +158,7 @@ static void MakeRBinaryOp(Value** result, AExpression::OpCallback& op, Value *le
|
|||||||
%token T_IGNORE "ignore (T_IGNORE)"
|
%token T_IGNORE "ignore (T_IGNORE)"
|
||||||
%token T_FUNCTION "function (T_FUNCTION)"
|
%token T_FUNCTION "function (T_FUNCTION)"
|
||||||
%token T_LAMBDA "lambda (T_LAMBDA)"
|
%token T_LAMBDA "lambda (T_LAMBDA)"
|
||||||
|
%token T_RETURN "return (T_RETURN)"
|
||||||
|
|
||||||
%type <text> identifier
|
%type <text> identifier
|
||||||
%type <array> rterm_items
|
%type <array> rterm_items
|
||||||
@ -251,7 +252,7 @@ statement: type | include | include_recursive | library | constant | newlines
|
|||||||
|
|
||||||
include: T_INCLUDE rterm sep
|
include: T_INCLUDE rterm sep
|
||||||
{
|
{
|
||||||
AExpression::Ptr aexpr = static_cast<AExpression::Ptr>(*$2);
|
AExpression::Ptr aexpr = *$2;
|
||||||
delete $2;
|
delete $2;
|
||||||
|
|
||||||
context->HandleInclude(aexpr->Evaluate(m_ModuleScope), false, DebugInfoRange(@1, @2));
|
context->HandleInclude(aexpr->Evaluate(m_ModuleScope), false, DebugInfoRange(@1, @2));
|
||||||
@ -265,17 +266,17 @@ include: T_INCLUDE rterm sep
|
|||||||
|
|
||||||
include_recursive: T_INCLUDE_RECURSIVE rterm
|
include_recursive: T_INCLUDE_RECURSIVE rterm
|
||||||
{
|
{
|
||||||
AExpression::Ptr aexpr = static_cast<AExpression::Ptr>(*$2);
|
AExpression::Ptr aexpr = *$2;
|
||||||
delete $2;
|
delete $2;
|
||||||
|
|
||||||
context->HandleIncludeRecursive(aexpr->Evaluate(m_ModuleScope), "*.conf", DebugInfoRange(@1, @2));
|
context->HandleIncludeRecursive(aexpr->Evaluate(m_ModuleScope), "*.conf", DebugInfoRange(@1, @2));
|
||||||
}
|
}
|
||||||
| T_INCLUDE_RECURSIVE rterm ',' rterm
|
| T_INCLUDE_RECURSIVE rterm ',' rterm
|
||||||
{
|
{
|
||||||
AExpression::Ptr aexpr1 = static_cast<AExpression::Ptr>(*$2);
|
AExpression::Ptr aexpr1 = *$2;
|
||||||
delete $2;
|
delete $2;
|
||||||
|
|
||||||
AExpression::Ptr aexpr2 = static_cast<AExpression::Ptr>(*$4);
|
AExpression::Ptr aexpr2 = *$4;
|
||||||
delete $4;
|
delete $4;
|
||||||
|
|
||||||
context->HandleIncludeRecursive(aexpr1->Evaluate(m_ModuleScope), aexpr2->Evaluate(m_ModuleScope), DebugInfoRange(@1, @4));
|
context->HandleIncludeRecursive(aexpr1->Evaluate(m_ModuleScope), aexpr2->Evaluate(m_ModuleScope), DebugInfoRange(@1, @4));
|
||||||
@ -291,7 +292,7 @@ library: T_LIBRARY T_STRING sep
|
|||||||
|
|
||||||
constant: T_CONST identifier T_SET rterm sep
|
constant: T_CONST identifier T_SET rterm sep
|
||||||
{
|
{
|
||||||
AExpression::Ptr aexpr = static_cast<AExpression::Ptr>(*$4);
|
AExpression::Ptr aexpr = *$4;
|
||||||
delete $4;
|
delete $4;
|
||||||
|
|
||||||
ScriptVariable::Ptr sv = ScriptVariable::Set($2, aexpr->Evaluate(m_ModuleScope));
|
ScriptVariable::Ptr sv = ScriptVariable::Set($2, aexpr->Evaluate(m_ModuleScope));
|
||||||
@ -529,13 +530,12 @@ lterm: identifier lbinary_op rterm
|
|||||||
AExpression::Ptr aindex = make_shared<AExpression>(&AExpression::OpLiteral, $1, @1);
|
AExpression::Ptr aindex = make_shared<AExpression>(&AExpression::OpLiteral, $1, @1);
|
||||||
free($1);
|
free($1);
|
||||||
|
|
||||||
AExpression::Ptr aexpr = static_cast<AExpression::Ptr>(*$3);
|
$$ = new Value(make_shared<AExpression>($2, aindex, *$3, DebugInfoRange(@1, @3)));
|
||||||
$$ = new Value(make_shared<AExpression>($2, aindex, aexpr, DebugInfoRange(@1, @3)));
|
|
||||||
delete $3;
|
delete $3;
|
||||||
}
|
}
|
||||||
| identifier '[' rterm ']' lbinary_op rterm
|
| identifier '[' rterm ']' lbinary_op rterm
|
||||||
{
|
{
|
||||||
AExpression::Ptr subexpr = make_shared<AExpression>($5, static_cast<AExpression::Ptr>(*$3), static_cast<AExpression::Ptr>(*$6), DebugInfoRange(@1, @6));
|
AExpression::Ptr subexpr = make_shared<AExpression>($5, *$3, *$6, DebugInfoRange(@1, @6));
|
||||||
delete $3;
|
delete $3;
|
||||||
delete $6;
|
delete $6;
|
||||||
|
|
||||||
@ -551,7 +551,7 @@ lterm: identifier lbinary_op rterm
|
|||||||
| identifier '.' T_IDENTIFIER lbinary_op rterm
|
| identifier '.' T_IDENTIFIER lbinary_op rterm
|
||||||
{
|
{
|
||||||
AExpression::Ptr aindex = make_shared<AExpression>(&AExpression::OpLiteral, $3, @3);
|
AExpression::Ptr aindex = make_shared<AExpression>(&AExpression::OpLiteral, $3, @3);
|
||||||
AExpression::Ptr subexpr = make_shared<AExpression>($4, aindex, static_cast<AExpression::Ptr>(*$5), DebugInfoRange(@1, @5));
|
AExpression::Ptr subexpr = make_shared<AExpression>($4, aindex, *$5, DebugInfoRange(@1, @5));
|
||||||
free($3);
|
free($3);
|
||||||
delete $5;
|
delete $5;
|
||||||
|
|
||||||
@ -567,9 +567,8 @@ lterm: identifier lbinary_op rterm
|
|||||||
| T_IMPORT rterm
|
| T_IMPORT rterm
|
||||||
{
|
{
|
||||||
AExpression::Ptr avar = make_shared<AExpression>(&AExpression::OpVariable, "type", DebugInfoRange(@1, @2));
|
AExpression::Ptr avar = make_shared<AExpression>(&AExpression::OpVariable, "type", DebugInfoRange(@1, @2));
|
||||||
AExpression::Ptr aexpr = static_cast<AExpression::Ptr>(*$2);
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpImport, avar, *$2, DebugInfoRange(@1, @2)));
|
||||||
delete $2;
|
delete $2;
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpImport, avar, aexpr, DebugInfoRange(@1, @2)));
|
|
||||||
}
|
}
|
||||||
| T_ASSIGN T_WHERE rterm
|
| T_ASSIGN T_WHERE rterm
|
||||||
{
|
{
|
||||||
@ -578,7 +577,7 @@ lterm: identifier lbinary_op rterm
|
|||||||
|
|
||||||
m_SeenAssign = true;
|
m_SeenAssign = true;
|
||||||
|
|
||||||
m_Assign = make_shared<AExpression>(&AExpression::OpLogicalOr, m_Assign, static_cast<AExpression::Ptr>(*$3), DebugInfoRange(@1, @3));
|
m_Assign = make_shared<AExpression>(&AExpression::OpLogicalOr, m_Assign, *$3, DebugInfoRange(@1, @3));
|
||||||
delete $3;
|
delete $3;
|
||||||
|
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpLiteral, Empty, DebugInfoRange(@1, @3)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpLiteral, Empty, DebugInfoRange(@1, @3)));
|
||||||
@ -588,12 +587,19 @@ lterm: identifier lbinary_op rterm
|
|||||||
if (!m_Apply)
|
if (!m_Apply)
|
||||||
BOOST_THROW_EXCEPTION(ConfigError("'ignore' keyword not valid in this context."));
|
BOOST_THROW_EXCEPTION(ConfigError("'ignore' keyword not valid in this context."));
|
||||||
|
|
||||||
m_Ignore = make_shared<AExpression>(&AExpression::OpLogicalOr, m_Ignore, static_cast<AExpression::Ptr>(*$3), DebugInfoRange(@1, @3));
|
m_Ignore = make_shared<AExpression>(&AExpression::OpLogicalOr, m_Ignore, *$3, DebugInfoRange(@1, @3));
|
||||||
|
|
||||||
delete $3;
|
delete $3;
|
||||||
|
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpLiteral, Empty, DebugInfoRange(@1, @3)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpLiteral, Empty, DebugInfoRange(@1, @3)));
|
||||||
}
|
}
|
||||||
|
| T_RETURN rterm
|
||||||
|
{
|
||||||
|
AExpression::Ptr aname = make_shared<AExpression>(&AExpression::OpLiteral, "__result", @1);
|
||||||
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpSet, aname, *$2, DebugInfoRange(@1, @2)));
|
||||||
|
delete $2;
|
||||||
|
|
||||||
|
}
|
||||||
| apply
|
| apply
|
||||||
{
|
{
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
@ -675,15 +681,15 @@ rterm: T_STRING
|
|||||||
}
|
}
|
||||||
| rterm '.' T_IDENTIFIER
|
| rterm '.' T_IDENTIFIER
|
||||||
{
|
{
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpIndexer, static_cast<AExpression::Ptr>(*$1), make_shared<AExpression>(&AExpression::OpLiteral, $3, @3), DebugInfoRange(@1, @3)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpIndexer, *$1, make_shared<AExpression>(&AExpression::OpLiteral, $3, @3), DebugInfoRange(@1, @3)));
|
||||||
delete $1;
|
delete $1;
|
||||||
free($3);
|
free($3);
|
||||||
}
|
}
|
||||||
| rterm '(' rterm_items ')'
|
| rterm '(' rterm_items ')'
|
||||||
{
|
{
|
||||||
Array::Ptr arguments = Array::Ptr($3);
|
Array::Ptr arguments = Array::Ptr($3);
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpFunctionCall, static_cast<AExpression::Ptr>(*$1), make_shared<AExpression>(&AExpression::OpLiteral, arguments, @3), DebugInfoRange(@1, @4)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpFunctionCall, *$1, make_shared<AExpression>(&AExpression::OpLiteral, arguments, @3), DebugInfoRange(@1, @4)));
|
||||||
free($1);
|
delete $1;
|
||||||
}
|
}
|
||||||
| T_IDENTIFIER
|
| T_IDENTIFIER
|
||||||
{
|
{
|
||||||
@ -692,19 +698,19 @@ rterm: T_STRING
|
|||||||
}
|
}
|
||||||
| '!' rterm
|
| '!' rterm
|
||||||
{
|
{
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpLogicalNegate, static_cast<AExpression::Ptr>(*$2), DebugInfoRange(@1, @2)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpLogicalNegate, *$2, DebugInfoRange(@1, @2)));
|
||||||
delete $2;
|
delete $2;
|
||||||
}
|
}
|
||||||
| '~' rterm
|
| '~' rterm
|
||||||
{
|
{
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpNegate, static_cast<AExpression::Ptr>(*$2), DebugInfoRange(@1, @2)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpNegate, *$2, DebugInfoRange(@1, @2)));
|
||||||
delete $2;
|
delete $2;
|
||||||
}
|
}
|
||||||
| rterm '[' rterm ']'
|
| rterm '[' rterm ']'
|
||||||
{
|
{
|
||||||
$$ = new Value(make_shared<AExpression>(&AExpression::OpIndexer, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), DebugInfoRange(@1, @4)));
|
$$ = new Value(make_shared<AExpression>(&AExpression::OpIndexer, *$1, *$3, DebugInfoRange(@1, @4)));
|
||||||
delete $1;
|
delete $1;
|
||||||
free($3);
|
delete $3;
|
||||||
}
|
}
|
||||||
| '[' newlines rterm_items newlines ']'
|
| '[' newlines rterm_items newlines ']'
|
||||||
{
|
{
|
||||||
@ -820,7 +826,7 @@ apply:
|
|||||||
|
|
||||||
String type = $3;
|
String type = $3;
|
||||||
free($3);
|
free($3);
|
||||||
AExpression::Ptr aname = static_cast<AExpression::Ptr>(*$4);
|
AExpression::Ptr aname = *$4;
|
||||||
delete $4;
|
delete $4;
|
||||||
String target = $5;
|
String target = $5;
|
||||||
free($5);
|
free($5);
|
||||||
@ -849,7 +855,7 @@ apply:
|
|||||||
BOOST_THROW_EXCEPTION(ConfigError("'apply' target type '" + target + "' is invalid") << errinfo_debuginfo(DebugInfoRange(@2, @5)));
|
BOOST_THROW_EXCEPTION(ConfigError("'apply' target type '" + target + "' is invalid") << errinfo_debuginfo(DebugInfoRange(@2, @5)));
|
||||||
}
|
}
|
||||||
|
|
||||||
AExpression::Ptr exprl = static_cast<AExpression::Ptr>(*$6);
|
AExpression::Ptr exprl = *$6;
|
||||||
delete $6;
|
delete $6;
|
||||||
|
|
||||||
exprl->MakeInline();
|
exprl->MakeInline();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user