diff options
author | John Wiegley <johnw@newartisans.com> | 2009-11-05 04:24:15 -0500 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-11-05 04:24:15 -0500 |
commit | 15555d497f56e4b4d39e9a14f74b2c82cce52b90 (patch) | |
tree | 1e6c661379f02fdc52ef107fd500438ab69f3e60 /src/scope.cc | |
parent | 94b2518c4156e5a6b2be45bdbeeacf1ced0cd17f (diff) | |
parent | 060fc0e00bacb96d1d16163779d98c45c3999014 (diff) | |
download | ledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.tar.gz ledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.tar.bz2 ledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.zip |
Merge branch 'next'
Diffstat (limited to 'src/scope.cc')
-rw-r--r-- | src/scope.cc | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/scope.cc b/src/scope.cc index 92d123ee..99f6b669 100644 --- a/src/scope.cc +++ b/src/scope.cc @@ -35,31 +35,36 @@ namespace ledger { -void symbol_scope_t::define(const string& name, expr_t::ptr_op_t def) +scope_t * scope_t::default_scope = NULL; + +void symbol_scope_t::define(const symbol_t::kind_t kind, + const string& name, expr_t::ptr_op_t def) { DEBUG("scope.symbols", "Defining '" << name << "' = " << def); std::pair<symbol_map::iterator, bool> result - = symbols.insert(symbol_map::value_type(name, def)); + = symbols.insert(symbol_map::value_type(symbol_t(kind, name, def), def)); if (! result.second) { - symbol_map::iterator i = symbols.find(name); + symbol_map::iterator i = symbols.find(symbol_t(kind, name)); assert(i != symbols.end()); symbols.erase(i); - std::pair<symbol_map::iterator, bool> result2 - = symbols.insert(symbol_map::value_type(name, def)); - if (! result2.second) - throw_(compile_error, _("Redefinition of '%1' in same scope") << name); + result = symbols.insert(symbol_map::value_type(symbol_t(kind, name, def), + def)); + if (! result.second) + throw_(compile_error, + _("Redefinition of '%1' in the same scope") << name); } } -expr_t::ptr_op_t symbol_scope_t::lookup(const string& name) +expr_t::ptr_op_t symbol_scope_t::lookup(const symbol_t::kind_t kind, + const string& name) { - symbol_map::const_iterator i = symbols.find(name); + symbol_map::const_iterator i = symbols.find(symbol_t(kind, name)); if (i != symbols.end()) return (*i).second; - return child_scope_t::lookup(name); + return child_scope_t::lookup(kind, name); } } // namespace ledger |