From 8828fc7befdf2358075b2bc42e212d0b2d774481 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 12 Mar 2026 21:00:16 -0500 Subject: [PATCH] xo-reader2 stack: + op<= setup --- .../src/numeric/numeric_register_primitives.cpp | 2 ++ .../include/xo/reader2/ParserStateMachine.hpp | 3 +++ xo-reader2/src/reader2/ParserStateMachine.cpp | 15 +++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/xo-numeric/src/numeric/numeric_register_primitives.cpp b/xo-numeric/src/numeric/numeric_register_primitives.cpp index e407eca8..ed5d777f 100644 --- a/xo-numeric/src/numeric/numeric_register_primitives.cpp +++ b/xo-numeric/src/numeric/numeric_register_primitives.cpp @@ -72,6 +72,8 @@ namespace xo { flags & InstallFlags::f_essential); ok = ok & install_aux(sink, mm, "_cmplt", &NumericDispatch::cmp_less, flags & InstallFlags::f_essential); + ok = ok & install_aux(sink, mm, "_cmple", &NumericDispatch::cmp_lessequal, + flags & InstallFlags::f_essential); return ok; } diff --git a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp index aa2797d0..f8a0a796 100644 --- a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp @@ -106,6 +106,8 @@ namespace xo { obj cmpne_pm() const; /** polymorphich less-than comparison. Use to implement infix op< **/ obj cmplt_pm() const; + /** polymorphich less-or-equal comparison. Use to implement infix op<= **/ + obj cmple_pm() const; /** true iff state machine is currently idle (at top-level) **/ bool is_at_toplevel() const noexcept; @@ -418,6 +420,7 @@ namespace xo { Binding cmpeq_binding_; Binding cmpne_binding_; Binding cmplt_binding_; + Binding cmple_binding_; /** current output from parser **/ ParserResult result_; diff --git a/xo-reader2/src/reader2/ParserStateMachine.cpp b/xo-reader2/src/reader2/ParserStateMachine.cpp index 2b2ade05..71c52791 100644 --- a/xo-reader2/src/reader2/ParserStateMachine.cpp +++ b/xo-reader2/src/reader2/ParserStateMachine.cpp @@ -144,6 +144,12 @@ namespace xo { assert(name); this->cmplt_binding_ = global_symtab_->lookup_binding(name); } + + { + const DUniqueString * name = stringtable_.lookup("_cmple"); + assert(name); + this->cmple_binding_ = global_symtab_->lookup_binding(name); + } } ParserStateMachine::~ParserStateMachine() @@ -220,6 +226,15 @@ namespace xo { return retval; } + obj + ParserStateMachine::cmple_pm() const + { + obj retval = global_env_->lookup_value(cmple_binding_); + assert(retval); + + return retval; + } + bool ParserStateMachine::is_at_toplevel() const noexcept {