From 8fda8c8f143eb72a0f4bfd100589d1fe940fabbd 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 --- include/xo/reader2/ParserStateMachine.hpp | 3 +++ src/reader2/ParserStateMachine.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/xo/reader2/ParserStateMachine.hpp b/include/xo/reader2/ParserStateMachine.hpp index aa2797d0..f8a0a796 100644 --- a/include/xo/reader2/ParserStateMachine.hpp +++ b/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/src/reader2/ParserStateMachine.cpp b/src/reader2/ParserStateMachine.cpp index 2b2ade05..71c52791 100644 --- a/src/reader2/ParserStateMachine.cpp +++ b/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 {