From 2f7176b1022bd16eb2833ae6e315cbd5f4466f79 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 1 Aug 2024 10:31:42 +1000 Subject: [PATCH] xo-parser: + expraction::pop() & apply --- include/xo/parser/parser.hpp | 1 + src/parser/parser.cpp | 30 +++++++++++++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/include/xo/parser/parser.hpp b/include/xo/parser/parser.hpp index e5e87194..11a3a2e2 100644 --- a/include/xo/parser/parser.hpp +++ b/include/xo/parser/parser.hpp @@ -147,6 +147,7 @@ namespace xo { static expraction keep(); static expraction emit(const exprir & ir); static expraction push2(exprstatetype s1, exprstatetype s2); + static expraction pop(const exprir & ir); expractiontype action_type() const { return action_type_; } const exprir & expr_ir() const { return expr_ir_; } diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp index 9851a987..312b38f0 100644 --- a/src/parser/parser.cpp +++ b/src/parser/parser.cpp @@ -127,6 +127,14 @@ namespace xo { s2); } + expraction + expraction::pop(const exprir & ir) { + return expraction(expractiontype::pop, + ir, + exprstatetype::invalid /*not used*/, + exprstatetype::invalid /*not used*/); + } + void expraction::print(std::ostream & os) const { os << "exs_type_ == exprstatetype::expect_rhs_expression) { - return expraction(expractiontype::pop, - exprir(exprirtype::expression, - Constant::make(tk.f64_value())), - exprstatetype::invalid /*not used*/, - exprstatetype::invalid /*not used*/); + return expraction::pop(exprir(exprirtype::expression, + Constant::make(tk.f64_value()))); } else { assert(false); return expraction(); @@ -594,10 +593,7 @@ namespace xo { rp def = DefineExpr::make(this->def_lhs_symbol_, rhs_value); - return expraction(expractiontype::pop, - exprir(exprirtype::expression, def), - exprstatetype::invalid /*not used*/, - exprstatetype::invalid /*not used*/); + return expraction::pop(exprir(exprirtype::expression, def)); } else { assert(false); return expraction();