diff --git a/include/xo/procedure2/SetupProcedure2.hpp b/include/xo/procedure2/SetupProcedure2.hpp new file mode 100644 index 0000000..1363d7e --- /dev/null +++ b/include/xo/procedure2/SetupProcedure2.hpp @@ -0,0 +1,29 @@ +/** @file SetupProcedure2.hpp + * + * @author Roland Conybeare, Jan 2026 + **/ + +#pragma once + +#include "PrimitiveRegistry.hpp" +#include + +namespace xo { + namespace scm { + struct SetupProcedure2 { + public: + using ACollector = xo::mm::ACollector; + + public: + /** Register procedure2 (facet,impl) combinations with FacetRegistry **/ + static bool register_facets(); + /** Register gc-aware (AGCObject,DRepr) combinations with garbage collector @p gc **/ + static bool register_types(obj gc); + static bool register_primitives(obj rcx, + InstallSink sink, + InstallFlags flags); + }; + } +} + +/* end SetupProcedure2.hpp */ diff --git a/include/xo/procedure2/procedure2_register_facets.hpp b/include/xo/procedure2/procedure2_register_facets.hpp deleted file mode 100644 index 2a7128c..0000000 --- a/include/xo/procedure2/procedure2_register_facets.hpp +++ /dev/null @@ -1,17 +0,0 @@ -/** @file procedure2_register_facets.hpp - * - * @author Roland Conybeare, Jan 2026 - **/ - -#pragma once - -#include - -namespace xo { - namespace scm { - /** Register procedure2 (facet,impl) combinations with FacetRegistry **/ - bool procedure2_register_facets(); - } -} - -/* end procedure2_register_facets.hpp */ diff --git a/include/xo/procedure2/procedure2_register_primitives.hpp b/include/xo/procedure2/procedure2_register_primitives.hpp deleted file mode 100644 index 3b4fa61..0000000 --- a/include/xo/procedure2/procedure2_register_primitives.hpp +++ /dev/null @@ -1,22 +0,0 @@ -/** @file procedure2_register_primitives.hpp - * - * @author Roland Conybeare, Mar 2026 - **/ - -#pragma once - -#include "PrimitiveRegistry.hpp" -#include - -namespace xo { - namespace scm { - /** Register primitive-factories **/ - bool procedure2_register_primitives(obj rcx, - //obj gc, - //StringTable * stbl, - InstallSink sink, - InstallFlags flags); - } -} - -/* end procedure2_register_primitives.hpp */ diff --git a/include/xo/procedure2/procedure2_register_types.hpp b/include/xo/procedure2/procedure2_register_types.hpp deleted file mode 100644 index 98b0c5f..0000000 --- a/include/xo/procedure2/procedure2_register_types.hpp +++ /dev/null @@ -1,17 +0,0 @@ -/** @file procedure2_register_types.hpp - * - * @author Roland Conybeare, Dec 2025 - **/ - -#pragma once - -#include - -namespace xo { - namespace scm { - /** Register gc-aware (AGCObject,DRepr) combinations with garbage collector @p gc **/ - bool procedure2_register_types(obj gc); - } -} - -/* end procedure2_register_types.hpp */ diff --git a/src/procedure2/CMakeLists.txt b/src/procedure2/CMakeLists.txt index 6ac08bb..2198403 100644 --- a/src/procedure2/CMakeLists.txt +++ b/src/procedure2/CMakeLists.txt @@ -4,9 +4,7 @@ set(SELF_LIB xo_procedure2) set(SELF_SRCS init_procedure2.cpp init_primitives.cpp - procedure2_register_primitives.cpp - procedure2_register_types.cpp - procedure2_register_facets.cpp + SetupProcedure2.cpp ObjectPrimitives.cpp PrimitiveRegistry.cpp DPrimitive.cpp diff --git a/src/procedure2/SetupProcedure2.cpp b/src/procedure2/SetupProcedure2.cpp new file mode 100644 index 0000000..a31964a --- /dev/null +++ b/src/procedure2/SetupProcedure2.cpp @@ -0,0 +1,151 @@ +/** @file SetupProcedure2.cpp + * + * @author Roland Conybeare, Jan 2026 + **/ + +#include "SetupProcedure2.hpp" +#include "Procedure.hpp" +#include "ObjectPrimitives.hpp" +#include "SimpleRcx.hpp" +#include "Primitive_gco_0.hpp" +#include "Primitive_gco_1_gco.hpp" +#include "Primitive_gco_2_gco_gco.hpp" +#include "Primitive_gco_2_dict_string.hpp" +#include "Primitive_gco_3_dict_string_gco.hpp" + +#include +#include +#include +#include + +namespace xo { + using xo::mm::AAllocator; + using xo::facet::FacetRegistry; + using xo::facet::impl_for; + using xo::facet::typeseq; + using xo::print::APrintable; + + namespace scm { + bool + SetupProcedure2::register_facets() + { + scope log(XO_DEBUG(true)); + + FacetRegistry::register_impl(); + + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + + log && log(xtag("DSimpleRcx.tseq", typeseq::id())); + log && log(xtag("DPrimitive_gco_0.tseq", typeseq::id())); + log && log(xtag("DPrimitive_gco_1_gco.tseq", typeseq::id())); + log && log(xtag("DPrimitive_gco_2_gco_gco.tseq", typeseq::id())); + log && log(xtag("DPrimitive_gco_2_dict_string.tseq", typeseq::id())); + log && log(xtag("DPrimitive_gco_3_dict_string_gco.tseq", typeseq::id())); + + log && log(xtag("ARuntimeContext.tseq", typeseq::id())); + log && log(xtag("AProcedure.tseq", typeseq::id())); + + return true; + } + + bool + SetupProcedure2::register_types(obj gc) + { + scope log(XO_DEBUG(true)); + + bool ok = true; + + // (note: don't currently intend to support AGCObject for DSimpleRcx) + + ok &= gc.install_type(impl_for()); + ok &= gc.install_type(impl_for()); + ok &= gc.install_type(impl_for()); + ok &= gc.install_type(impl_for()); + ok &= gc.install_type(impl_for()); + + return ok; + } + + template + bool install_aux(InstallSink sink, + PrimitiveRepr * pm, + InstallFlags flags) + { + scope log(XO_DEBUG(true)); + + if ((flags & InstallFlags::f_generalpurpose) == InstallFlags::f_generalpurpose) { + log && log("create primitive", xtag("name", pm->name())); + + return sink(pm->name(), + pm->fn_td(), + obj(pm), + flags); + } else { + log && log("skip primitive", xtag("name", pm->name())); + + return true; + } + } + + template + bool install_aux(InstallSink sink, + obj mm, + std::string_view name, + typename Primitive::FunctionPtrType impl, + InstallFlags flags) + { + if (flags != InstallFlags::f_none) { + auto pm + = Primitive::_make(mm, name, impl); + + return install_aux(sink, pm, flags); + } else { + return true; + } + } + + bool + SetupProcedure2::register_primitives(obj rcx, + InstallSink sink, + InstallFlags flags) + { + obj mm = rcx.allocator(); + StringTable * stbl = rcx.stringtable(); + + scope log(XO_DEBUG(true)); + + bool ok = true; + + ok = ok & install_aux(sink, ObjectPrimitives::make_cwd_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_dict_lookup_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm (mm, stbl), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_fn_n_args_pm (mm, stbl), flags); + + return ok; + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end SetupProcedure2.cpp */ diff --git a/src/procedure2/init_procedure2.cpp b/src/procedure2/init_procedure2.cpp index 7c07f37..08f0c76 100644 --- a/src/procedure2/init_procedure2.cpp +++ b/src/procedure2/init_procedure2.cpp @@ -5,27 +5,22 @@ #include "init_procedure2.hpp" #include "init_primitives.hpp" -#include "procedure2_register_facets.hpp" -#include "procedure2_register_types.hpp" -#include "procedure2_register_primitives.hpp" - +#include "SetupProcedure2.hpp" #include #include namespace xo { - using xo::scm::procedure2_register_primitives; - using xo::scm::procedure2_register_facets; - using xo::scm::procedure2_register_types; + using xo::scm::SetupProcedure2; using xo::scm::PrimitiveRegistry; using xo::mm::CollectorTypeRegistry; void InitSubsys::init() { - procedure2_register_facets(); + SetupProcedure2::register_facets(); - CollectorTypeRegistry::instance().register_types(&procedure2_register_types); - PrimitiveRegistry::instance().register_primitives(&procedure2_register_primitives); + CollectorTypeRegistry::instance().register_types(&SetupProcedure2::register_types); + PrimitiveRegistry::instance().register_primitives(&SetupProcedure2::register_primitives); } InitEvidence diff --git a/src/procedure2/procedure2_register_facets.cpp b/src/procedure2/procedure2_register_facets.cpp deleted file mode 100644 index 031aa53..0000000 --- a/src/procedure2/procedure2_register_facets.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/** @file procedure2_register_facets.cpp - * - * @author Roland Conybeare, Jan 2026 - **/ - -#include "Procedure.hpp" -#include "SimpleRcx.hpp" -#include "Primitive_gco_0.hpp" -#include "Primitive_gco_1_gco.hpp" -#include "Primitive_gco_2_gco_gco.hpp" -#include "Primitive_gco_2_dict_string.hpp" -#include "Primitive_gco_3_dict_string_gco.hpp" - -#include -#include -#include -#include - -namespace xo { - using xo::facet::FacetRegistry; - using xo::facet::typeseq; - using xo::print::APrintable; - - namespace scm { - bool - procedure2_register_facets() - { - scope log(XO_DEBUG(true)); - - FacetRegistry::register_impl(); - - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - FacetRegistry::register_impl(); - - log && log(xtag("DSimpleRcx.tseq", typeseq::id())); - log && log(xtag("DPrimitive_gco_0.tseq", typeseq::id())); - log && log(xtag("DPrimitive_gco_1_gco.tseq", typeseq::id())); - log && log(xtag("DPrimitive_gco_2_gco_gco.tseq", typeseq::id())); - log && log(xtag("DPrimitive_gco_2_dict_string.tseq", typeseq::id())); - log && log(xtag("DPrimitive_gco_3_dict_string_gco.tseq", typeseq::id())); - - log && log(xtag("ARuntimeContext.tseq", typeseq::id())); - log && log(xtag("AProcedure.tseq", typeseq::id())); - - return true; - } - - } /*namespace scm*/ -} /*namespace xo*/ - -/* end procedure2_register_facets.cpp */ diff --git a/src/procedure2/procedure2_register_primitives.cpp b/src/procedure2/procedure2_register_primitives.cpp deleted file mode 100644 index 7dd1513..0000000 --- a/src/procedure2/procedure2_register_primitives.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/** @file procedure2_register_primitives.cpp - * - * @author Roland Conybeare, Mar 2026 - **/ - -#include "procedure2_register_primitives.hpp" -#include "ObjectPrimitives.hpp" -#include -#include - -namespace xo { - using xo::scm::ASequence; - using xo::mm::AAllocator; - using xo::mm::AGCObject; - - namespace scm { - template - bool install_aux(InstallSink sink, - PrimitiveRepr * pm, - InstallFlags flags) - { - scope log(XO_DEBUG(true)); - - if ((flags & InstallFlags::f_generalpurpose) == InstallFlags::f_generalpurpose) { - log && log("create primitive", xtag("name", pm->name())); - - return sink(pm->name(), - pm->fn_td(), - obj(pm), - flags); - } else { - log && log("skip primitive", xtag("name", pm->name())); - - return true; - } - } - - template - bool install_aux(InstallSink sink, - obj mm, - std::string_view name, - typename Primitive::FunctionPtrType impl, - InstallFlags flags) - { - if (flags != InstallFlags::f_none) { - auto pm - = Primitive::_make(mm, name, impl); - - return install_aux(sink, pm, flags); - } else { - return true; - } - } - - bool - procedure2_register_primitives(obj rcx, - //obj mm, - //StringTable * stbl, - InstallSink sink, - InstallFlags flags) - { - obj mm = rcx.allocator(); - StringTable * stbl = rcx.stringtable(); - - scope log(XO_DEBUG(true)); - - bool ok = true; - - ok = ok & install_aux(sink, ObjectPrimitives::make_cwd_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_dict_lookup_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm (mm, stbl), flags); - ok = ok & install_aux(sink, ObjectPrimitives::make_fn_n_args_pm (mm, stbl), flags); - - return ok; - } - - } /*namespace scm*/ -} /*namespace xo*/ - -/* end procedure2_register_primitives.cpp */ diff --git a/src/procedure2/procedure2_register_types.cpp b/src/procedure2/procedure2_register_types.cpp deleted file mode 100644 index 0cf6206..0000000 --- a/src/procedure2/procedure2_register_types.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/** @file procedure2_register_types.cpp - * - * @author Roland Conybeare, Jan 2026 - **/ - -#include "procedure2_register_types.hpp" - -#include "Primitive_gco_0.hpp" -#include "detail/IGCObject_DPrimitive_gco_1_gco.hpp" -#include "detail/IGCObject_DPrimitive_gco_2_gco_gco.hpp" -#include "detail/IGCObject_DPrimitive_gco_2_dict_string.hpp" -#include "detail/IGCObject_DPrimitive_gco_3_dict_string_gco.hpp" -#include - -namespace xo { - using xo::mm::ACollector; - using xo::mm::AGCObject; - using xo::facet::impl_for; - using xo::scope; - - namespace scm { - bool - procedure2_register_types(obj gc) - { - scope log(XO_DEBUG(true)); - - bool ok = true; - - // (note: don't currently intend to support AGCObject for DSimpleRcx) - - ok &= gc.install_type(impl_for()); - ok &= gc.install_type(impl_for()); - ok &= gc.install_type(impl_for()); - ok &= gc.install_type(impl_for()); - ok &= gc.install_type(impl_for()); - - return ok; - } - } -} /*namespace xo*/ - -/* end procedure2_register_types.cpp */