+ {
+ try
+ {
+ j->second->execute(*this, st);
+ }
+ catch(Exception &e)
+ {
+ if(!e.where()[0])
+ e.at(st.get_location());
+ throw;
+ }
+ }
+ cur_st = 0;
+}
+
+void Loader::load_sub_with(Loader &ldr)
+{
+ if(!cur_st)
+ throw InvalidState("load_sub called without current statement");
+
+ ldr.load(*cur_st);
+}
+
+void Loader::add(const string &k, LoaderAction *a)
+{
+ ActionMap::iterator i = actions.find(k);
+ if(i!=actions.end())
+ {
+ delete i->second;
+ i->second = a;
+ }
+ else
+ actions[k] = a;