xo-reader: parserstatemachine -> consolidate on_expr() args

This commit is contained in:
Roland Conybeare 2024-08-19 12:17:26 -04:00
commit bdf75d5620
14 changed files with 29 additions and 47 deletions

View file

@ -75,8 +75,7 @@ namespace xo {
defexprstatetype defxs_type() const { return defxs_type_; }
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
virtual void on_symbol(const std::string & symbol_name,
parserstatemachine * p_psm) override;
virtual void on_typedescr(TypeDescr td,

View file

@ -33,8 +33,7 @@ namespace xo {
/** update exprstate in response to a successfully-parsed subexpression **/
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
private:
static std::unique_ptr<expect_expr_xs> make();

View file

@ -33,8 +33,7 @@ namespace xo {
virtual void on_typedescr(TypeDescr td,
parserstatemachine * p_psm) override;
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
private:
static std::unique_ptr<exprseq_xs> make();

View file

@ -95,8 +95,7 @@ namespace xo {
/** update exprstate in response to a successfully-parsed subexpression **/
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr);
parserstatemachine * p_psm);
/** update exprstate when expecting a symbol **/
virtual void on_symbol(const std::string & symbol,

View file

@ -47,8 +47,7 @@ namespace xo {
virtual void on_formal_arglist(const std::vector<rp<Variable>> & argl,
parserstatemachine * p_psm) override;
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
virtual void on_semicolon_token(const token_type & tk,
parserstatemachine * p_psm) override;

View file

@ -35,8 +35,7 @@ namespace xo {
bool admits_rightparen() const;
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
virtual void on_symbol(const std::string & symbol,
parserstatemachine * p_psm) override;
virtual void on_typedescr(TypeDescr td,

View file

@ -56,8 +56,7 @@ namespace xo {
bool admits_f64() const;
virtual void on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
parserstatemachine * p_psm) override;
virtual void on_symbol_token(const token_type & tk,
parserstatemachine * p_psm) override;
virtual void on_typedescr(TypeDescr td,

View file

@ -30,8 +30,7 @@ namespace xo {
void
define_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr)
parserstatemachine * p_psm)
{
if (this->defxs_type_ == defexprstatetype::def_5) {
/* have all the ingredients to create an expression
@ -54,7 +53,7 @@ namespace xo {
return;
}
exprstate::on_expr(expr, p_stack, p_emit_expr);
exprstate::on_expr(expr, p_psm);
}
void
@ -133,7 +132,6 @@ namespace xo {
scope log(XO_DEBUG(c_debug_flag));
auto p_stack = p_psm->p_stack_;
auto p_emit_expr = p_psm->p_emit_expr_;
//constexpr const char * self_name = "exprstate::on_semicolon";
@ -142,9 +140,7 @@ namespace xo {
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_expr(expr,
p_stack,
p_emit_expr);
p_stack->top_exprstate().on_expr(expr, p_psm);
} else {
exprstate::on_semicolon_token(tk, p_psm);
}

View file

@ -118,8 +118,7 @@ namespace xo {
void
expect_expr_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr)
parserstatemachine * p_psm)
{
constexpr bool c_debug_flag = true;
scope log(XO_DEBUG(c_debug_flag));
@ -127,12 +126,11 @@ namespace xo {
log && log(xtag("exstype", this->exs_type_),
xtag("expr", expr));
auto p_stack = p_psm->p_stack_;
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_expr(expr,
p_stack,
p_emit_expr);
p_stack->top_exprstate().on_expr(expr, p_psm);
} /*on_expr*/
} /*namespace scm*/

View file

@ -3,6 +3,7 @@
#include "exprseq_xs.hpp"
#include "define_xs.hpp"
#include "expect_symbol_xs.hpp"
#include "parserstatemachine.hpp"
namespace xo {
namespace scm {
@ -60,8 +61,7 @@ namespace xo {
void
exprseq_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * /*p_stack*/,
rp<Expression> * p_emit_expr)
parserstatemachine * p_psm)
{
/* toplevel expression sequence accepts an
* arbitrary number of expressions.
@ -69,6 +69,8 @@ namespace xo {
* parser::include_token() returns
*/
auto p_emit_expr = p_psm->p_emit_expr_;
*p_emit_expr = expr.promote();
} /*on_expr*/

View file

@ -346,8 +346,7 @@ namespace xo {
void
exprstate::on_expr(ref::brw<Expression> expr,
exprstatestack * /*p_stack*/,
rp<Expression> * /*p_emit_expr*/)
parserstatemachine * /*p_psm*/)
{
constexpr bool c_debug_flag = true;
scope log(XO_DEBUG(c_debug_flag));

View file

@ -59,14 +59,13 @@ namespace xo {
void
lambda_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr)
parserstatemachine * p_psm)
{
if (lmxs_type_ == lambdastatetype::lm_2) {
this->lmxs_type_ = lambdastatetype::lm_3;
this->body_ = expr.promote();
} else {
exprstate::on_expr(expr, p_stack, p_emit_expr);
exprstate::on_expr(expr, p_psm);
}
}
@ -75,7 +74,6 @@ namespace xo {
parserstatemachine * p_psm)
{
auto p_stack = p_psm->p_stack_;
auto p_emit_expr = p_psm->p_emit_expr_;
if (lmxs_type_ == lambdastatetype::lm_3) {
/* done! */
@ -86,7 +84,7 @@ namespace xo {
rp<Lambda> lm = Lambda::make(name, argl_, body_);
p_stack->top_exprstate().on_expr(lm, p_stack, p_emit_expr);
p_stack->top_exprstate().on_expr(lm, p_psm);
p_stack->top_exprstate().on_semicolon_token(tk, p_psm);
return;

View file

@ -152,11 +152,10 @@ namespace xo {
rp<Expression> expr = this->gen_expr_;
auto p_stack = p_psm->p_stack_;
auto p_emit_expr = p_psm->p_emit_expr_;
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_expr(expr, p_stack, p_emit_expr);
p_stack->top_exprstate().on_expr(expr, p_psm);
}
}
@ -174,8 +173,7 @@ namespace xo {
void
paren_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * p_stack,
rp<Expression> * /*p_emit_expr*/)
parserstatemachine * p_psm)
{
constexpr bool c_debug_flag = true;
scope log(XO_DEBUG(c_debug_flag));
@ -186,6 +184,8 @@ namespace xo {
switch (this->parenxs_type_) {
case parenexprstatetype::lparen_0: {
this->parenxs_type_ = parenexprstatetype::lparen_1; /* wants on_rightparen */
auto p_stack = p_psm->p_stack_;
progress_xs::start(expr.promote(), p_stack);
return;

View file

@ -134,8 +134,7 @@ namespace xo {
void
progress_xs::on_expr(ref::brw<Expression> expr,
exprstatestack * /*p_stack*/,
rp<Expression> * /*p_emit_expr*/)
parserstatemachine * /*p_psm*/)
{
/* note: previous token probably an operator,
* handled from progress_xs::on_operator_token(),
@ -200,15 +199,13 @@ namespace xo {
scope log(XO_DEBUG(c_debug_flag));
auto p_stack = p_psm->p_stack_;
auto p_emit_expr = p_psm->p_emit_expr_;
rp<Expression> expr = this->assemble_expr();
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_expr(expr,
p_stack,
p_emit_expr);
p_stack->top_exprstate().on_expr(expr, p_psm);
/* control here on input like:
* (1.234;
*
@ -261,7 +258,6 @@ namespace xo {
constexpr const char * self_name = "progress_xs::on_rightparen";
auto p_stack = p_psm->p_stack_;
auto p_emit_expr = p_psm->p_emit_expr_;
/* stack may be something like:
*
@ -286,7 +282,7 @@ namespace xo {
log && log(xtag("stack", p_stack));
p_stack->top_exprstate().on_expr(expr, p_stack, p_emit_expr);
p_stack->top_exprstate().on_expr(expr, p_psm);
/* now deliver rightparen */
p_stack->top_exprstate().on_rightparen_token(tk, p_psm);