-const Interpreter::ParsedDefinition &Interpreter::GetDefinition(const string &identifier) const {
- return parsedDefinitions.at(identifier);
+const Interpreter::ParsedDefinition &Interpreter::GetDefinition(const string &identifier) {
+ std::map<string, ParsedDefinition>::const_iterator i(parsedDefinitions.find(identifier));
+ if (i != parsedDefinitions.end()) {
+ return i->second;
+ } else if (source.IsDefined(identifier)) {
+ ReadDefinition(source.GetDefinition(identifier));
+ return parsedDefinitions.at(identifier);
+ } else {
+ throw Error("access to undefined object " + identifier);
+ }