summaryrefslogtreecommitdiff
path: root/src/session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/session.cc')
-rw-r--r--src/session.cc29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/session.cc b/src/session.cc
index 2b8d8d58..67f19ca9 100644
--- a/src/session.cc
+++ b/src/session.cc
@@ -284,23 +284,26 @@ option_t<session_t> * session_t::lookup_option(const char * p)
return NULL;
}
-expr_t::ptr_op_t session_t::lookup(const string& name)
+expr_t::ptr_op_t session_t::lookup(const symbol_t::kind_t kind,
+ const string& name)
{
- const char * p = name.c_str();
- switch (*p) {
- case 'o':
- if (WANT_OPT()) { p += OPT_PREFIX_LEN;
- if (option_t<session_t> * handler = lookup_option(p))
- return MAKE_OPT_HANDLER(session_t, handler);
- }
+ switch (kind) {
+ case symbol_t::FUNCTION:
+ // Check if they are trying to access an option's setting or value.
+ if (option_t<session_t> * handler = lookup_option(name.c_str()))
+ return MAKE_OPT_FUNCTOR(session_t, handler);
break;
- }
- // Check if they are trying to access an option's setting or value.
- if (option_t<session_t> * handler = lookup_option(p))
- return MAKE_OPT_FUNCTOR(session_t, handler);
+ case symbol_t::OPTION:
+ if (option_t<session_t> * handler = lookup_option(name.c_str()))
+ return MAKE_OPT_HANDLER(session_t, handler);
+ break;
+
+ default:
+ break;
+ }
- return symbol_scope_t::lookup(name);
+ return symbol_scope_t::lookup(kind, name);
}
} // namespace ledger