From fc5fa831ac9ed2a0460127fc4ce6835d92f2f388 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Mar 2026 11:40:24 -0500 Subject: [PATCH] xo-interpreter2 stack: refactor: move dict pms to object2/ --- .../interpreter2/VirtualSchematikaMachine.cpp | 69 +------------------ .../xo/procedure2/ObjectPrimitives.hpp | 10 ++- .../src/procedure2/ObjectPrimitives.cpp | 59 +++++++++++++++- .../procedure2_register_primitives.cpp | 3 +- 4 files changed, 69 insertions(+), 72 deletions(-) diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index a4ed2810..b02d5c58 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -206,7 +206,8 @@ namespace xo { log && log(xtag("expr", expr_pr)); if (value_.value()) { - auto value_pr = const_cast *>(value_.value())->to_facet(); + auto value_pr + = const_cast *>(value_.value())->to_facet(); if (value_pr) log && log(xtag("value", value_pr)); } else { @@ -954,48 +955,6 @@ namespace xo { static DPrimitive_gco_1_gco s_fn_n_args_pm("_fn_n_args", &xfer_fn_n_args); - // ----- primitive: dict_make() ----- - - obj - xfer_dict_make(obj rcx) - { - return obj(DDictionary::empty(rcx.allocator(), - 8 /*cap*/)); - } - - static DPrimitive_gco_0 s_dict_make_pm("_dict_make", - &xfer_dict_make); - - // ----- primitive: dict_upsert() ----- - - obj - xfer_dict_upsert(obj rcx, - obj dict, - obj key, - obj value) - { - scope log(XO_DEBUG(true)); - - log && log(xtag("dict.tseq", dict._typeseq()), - xtag("dict.tname", TypeRegistry::id2name(dict._typeseq()))); - log && log(xtag("key.tseq", key._typeseq()), - xtag("key.tname", TypeRegistry::id2name(key._typeseq()))); - log && log(xtag("value.tseq", value._typeseq()), - xtag("value.tname", TypeRegistry::id2name(value._typeseq()))); - - auto value_pr = FacetRegistry::instance().variant(value); - - log && log(xtag("value", value_pr)); - - dict->upsert(rcx.allocator(), - DDictionary::pair_type(key.data(), value)); - - return dict; - } - - static DPrimitive_gco_3_dict_string_gco s_dict_upsert_pm("_dict_upsert", - &xfer_dict_upsert); - // ----- install primitives ----- void @@ -1048,30 +1007,6 @@ namespace xo { Reflect::require(), obj(&s_fn_n_args_pm)); } - - /* dict_make */ - { - const DUniqueString * name - = reader_.intern_string("dict_make"); - - global_env_->_upsert_value - (mm_.to_op(), - name, - Reflect::require(), - obj(&s_dict_make_pm)); - } - - /* dict_upsert */ - { - const DUniqueString * name - = reader_.intern_string("dict_upsert"); - - global_env_->_upsert_value - (mm_.to_op(), - name, - Reflect::require(), - obj(&s_dict_upsert_pm)); - } } } /*namespace scm*/ diff --git a/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp b/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp index 392cf939..46cdf801 100644 --- a/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp +++ b/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp @@ -5,7 +5,9 @@ #pragma once -#include +#include "Primitive_gco_0.hpp" +#include "Primitive_gco_2_gco_gco.hpp" +#include "Primitive_gco_3_dict_string_gco.hpp" namespace xo { namespace scm { @@ -21,6 +23,12 @@ namespace xo { public: /** create primitive for fetching nth element of a sequence **/ static DPrimitive_gco_2_gco_gco * make_nth_pm(obj mm); + + /** create pirmitive for creating a dictionary instance **/ + static DPrimitive_gco_0 * make_dict_make_pm(obj mm); + + /** create primitive that upserts a key,value pair into a dictionary **/ + static DPrimitive_gco_3_dict_string_gco * make_dict_upsert_pm(obj mm); }; } /*namespace scm*/ diff --git a/xo-procedure2/src/procedure2/ObjectPrimitives.cpp b/xo-procedure2/src/procedure2/ObjectPrimitives.cpp index 5164efc6..98206d26 100644 --- a/xo-procedure2/src/procedure2/ObjectPrimitives.cpp +++ b/xo-procedure2/src/procedure2/ObjectPrimitives.cpp @@ -4,17 +4,24 @@ **/ #include "ObjectPrimitives.hpp" -#include "Primitive_gco_2_gco_gco.hpp" +#include #include #include +#include +#include namespace xo { using xo::scm::ASequence; + using xo::print::APrintable; using xo::mm::AAllocator; using xo::mm::AGCObject; + using xo::facet::FacetRegistry; + using xo::facet::TypeRegistry; namespace scm { + // ----- nth ----- + // TODO: seq_gc -> obj // n_gco -> obj // @@ -23,8 +30,6 @@ namespace xo { obj seq_gco, obj n_gco) { - scope log(XO_DEBUG(true)); - (void)rcx; obj seq = seq_gco.to_facet(); @@ -39,6 +44,54 @@ namespace xo { return DPrimitive_gco_2_gco_gco::_make(mm, "nth", &xfer_nth); } + // ----- dict_make ----- + + obj + xfer_dict_make(obj rcx) + { + return obj(DDictionary::empty(rcx.allocator(), + 8 /*cap*/)); + } + + DPrimitive_gco_0 * + ObjectPrimitives::make_dict_make_pm(obj mm) + { + return DPrimitive_gco_0::_make(mm, "dict_make", &xfer_dict_make); + } + + // ----- dict_upsert ----- + + obj + xfer_dict_upsert(obj rcx, + obj dict, + obj key, + obj value) + { + scope log(XO_DEBUG(true)); + + log && log(xtag("dict.tseq", dict._typeseq()), + xtag("dict.tname", TypeRegistry::id2name(dict._typeseq()))); + log && log(xtag("key.tseq", key._typeseq()), + xtag("key.tname", TypeRegistry::id2name(key._typeseq()))); + log && log(xtag("value.tseq", value._typeseq()), + xtag("value.tname", TypeRegistry::id2name(value._typeseq()))); + + auto value_pr = FacetRegistry::instance().variant(value); + + log && log(xtag("value", value_pr)); + + dict->upsert(rcx.allocator(), + DDictionary::pair_type(key.data(), value)); + + return dict; + } + + DPrimitive_gco_3_dict_string_gco * + ObjectPrimitives::make_dict_upsert_pm(obj mm) + { + return DPrimitive_gco_3_dict_string_gco::_make(mm, "dict_upsert", &xfer_dict_upsert); + } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp index e17cda4e..f0aa6f1b 100644 --- a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp +++ b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp @@ -5,7 +5,6 @@ #include "procedure2_register_primitives.hpp" #include "ObjectPrimitives.hpp" -#include "Primitive_gco_2_gco_gco.hpp" #include #include @@ -63,6 +62,8 @@ namespace xo { bool ok = true; ok = ok & install_aux(sink, ObjectPrimitives::make_nth_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); return ok; }