From 692a9a7f1beca2867bcdba3382290119603da82a Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Mar 2026 09:47:14 -0500 Subject: [PATCH] xo-interpreter2 stack: modularize nth() primitive setup/install --- include/xo/numeric/NumericPrimitives.hpp | 4 ++++ .../xo/numeric/numeric_register_primitives.hpp | 4 ++-- src/numeric/NumericPrimitives.cpp | 16 ++++++++++++++++ src/numeric/numeric_register_primitives.cpp | 18 ++++++++++++------ 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/include/xo/numeric/NumericPrimitives.hpp b/include/xo/numeric/NumericPrimitives.hpp index a703af4a..54201f59 100644 --- a/include/xo/numeric/NumericPrimitives.hpp +++ b/include/xo/numeric/NumericPrimitives.hpp @@ -35,6 +35,10 @@ namespace xo { static DPrimitive_gco_2_gco_gco * make_cmplt_pm(obj mm); /** polymorphic (in both arguments) compare (<=) **/ static DPrimitive_gco_2_gco_gco * make_cmple_pm(obj mm); + /** polymorphic (in both arguments) compare (>) **/ + static DPrimitive_gco_2_gco_gco * make_cmpgt_pm(obj mm); + /** polymorphic (in both arguments) compare (>=) **/ + static DPrimitive_gco_2_gco_gco * make_cmpge_pm(obj mm); }; } } diff --git a/include/xo/numeric/numeric_register_primitives.hpp b/include/xo/numeric/numeric_register_primitives.hpp index 455d8b44..18a594be 100644 --- a/include/xo/numeric/numeric_register_primitives.hpp +++ b/include/xo/numeric/numeric_register_primitives.hpp @@ -10,8 +10,8 @@ namespace xo { namespace scm { - /** Register gc-aware (AGCObject,DRepr) combinations with garbage collector @p gc **/ - bool numeric_register_primitives(obj gc, + /** Register primitive factories with primitive registry **/ + bool numeric_register_primitives(obj mm, InstallSink sink, InstallFlags flags); } diff --git a/src/numeric/NumericPrimitives.cpp b/src/numeric/NumericPrimitives.cpp index e48c1a30..9ef0b979 100644 --- a/src/numeric/NumericPrimitives.cpp +++ b/src/numeric/NumericPrimitives.cpp @@ -68,6 +68,22 @@ namespace xo { &NumericDispatch::cmp_lessequal); } + DPrimitive_gco_2_gco_gco * + NumericPrimitives::make_cmpgt_pm(obj mm) + { + return DPrimitive_gco_2_gco_gco::_make(mm, "_cmpgt", + &NumericDispatch::cmp_greater); + } + + DPrimitive_gco_2_gco_gco * + NumericPrimitives::make_cmpge_pm(obj mm) + { + return DPrimitive_gco_2_gco_gco::_make(mm, "_cmpge", + &NumericDispatch::cmp_greatequal); + } + + + } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/numeric/numeric_register_primitives.cpp b/src/numeric/numeric_register_primitives.cpp index ff2749e3..b2da4d9e 100644 --- a/src/numeric/numeric_register_primitives.cpp +++ b/src/numeric/numeric_register_primitives.cpp @@ -61,18 +61,24 @@ namespace xo { ok = ok & install_aux(sink, NumericPrimitives::make_divide_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_add", &NumericDispatch::add, + ok = ok & install_aux(sink, + NumericPrimitives::make_add_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_sub", &NumericDispatch::subtract, + ok = ok & install_aux(sink, + NumericPrimitives::make_subtract_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_cmpeq", &NumericDispatch::cmp_equal, + ok = ok & install_aux(sink, + NumericPrimitives::make_cmpeq_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_cmpne", &NumericDispatch::cmp_notequal, + ok = ok & install_aux(sink, + NumericPrimitives::make_cmpne_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_cmplt", &NumericDispatch::cmp_less, + ok = ok & install_aux(sink, + NumericPrimitives::make_cmplt_pm(mm), flags & InstallFlags::f_essential); - ok = ok & install_aux(sink, mm, "_cmple", &NumericDispatch::cmp_lessequal, + ok = ok & install_aux(sink, + NumericPrimitives::make_cmple_pm(mm), flags & InstallFlags::f_essential); ok = ok & install_aux(sink, mm, "_cmpgt", &NumericDispatch::cmp_greater, flags & InstallFlags::f_essential);