Implemented expr_context.

This commit is contained in:
John Wiegley 2009-02-07 04:27:28 -04:00
parent 19694cf2a2
commit 011f35b730
4 changed files with 12 additions and 6 deletions

View file

@ -190,4 +190,9 @@ std::ostream& operator<<(std::ostream& out, const expr_t& expr) {
return out;
}
string expr_context(const expr_t& expr)
{
return expr ? op_context(expr.ptr) : "<empty expression>";
}
} // namespace ledger

View file

@ -70,6 +70,8 @@ class expr_t
struct token_t;
class parser_t;
friend string expr_context(const expr_t& expr);
public:
class op_t;
typedef intrusive_ptr<op_t> ptr_op_t;
@ -141,10 +143,7 @@ public:
std::ostream& operator<<(std::ostream& out, const expr_t& expr);
inline string expr_context(const expr_t& expr) {
// jww (2009-02-01): NYI
return "EXPR";
}
string expr_context(const expr_t& expr);
} // namespace ledger

View file

@ -490,7 +490,8 @@ void expr_t::op_t::dump(std::ostream& out, const int depth) const
}
}
string op_context(const expr_t::ptr_op_t op, const expr_t::ptr_op_t goal)
string op_context(const expr_t::ptr_op_t op,
const expr_t::ptr_op_t goal)
{
ostream_pos_type start_pos, end_pos;
expr_t::op_t::context_t context(op, goal, &start_pos, &end_pos);

View file

@ -328,7 +328,8 @@ inline expr_t::ptr_op_t expr_t::op_t::wrap_functor(const function_t& fobj) {
#define MAKE_FUNCTOR(x) expr_t::op_t::wrap_functor(bind(&x, this, _1))
#define WRAP_FUNCTOR(x) expr_t::op_t::wrap_functor(x)
string op_context(const expr_t::ptr_op_t op, const expr_t::ptr_op_t goal);
string op_context(const expr_t::ptr_op_t op,
const expr_t::ptr_op_t goal = NULL);
} // namespace ledger