From: Gunnar Beutner Date: Wed, 6 Jun 2012 18:33:25 +0000 (+0200) Subject: Fixed code gen bug with nested templates. X-Git-Tag: v0.0.1~445 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=029dc35366d6079ce180e986d6732dcf2428568b;p=icinga2 Fixed code gen bug with nested templates. --- diff --git a/Makefile.am b/Makefile.am index 7c42f478c..8b54e69d7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,8 +8,8 @@ SUBDIRS = \ third-party \ base \ dyn \ - dyntest \ jsonrpc \ + dyntest \ icinga \ components \ icinga-app \ diff --git a/dyn/configitem.cpp b/dyn/configitem.cpp index d87610019..1b7e6d870 100644 --- a/dyn/configitem.cpp +++ b/dyn/configitem.cpp @@ -56,10 +56,8 @@ void ConfigItem::AddParent(string parent) m_Parents.push_back(parent); } -Dictionary::Ptr ConfigItem::CalculateProperties(void) const +void ConfigItem::CalculateProperties(Dictionary::Ptr dictionary) const { - Dictionary::Ptr result = make_shared(); - vector::const_iterator it; for (it = m_Parents.begin(); it != m_Parents.end(); it++) { ConfigItem::Ptr parent = ConfigItem::GetObject(GetType(), *it); @@ -70,12 +68,10 @@ Dictionary::Ptr ConfigItem::CalculateProperties(void) const throw domain_error(message.str()); } - parent->GetExpressionList()->Execute(result); + parent->CalculateProperties(dictionary); } - m_ExpressionList->Execute(result); - - return result; + m_ExpressionList->Execute(dictionary); } ObjectSet::Ptr ConfigItem::GetAllObjects(void) @@ -122,7 +118,9 @@ void ConfigItem::Commit(void) m_DynamicObject = dobj; } - dobj->SetConfig(CalculateProperties()); + Dictionary::Ptr properties = make_shared(); + CalculateProperties(properties); + dobj->SetConfig(properties); dobj->Commit(); ConfigItem::Ptr ci = GetObject(GetType(), GetName()); diff --git a/dyn/configitem.h b/dyn/configitem.h index aa9aa259c..d2cdaefdf 100644 --- a/dyn/configitem.h +++ b/dyn/configitem.h @@ -41,7 +41,7 @@ public: ExpressionList::Ptr GetExpressionList(void) const; void SetExpressionList(const ExpressionList::Ptr& exprl); - Dictionary::Ptr CalculateProperties(void) const; + void CalculateProperties(Dictionary::Ptr dictionary) const; void Commit(void); void Unregister(void); diff --git a/dyntest/dyntest.cpp b/dyntest/dyntest.cpp index b132b0841..ffc63ffa3 100644 --- a/dyntest/dyntest.cpp +++ b/dyntest/dyntest.cpp @@ -10,7 +10,7 @@ int main(int argc, char **argv) return 1; } - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 10000; i++) { vector objects = ConfigCompiler::CompileFile(string(argv[1])); ConfigVM::ExecuteItems(objects);