xo-parser: simplify: ConvertExprAccess replaces exprstate.def_lhs_td
This commit is contained in:
parent
4e9b41645f
commit
c4c140af36
2 changed files with 16 additions and 20 deletions
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "xo/expression/Expression.hpp"
|
||||
#include "xo/expression/DefineExpr.hpp"
|
||||
#include "xo/expression/ConvertExpr.hpp"
|
||||
#include "xo/tokenizer/token.hpp"
|
||||
#include <stack>
|
||||
#include <stdexcept>
|
||||
|
|
@ -49,6 +50,7 @@ namespace xo {
|
|||
public:
|
||||
using Expression = xo::ast::Expression;
|
||||
using DefineExprAccess = xo::ast::DefineExprAccess;
|
||||
using ConvertExprAccess = xo::ast::ConvertExprAccess;
|
||||
using exprtype = xo::ast::exprtype;
|
||||
using token_type = token<char>;
|
||||
using TypeDescr = xo::reflect::TypeDescr;
|
||||
|
|
@ -139,17 +141,14 @@ namespace xo {
|
|||
|
||||
/** scaffold a define-expression here **/
|
||||
rp<DefineExprAccess> def_expr_;
|
||||
rp<ConvertExprAccess> cvt_expr_;
|
||||
|
||||
#ifdef OBSOLETE
|
||||
/** e.g. foo in
|
||||
* def foo : f64 = 1
|
||||
**/
|
||||
std::string def_lhs_symbol_;
|
||||
#endif
|
||||
/** e.g. f64 in
|
||||
* def foo : f64 = 1
|
||||
**/
|
||||
TypeDescr def_lhs_td_ = nullptr;
|
||||
#endif
|
||||
}; /*exprstate*/
|
||||
|
||||
inline std::ostream &
|
||||
|
|
|
|||
|
|
@ -369,10 +369,13 @@ namespace xo {
|
|||
|
||||
case exprstatetype::def_2:
|
||||
this->exs_type_ = exprstatetype::def_3;
|
||||
|
||||
this->def_lhs_td_ = td;
|
||||
this->cvt_expr_ = ConvertExprAccess::make(td /*dest_type*/,
|
||||
nullptr /*source_expr*/);
|
||||
this->def_expr_->assign_rhs(this->cvt_expr_);
|
||||
//this->def_lhs_td_ = td;
|
||||
|
||||
return;
|
||||
|
||||
case exprstatetype::def_3:
|
||||
case exprstatetype::def_4:
|
||||
/* NOT IMPLEMENTED */
|
||||
|
|
@ -585,17 +588,12 @@ namespace xo {
|
|||
*/
|
||||
rp<Expression> rhs_value = expr.get();
|
||||
|
||||
if (def_lhs_td_)
|
||||
rhs_value = ConvertExpr::make(def_lhs_td_, rhs_value);
|
||||
if (this->cvt_expr_)
|
||||
this->cvt_expr_->assign_arg(rhs_value);
|
||||
else
|
||||
this->def_expr_->assign_rhs(rhs_value);;
|
||||
|
||||
rp<DefineExprAccess> def_expr = this->def_expr_;
|
||||
|
||||
def_expr->assign_rhs(rhs_value);
|
||||
|
||||
#ifdef OBSOLETE
|
||||
rp<Expression> def = DefineExpr::make(this->def_lhs_symbol_,
|
||||
rhs_value);
|
||||
#endif
|
||||
rp<Expression> def_expr = this->def_expr_;
|
||||
|
||||
p_stack->pop_exprstate(); /* NOT KOSHER. invalidates *this */
|
||||
|
||||
|
|
@ -671,9 +669,8 @@ namespace xo {
|
|||
exprstate::print(std::ostream & os) const {
|
||||
os << "<exprstate"
|
||||
<< xtag("type", exs_type_)
|
||||
<< xtag("def_expr", def_expr_);
|
||||
if (def_lhs_td_)
|
||||
os << xtag("def_lhs_td", def_lhs_td_->short_name());
|
||||
<< xtag("def_expr", def_expr_)
|
||||
<< xtag("cvt_expr", cvt_expr_);
|
||||
os << ">";
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue