From 7be6463835d43a60bd5febeff2f68bf0cfb31b4d Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Mar 2026 11:51:37 -0500 Subject: [PATCH] xo-interpreter2 stack: refactor: move cons() pm to object2/ --- include/xo/procedure2/ObjectPrimitives.hpp | 5 +++- src/procedure2/ObjectPrimitives.cpp | 23 +++++++++++++++++++ .../procedure2_register_primitives.cpp | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/xo/procedure2/ObjectPrimitives.hpp b/include/xo/procedure2/ObjectPrimitives.hpp index 46cdf80..d02ad4a 100644 --- a/include/xo/procedure2/ObjectPrimitives.hpp +++ b/include/xo/procedure2/ObjectPrimitives.hpp @@ -21,9 +21,12 @@ namespace xo { using AAllocator = xo::mm::AAllocator; public: - /** create primitive for fetching nth element of a sequence **/ + /** create primitive: fetch nth element of a sequence **/ static DPrimitive_gco_2_gco_gco * make_nth_pm(obj mm); + /** create primitive: create cons cell **/ + static DPrimitive_gco_2_gco_gco * make_cons_pm(obj mm); + /** create pirmitive for creating a dictionary instance **/ static DPrimitive_gco_0 * make_dict_make_pm(obj mm); diff --git a/src/procedure2/ObjectPrimitives.cpp b/src/procedure2/ObjectPrimitives.cpp index 98206d2..1cd0086 100644 --- a/src/procedure2/ObjectPrimitives.cpp +++ b/src/procedure2/ObjectPrimitives.cpp @@ -6,6 +6,7 @@ #include "ObjectPrimitives.hpp" #include #include +#include #include #include #include @@ -44,6 +45,28 @@ namespace xo { return DPrimitive_gco_2_gco_gco::_make(mm, "nth", &xfer_nth); } + // ----- cons ----- + + obj + xfer_cons(obj rcx, + obj car, + obj cdr) + { + (void)rcx; + + auto cdr_list = obj::from(cdr); + + return DList::cons(rcx.allocator(), + car, + cdr_list.data()); + } + + DPrimitive_gco_2_gco_gco * + ObjectPrimitives::make_cons_pm(obj mm) + { + return DPrimitive_gco_2_gco_gco::_make(mm, "cons", &xfer_cons); + } + // ----- dict_make ----- obj diff --git a/src/procedure2/procedure2_register_primitives.cpp b/src/procedure2/procedure2_register_primitives.cpp index f0aa6f1..c13dd4d 100644 --- a/src/procedure2/procedure2_register_primitives.cpp +++ b/src/procedure2/procedure2_register_primitives.cpp @@ -62,6 +62,7 @@ namespace xo { bool ok = true; ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm(mm), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm(mm), flags);