mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-28 16:14:09 +02:00
parent
814589ac17
commit
d8e1943671
@ -291,24 +291,27 @@ Value SetExpression::DoEvaluate(const Object::Ptr& context, DebugHint *dhint) co
|
|||||||
Expression *indexExpr = m_Indexer[i];
|
Expression *indexExpr = m_Indexer[i];
|
||||||
String tempindex = indexExpr->Evaluate(context, dhint);
|
String tempindex = indexExpr->Evaluate(context, dhint);
|
||||||
|
|
||||||
if (i == m_Indexer.size() - 1)
|
if (sdhint)
|
||||||
index = tempindex;
|
sdhint = sdhint->GetChild(tempindex);
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0)
|
||||||
parent = context;
|
parent = context;
|
||||||
object = GetField(context, tempindex);
|
else
|
||||||
} else {
|
|
||||||
parent = object;
|
parent = object;
|
||||||
|
|
||||||
LiteralExpression *eparent = MakeLiteral(parent);
|
if (i == m_Indexer.size() - 1) {
|
||||||
LiteralExpression *eindex = MakeLiteral(tempindex);
|
index = tempindex;
|
||||||
|
|
||||||
IndexerExpression eip(eparent, eindex, m_DebugInfo);
|
/* No need to look up the last indexer's value if this is a direct set */
|
||||||
object = eip.Evaluate(context, dhint);
|
if (m_Op == OpSetLiteral)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdhint)
|
LiteralExpression *eparent = MakeLiteral(parent);
|
||||||
sdhint = sdhint->GetChild(index);
|
LiteralExpression *eindex = MakeLiteral(tempindex);
|
||||||
|
|
||||||
|
IndexerExpression eip(eparent, eindex, m_DebugInfo);
|
||||||
|
object = eip.Evaluate(context, sdhint);
|
||||||
|
|
||||||
if (i != m_Indexer.size() - 1 && object.IsEmpty()) {
|
if (i != m_Indexer.size() - 1 && object.IsEmpty()) {
|
||||||
object = new Dictionary();
|
object = new Dictionary();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user