summaryrefslogtreecommitdiff
path: root/src/scope.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-11-04 20:40:07 -0500
committerJohn Wiegley <johnw@newartisans.com>2009-11-04 20:40:48 -0500
commit78e6770c4c276db3647952f21a6bf3ea465edb88 (patch)
tree64190d80ea0c3933dffaee3cf0e43cde5ea0e6a6 /src/scope.cc
parent4a14f3224b9063202ca39a67c9aff42ae4274942 (diff)
downloadfork-ledger-78e6770c4c276db3647952f21a6bf3ea465edb88.tar.gz
fork-ledger-78e6770c4c276db3647952f21a6bf3ea465edb88.tar.bz2
fork-ledger-78e6770c4c276db3647952f21a6bf3ea465edb88.zip
Segregated symbols into 5 separate namespaces
The different namespaces are: Function Value expression functions, which receive a "context" Option Command-line options Precommand Commands which are invoked before reading the journal Command Commands which are invoked after reading the journal Directive Directives that occur at column 0 in a data file This greatly eases the ability for Python uses to add intercept hooks to change how the basic Ledger module functions. An example of what should be possible soon: import ledger def my_foo_handler(value): print "--foo received:", value ledger.add_handler(ledger.Option, "foo=", my_foo_handler)
Diffstat (limited to 'src/scope.cc')
-rw-r--r--src/scope.cc23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/scope.cc b/src/scope.cc
index 92d123ee..998eac64 100644
--- a/src/scope.cc
+++ b/src/scope.cc
@@ -35,31 +35,34 @@
namespace ledger {
-void symbol_scope_t::define(const string& name, expr_t::ptr_op_t def)
+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