summaryrefslogtreecommitdiff
path: root/src/expr.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2012-03-09 14:47:11 -0600
committerJohn Wiegley <johnw@newartisans.com>2012-03-09 14:47:11 -0600
commit3886428d1db0a103a050b7394c133abb793eba06 (patch)
treeec0e389bb5c683444c79e3deb6154a0eaf88f4d4 /src/expr.cc
parent77e9e3bfb9b7342fb367723d18073200c311d420 (diff)
downloadfork-ledger-3886428d1db0a103a050b7394c133abb793eba06.tar.gz
fork-ledger-3886428d1db0a103a050b7394c133abb793eba06.tar.bz2
fork-ledger-3886428d1db0a103a050b7394c133abb793eba06.zip
Move expr_t's ctor/dtors into expr.cc
Fixes #672
Diffstat (limited to 'src/expr.cc')
-rw-r--r--src/expr.cc71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/expr.cc b/src/expr.cc
index 8c8e995a..b22572f8 100644
--- a/src/expr.cc
+++ b/src/expr.cc
@@ -37,6 +37,59 @@
namespace ledger {
+expr_t::expr_t() : base_type()
+{
+ TRACE_CTOR(expr_t, "");
+}
+
+expr_t::expr_t(const expr_t& other) : base_type(other), ptr(other.ptr)
+{
+ TRACE_CTOR(expr_t, "copy");
+}
+expr_t::expr_t(ptr_op_t _ptr, scope_t * _context)
+ : base_type(_context), ptr(_ptr)
+{
+ TRACE_CTOR(expr_t, "const ptr_op_t&, scope_t *");
+}
+
+expr_t::expr_t(const string& _str, const parse_flags_t& flags)
+ : base_type()
+{
+ TRACE_CTOR(expr_t, "string, parse_flags_t");
+ if (! _str.empty())
+ parse(_str, flags);
+}
+
+expr_t::expr_t(std::istream& in, const parse_flags_t& flags)
+ : base_type()
+{
+ TRACE_CTOR(expr_t, "std::istream&, parse_flags_t");
+ parse(in, flags);
+}
+
+expr_t::~expr_t() {
+ TRACE_DTOR(expr_t);
+}
+
+expr_t& expr_t::operator=(const expr_t& _expr)
+{
+ if (this != &_expr) {
+ base_type::operator=(_expr);
+ ptr = _expr.ptr;
+ }
+ return *this;
+}
+
+expr_t::operator bool() const throw()
+{
+ return ptr.get() != NULL;
+}
+
+expr_t::ptr_op_t expr_t::get_op() throw()
+{
+ return ptr;
+}
+
void expr_t::parse(std::istream& in, const parse_flags_t& flags,
const optional<string>& original_string)
{
@@ -204,6 +257,24 @@ void merged_expr_t::compile(scope_t& scope)
expr_t::compile(scope);
}
+expr_t::ptr_op_t as_expr(const value_t& val)
+{
+ VERIFY(val.is_any());
+ return val.as_any<expr_t::ptr_op_t>();
+}
+
+void set_expr(value_t& val, expr_t::ptr_op_t op)
+{
+ val.set_any(op);
+}
+
+value_t expr_value(expr_t::ptr_op_t op)
+{
+ value_t temp;
+ temp.set_any(op);
+ return temp;
+}
+
value_t source_command(call_scope_t& args)
{
std::istream * in = NULL;