]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/loader.cpp
Add some optional (for now) extra checks for Loader
[libs/datafile.git] / source / loader.cpp
index 6da8599ba550e373828ea96af9bd81942216180c..de9323a36269ebc51656c75e1c771a1f169bb706 100644 (file)
@@ -51,6 +51,12 @@ bool signature_match(const string &st_sig, const string &act_sig)
 namespace Msp {
 namespace DataFile {
 
+Loader::Loader():
+       cur_st(0),
+       allow_pointer_reload(true),
+       check_sub_loads(false)
+{ }
+
 Loader::~Loader()
 {
        for(ActionMap::iterator i = actions.begin(); i!=actions.end(); ++i)
@@ -83,7 +89,12 @@ void Loader::load_statement(const Statement &st)
        {
                LoaderAction *act = find_action(ActionKey(st.keyword, st.get_signature()));
                if(act)
+               {
+                       sub_loaded = false;
                        act->execute(*this, st);
+                       if(check_sub_loads && !st.sub.empty() && !sub_loaded)
+                               throw Exception("Substatements were not loaded");
+               }
        }
        catch(Exception &e)
        {
@@ -103,6 +114,7 @@ void Loader::load_sub_with(Loader &ldr)
                throw InvalidState("load_sub called without current statement");
 
        ldr.load(*cur_st);
+       sub_loaded = true;
 }
 
 void Loader::add(const string &kwd, LoaderAction *act)