]> granicus.if.org Git - icinga2/commitdiff
Fixed code gen bug with nested templates.
authorGunnar Beutner <gunnar@beutner.name>
Wed, 6 Jun 2012 18:33:25 +0000 (20:33 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 6 Jun 2012 18:33:25 +0000 (20:33 +0200)
Makefile.am
dyn/configitem.cpp
dyn/configitem.h
dyntest/dyntest.cpp

index 7c42f478cc57e124e5d966e02b1c8ad63a9c4436..8b54e69d7ff98d4fa67cb2dff4a3486983b8d2ae 100644 (file)
@@ -8,8 +8,8 @@ SUBDIRS = \
        third-party \
        base \
        dyn \
-       dyntest \
        jsonrpc \
+       dyntest \
        icinga \
        components \
        icinga-app \
index d8761001966cdacc3ad0a098c7dd903c71dea0c4..1b7e6d8706ba5c1f1462c0fb53121fc0abe27a7a 100644 (file)
@@ -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<Dictionary>();
-
        vector<string>::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<ConfigItem::Ptr>::Ptr ConfigItem::GetAllObjects(void)
@@ -122,7 +118,9 @@ void ConfigItem::Commit(void)
                m_DynamicObject = dobj;
        }
 
-       dobj->SetConfig(CalculateProperties());
+       Dictionary::Ptr properties = make_shared<Dictionary>();
+       CalculateProperties(properties);
+       dobj->SetConfig(properties);
        dobj->Commit();
 
        ConfigItem::Ptr ci = GetObject(GetType(), GetName());
index aa9aa259c145bf7a622cb77f7c041f556e9bb709..d2cdaefdf8b8a96c4b4603f6d5b7e4767aa6b2f4 100644 (file)
@@ -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);
index b132b0841bb63342760c047286ceb7a3daaa920e..ffc63ffa3923b23d2c4ecadfa90686ea51454209 100644 (file)
@@ -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<ConfigItem::Ptr> objects = ConfigCompiler::CompileFile(string(argv[1]));
 
                ConfigVM::ExecuteItems(objects);