diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index 00fb7b78..f7d25dcc 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -418,6 +418,8 @@ namespace xo { case tokentype::tk_leftangle: case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: this->on_operator_token(tk, p_psm); return; diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index b3c7490a..8e90b8e5 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -218,6 +218,15 @@ namespace xo { break; case optype::op_great_equal: + // TODO: upconvert integer->double + if (lhs_->valuetype()->is_i64() && rhs_->valuetype()->is_i64()) { + return Apply::make_cmp_ge_i64(lhs_, rhs_); + } else { + this->apply_type_error(c_self_name, + op_type_, lhs_, rhs_, p_psm); + return nullptr; + } + assert(false); case optype::op_add: @@ -563,8 +572,12 @@ namespace xo { return optype::op_not_equal; case tokentype::tk_leftangle: return optype::op_less; + case tokentype::tk_lessequal: + return optype::op_less_equal; case tokentype::tk_rightangle: return optype::op_great; + case tokentype::tk_greatequal: + return optype::op_great_equal; default: assert(false); return optype::invalid;