Added "source" command, for executing valexpr files
This commit is contained in:
parent
024fb4f3e0
commit
35da9ad466
3 changed files with 30 additions and 0 deletions
24
src/expr.cc
24
src/expr.cc
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include "expr.h"
|
#include "expr.h"
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
#include "scope.h"
|
||||||
|
|
||||||
namespace ledger {
|
namespace ledger {
|
||||||
|
|
||||||
|
|
@ -162,4 +163,27 @@ void expr_t::dump(std::ostream& out) const
|
||||||
if (ptr) ptr->dump(out, 0);
|
if (ptr) ptr->dump(out, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value_t source_command(call_scope_t& args)
|
||||||
|
{
|
||||||
|
std::istream * in = NULL;
|
||||||
|
scoped_ptr<ifstream> stream;
|
||||||
|
|
||||||
|
if (args.has(0)) {
|
||||||
|
stream.reset(new ifstream(path(args.get<string>(0))));
|
||||||
|
in = stream.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
symbol_scope_t file_locals(args);
|
||||||
|
|
||||||
|
while (in->good() && ! in->eof()) {
|
||||||
|
char buf[4096];
|
||||||
|
in->getline(buf, 4095);
|
||||||
|
|
||||||
|
if (buf[0] != ';')
|
||||||
|
expr_t(buf).calc(file_locals);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ledger
|
} // namespace ledger
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,10 @@ inline value_t expr_value(expr_t::ptr_op_t op) {
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class call_scope_t;
|
||||||
|
|
||||||
|
value_t source_command(call_scope_t& scope);
|
||||||
|
|
||||||
} // namespace ledger
|
} // namespace ledger
|
||||||
|
|
||||||
#endif // _EXPR_H
|
#endif // _EXPR_H
|
||||||
|
|
|
||||||
|
|
@ -1449,6 +1449,8 @@ expr_t::ptr_op_t report_t::lookup(const symbol_t::kind_t kind,
|
||||||
case 's':
|
case 's':
|
||||||
if (is_eq(p, "stats") || is_eq(p, "stat"))
|
if (is_eq(p, "stats") || is_eq(p, "stat"))
|
||||||
return WRAP_FUNCTOR(report_statistics);
|
return WRAP_FUNCTOR(report_statistics);
|
||||||
|
else if (is_eq(p, "source"))
|
||||||
|
return WRAP_FUNCTOR(source_command);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'x':
|
case 'x':
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue