summaryrefslogtreecommitdiff
path: root/src/scope.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-11-05 04:24:15 -0500
committerJohn Wiegley <johnw@newartisans.com>2009-11-05 04:24:15 -0500
commit15555d497f56e4b4d39e9a14f74b2c82cce52b90 (patch)
tree1e6c661379f02fdc52ef107fd500438ab69f3e60 /src/scope.cc
parent94b2518c4156e5a6b2be45bdbeeacf1ced0cd17f (diff)
parent060fc0e00bacb96d1d16163779d98c45c3999014 (diff)
downloadledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.tar.gz
ledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.tar.bz2
ledger-15555d497f56e4b4d39e9a14f74b2c82cce52b90.zip
Merge branch 'next'
Diffstat (limited to 'src/scope.cc')
-rw-r--r--src/scope.cc25
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