- /**
- Loads a sub-object from the statement being processed. The Loader class of
- the sub-object is automatically used.
- */
- template<typename S>
- void load_sub(S &s)
- {
- typename S::Loader ldr(s);
- load_sub_with(ldr);
- }
-
- /**
- Loads a sub-object from the statement being processed with an extra parameter
- for the Loader. The Loader class of the sub-object is automatically used.
- */
- template<typename S, typename T>
- void load_sub(S &s, T &p)
- {
- typename S::Loader ldr(s, p);
- load_sub_with(ldr);
- }
-
- /**
- Processes the current statement's substatements with another Loader.
- */
- void load_sub_with(Loader &);
-
- /**
- Returns the source of the statement being processed. This can be used to
- implement relative paths in include-like statements. Note that the source
- may not necessarily be a file.
- */
- const std::string &get_source() const
- {
- if(!cur_st)
- throw InvalidState("get_source called without current statement");
- return cur_st->source;
- }
-
- virtual void finish() { }