xo-reader: refactor: simplify progress_xs api

This commit is contained in:
Roland Conybeare 2024-08-19 00:06:34 -04:00
commit 6d73caf308
4 changed files with 23 additions and 6 deletions

View file

@ -47,8 +47,11 @@ namespace xo {
return dynamic_cast<const progress_xs *>(x);
}
static std::unique_ptr<progress_xs> make(rp<Expression> valex,
optype optype = optype::invalid);
static void start(rp<Expression> valex,
optype optype,
exprstatestack * p_stack);
static void start(rp<Expression> valex,
exprstatestack * p_stack);
bool admits_f64() const;
@ -89,6 +92,10 @@ namespace xo {
virtual void print(std::ostream & os) const override;
private:
static std::unique_ptr<progress_xs> make(rp<Expression> valex,
optype optype = optype::invalid);
private:
/** assemble expression representing
* value of

View file

@ -110,9 +110,9 @@ namespace xo {
* def pi = 3.14159265;
* \---tk---/
*/
p_stack->push_exprstate
(progress_xs::make
(Constant<double>::make(tk.f64_value())));
progress_xs::start
(Constant<double>::make(tk.f64_value()),
p_stack);
}
void

View file

@ -183,7 +183,7 @@ namespace xo {
switch (this->parenxs_type_) {
case parenexprstatetype::lparen_0: {
this->parenxs_type_ = parenexprstatetype::lparen_1; /* wants on_rightparen */
p_stack->push_exprstate(progress_xs::make(expr.promote()));
progress_xs::start(expr.promote(), p_stack);
return;
}

View file

@ -52,6 +52,16 @@ namespace xo {
return std::make_unique<progress_xs>(progress_xs(std::move(valex), op));
}
void
progress_xs::start(rp<Expression> valex, optype op, exprstatestack * p_stack) {
p_stack->push_exprstate(progress_xs::make(valex, op));
}
void
progress_xs::start(rp<Expression> valex, exprstatestack * p_stack) {
p_stack->push_exprstate(progress_xs::make(valex));
}
progress_xs::progress_xs(rp<Expression> valex, optype op)
: exprstate(exprstatetype::expr_progress),
lhs_{std::move(valex)},