xo-parser: simplify: drop exprir.expr

This commit is contained in:
Roland Conybeare 2024-08-01 13:26:18 +10:00
commit 216eea9d2c
2 changed files with 5 additions and 43 deletions

View file

@ -19,7 +19,6 @@ namespace xo {
empty,
symbol,
expression,
typedescr,
n_exprirtype
@ -51,16 +50,12 @@ namespace xo {
exprir(exprirtype xir_type,
const std::string & x)
: xir_type_{xir_type}, symbol_name_{x} {}
exprir(exprirtype xir_type,
rp<Expression> expr)
: xir_type_{xir_type}, expr_{std::move(expr)} {}
exprir(exprirtype xir_type,
TypeDescr td)
: xir_type_{xir_type}, td_{td} {}
exprirtype xir_type() const { return xir_type_; }
const std::string & symbol_name() const { return symbol_name_; }
const rp<Expression> & expr() const { return expr_; }
TypeDescr td() const { return td_; }
void print(std::ostream & os) const;
@ -70,8 +65,6 @@ namespace xo {
exprirtype xir_type_ = exprirtype::invalid;
/** xir_type=symbol: a symbol (type or variable) name **/
std::string symbol_name_;
/** xir_type=expression: a completed expression **/
rp<Expression> expr_;
/** xir_type=typedescr: object identifying/describing a datatype **/
TypeDescr td_ = nullptr;
};

View file

@ -28,8 +28,6 @@ namespace xo {
return "empty";
case exprirtype::symbol:
return "symbol";
case exprirtype::expression:
return "expression";
case exprirtype::typedescr:
return "typedescr";
case exprirtype::n_exprirtype:
@ -43,8 +41,7 @@ namespace xo {
exprir::print(std::ostream & os) const {
os << "<exprir"
<< xtag("type", xir_type_)
<< xtag("symbol_name", symbol_name_)
<< xtag("expr", expr_);
<< xtag("symbol_name", symbol_name_);
if (td_)
os << xtag("td", td_->short_name());
os << ">";
@ -576,8 +573,8 @@ namespace xo {
void
exprstate::on_exprir(const exprir & ir,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr)
exprstatestack * /*p_stack*/,
rp<Expression> * /*p_emit_expr*/)
{
constexpr bool c_debug_flag = true;
scope log(XO_DEBUG(c_debug_flag));
@ -592,11 +589,6 @@ namespace xo {
* parser::include_token() returns
*/
if (ir.xir_type() == exprirtype::expression) {
*p_emit_expr = ir.expr();
return;
}
/* NOT IMPLEMENTED */
assert(false);
return;
@ -619,31 +611,8 @@ namespace xo {
assert(false);
return;
case exprstatetype::def_4:
/* have all the ingredients to create an expression
* representing a definition
*
* 1. if ir_type is a symbol, interpret as variable name.
* Need to be able to locate variable by type
* 2. if ir_type is an expression, adopt as rhs
*/
if (ir.xir_type() == exprirtype::expression) {
/* TODO: do something with def_lhs_td */
rp<Expression> rhs_value = ir.expr();
if (def_lhs_td_)
rhs_value = ConvertExpr::make(def_lhs_td_, rhs_value);
rp<Expression> def = DefineExpr::make(this->def_lhs_symbol_,
rhs_value);
p_stack->pop_exprstate();
return p_stack->top_exprstate().on_expr(def,
p_stack, p_emit_expr);
} else {
assert(false);
return;
}
assert(false);
return;
case exprstatetype::expect_rhs_expression:
case exprstatetype::expect_type: