void icinga::BindToScope(Expression *& expr, ScopeSpecifier scopeSpec) { DictExpression *dexpr = dynamic_cast<DictExpression *>(expr); if (dexpr) { for (Expression *& expr : dexpr->m_Expressions) BindToScope(expr, scopeSpec); return; } SetExpression *aexpr = dynamic_cast<SetExpression *>(expr); if (aexpr) { BindToScope(aexpr->m_Operand1, scopeSpec); return; } IndexerExpression *iexpr = dynamic_cast<IndexerExpression *>(expr); if (iexpr) { BindToScope(iexpr->m_Operand1, scopeSpec); return; } LiteralExpression *lexpr = dynamic_cast<LiteralExpression *>(expr); if (lexpr && lexpr->GetValue().IsString()) { Expression *scope = new GetScopeExpression(scopeSpec); expr = new IndexerExpression(scope, lexpr, lexpr->GetDebugInfo()); } VariableExpression *vexpr = dynamic_cast<VariableExpression *>(expr); if (vexpr) { Expression *scope = new GetScopeExpression(scopeSpec); Expression *new_expr = new IndexerExpression(scope, MakeLiteral(vexpr->GetVariable()), vexpr->GetDebugInfo()); delete expr; expr = new_expr; } }