summaryrefslogtreecommitdiff
path: root/src/session.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-02-07 05:47:21 -0400
committerJohn Wiegley <johnw@newartisans.com>2009-02-07 05:47:21 -0400
commitea9330adaeedbdb5a03b4f37910b30f0ddb23e29 (patch)
tree6919e137cc645b2d3be307e1d9e4129fdf971e2e /src/session.cc
parent66d007db9d4f7b793d53e08acc852b2bda335e32 (diff)
downloadfork-ledger-ea9330adaeedbdb5a03b4f37910b30f0ddb23e29.tar.gz
fork-ledger-ea9330adaeedbdb5a03b4f37910b30f0ddb23e29.tar.bz2
fork-ledger-ea9330adaeedbdb5a03b4f37910b30f0ddb23e29.zip
Allow value expressions to gain access to option settings.
For example, "ledger eval options.limit" prints 0 (for false), but: "ledger -l hello eval options.limit" print "hello"s, since the value of options.limit, once set to a value, is that string. For flag options, such as -Y, eval prints 0 if unset, and 1 if set. This feature allows value expressions to be conditionalized based on the presence of user options.
Diffstat (limited to 'src/session.cc')
-rw-r--r--src/session.cc47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/session.cc b/src/session.cc
index d84c79a3..f3d01eec 100644
--- a/src/session.cc
+++ b/src/session.cc
@@ -255,32 +255,39 @@ value_t session_t::resolve(const string& name, expr_t::scope_t& locals)
}
#endif
+option_t<session_t> * session_t::lookup_option(const char * p)
+{
+ switch (*p) {
+ case 'a':
+ OPT_(account_); // -a
+ break;
+ case 'd':
+ OPT(download); // -Q
+ break;
+ case 'f':
+ OPT_(file_); // -f
+ break;
+ case 'i':
+ OPT(input_date_format_);
+ break;
+ case 'p':
+ OPT(price_db_);
+ break;
+ case 'Q':
+ OPT_CH(download); // -Q
+ break;
+ }
+ return NULL;
+}
+
expr_t::ptr_op_t session_t::lookup(const string& name)
{
const char * p = name.c_str();
switch (*p) {
case 'o':
if (WANT_OPT()) { p += OPT_PREFIX_LEN;
- switch (*p) {
- case 'a':
- OPT_(account_); // -a
- break;
- case 'd':
- OPT(download); // -Q
- break;
- case 'f':
- OPT_(file_); // -f
- break;
- case 'i':
- OPT(input_date_format_);
- break;
- case 'p':
- OPT(price_db_);
- break;
- case 'Q':
- OPT_CH(download); // -Q
- break;
- }
+ if (option_t<session_t> * handler = lookup_option(p))
+ return MAKE_OPT_HANDLER(session_t, handler);
}
break;
}