diff options
author | John Wiegley <johnw@newartisans.com> | 2009-02-07 05:47:21 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-02-07 05:47:21 -0400 |
commit | ea9330adaeedbdb5a03b4f37910b30f0ddb23e29 (patch) | |
tree | 6919e137cc645b2d3be307e1d9e4129fdf971e2e /src/session.cc | |
parent | 66d007db9d4f7b793d53e08acc852b2bda335e32 (diff) | |
download | fork-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.cc | 47 |
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; } |