diff --git a/xo-interpreter2/include/xo/interpreter2/interpreter2_register_primitives.hpp b/xo-interpreter2/include/xo/interpreter2/interpreter2_register_primitives.hpp index 5d3f0fb1..b2e1063b 100644 --- a/xo-interpreter2/include/xo/interpreter2/interpreter2_register_primitives.hpp +++ b/xo-interpreter2/include/xo/interpreter2/interpreter2_register_primitives.hpp @@ -11,8 +11,9 @@ namespace xo { namespace scm { /** Register primitive-factories **/ - bool interpreter2_register_primitives(obj gc, - StringTable * stbl, + bool interpreter2_register_primitives(obj rcx, + //xo::mm::AAllocator> gc, + //StringTable * stbl, InstallSink sink, InstallFlags flags); } diff --git a/xo-interpreter2/src/interpreter2/interpreter2_register_primitives.cpp b/xo-interpreter2/src/interpreter2/interpreter2_register_primitives.cpp index f0da9a8e..dba9337c 100644 --- a/xo-interpreter2/src/interpreter2/interpreter2_register_primitives.cpp +++ b/xo-interpreter2/src/interpreter2/interpreter2_register_primitives.cpp @@ -51,16 +51,22 @@ namespace xo { } bool - interpreter2_register_primitives(obj mm, - StringTable * stbl, + interpreter2_register_primitives(obj rcx, + //obj mm, + //StringTable * stbl, InstallSink sink, InstallFlags flags) { scope log(XO_DEBUG(true)); + obj mm = rcx.allocator(); + StringTable * stbl = rcx.stringtable(); + bool ok = true; - ok = ok & install_aux(sink, VsmPrimitives::make_report_memory_use_pm(mm, stbl), flags); + ok = ok & install_aux(sink, + VsmPrimitives::make_report_memory_use_pm(mm, stbl), + flags); return ok; } diff --git a/xo-numeric/include/xo/numeric/numeric_register_primitives.hpp b/xo-numeric/include/xo/numeric/numeric_register_primitives.hpp index c4b0bd7b..5c68a51d 100644 --- a/xo-numeric/include/xo/numeric/numeric_register_primitives.hpp +++ b/xo-numeric/include/xo/numeric/numeric_register_primitives.hpp @@ -11,8 +11,9 @@ namespace xo { namespace scm { /** Register primitive factories with primitive registry **/ - bool numeric_register_primitives(obj mm, - StringTable * stbl, + bool numeric_register_primitives(obj rcx, + //obj mm, + //StringTable * stbl, InstallSink sink, InstallFlags flags); } diff --git a/xo-numeric/src/numeric/numeric_register_primitives.cpp b/xo-numeric/src/numeric/numeric_register_primitives.cpp index 6150df9f..08cb0fc9 100644 --- a/xo-numeric/src/numeric/numeric_register_primitives.cpp +++ b/xo-numeric/src/numeric/numeric_register_primitives.cpp @@ -51,10 +51,12 @@ namespace xo { } bool - numeric_register_primitives(obj mm, StringTable * stbl, + numeric_register_primitives(obj rcx, + //obj mm, StringTable * stbl, InstallSink sink, InstallFlags flags) { - (void)stbl; + obj mm = rcx.allocator(); + StringTable * stbl = rcx.stringtable(); scope log(XO_DEBUG(true)); diff --git a/xo-procedure2/include/xo/procedure2/PrimitiveRegistry.hpp b/xo-procedure2/include/xo/procedure2/PrimitiveRegistry.hpp index a4e24e2a..dd4e70b9 100644 --- a/xo-procedure2/include/xo/procedure2/PrimitiveRegistry.hpp +++ b/xo-procedure2/include/xo/procedure2/PrimitiveRegistry.hpp @@ -60,8 +60,9 @@ namespace xo { * Allocates primitives using memory from mm, delivering them * to InstallSink sink. **/ - using InstallSource = std::function mm, - StringTable * stbl, + using InstallSource = std::function rcx, + //obj mm, + //StringTable * stbl, InstallSink sink, InstallFlags flags)>; @@ -76,8 +77,9 @@ namespace xo { * with global strings in @p stbl. * delivering each primitive to @p sink. **/ - bool install_primitives(obj mm, - StringTable * stbl, + bool install_primitives(obj rcx, + //obj mm, + //StringTable * stbl, InstallSink sink, InstallFlags flags); diff --git a/xo-procedure2/include/xo/procedure2/procedure2_register_primitives.hpp b/xo-procedure2/include/xo/procedure2/procedure2_register_primitives.hpp index 396f645f..3b4fa61d 100644 --- a/xo-procedure2/include/xo/procedure2/procedure2_register_primitives.hpp +++ b/xo-procedure2/include/xo/procedure2/procedure2_register_primitives.hpp @@ -11,8 +11,9 @@ namespace xo { namespace scm { /** Register primitive-factories **/ - bool procedure2_register_primitives(obj gc, - StringTable * stbl, + bool procedure2_register_primitives(obj rcx, + //obj gc, + //StringTable * stbl, InstallSink sink, InstallFlags flags); } diff --git a/xo-procedure2/src/procedure2/PrimitiveRegistry.cpp b/xo-procedure2/src/procedure2/PrimitiveRegistry.cpp index 420a435e..ef5cb8c6 100644 --- a/xo-procedure2/src/procedure2/PrimitiveRegistry.cpp +++ b/xo-procedure2/src/procedure2/PrimitiveRegistry.cpp @@ -25,8 +25,9 @@ namespace xo { } bool - PrimitiveRegistry::install_primitives(obj mm, - StringTable * stbl, + PrimitiveRegistry::install_primitives(obj rcx, + //obj mm, + //StringTable * stbl, InstallSink sink, InstallFlags flags) { @@ -41,7 +42,7 @@ namespace xo { for (const auto & fn : init_seq_v_) { log && log("do install fn (", i+1, "/", n, ")"); - ok = ok & fn(mm, stbl, sink, flags); + ok = ok & fn(rcx, /*mm, stbl,*/ sink, flags); ++i; } diff --git a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp index 29f3be19..7dd1513b 100644 --- a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp +++ b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp @@ -53,11 +53,15 @@ namespace xo { } bool - procedure2_register_primitives(obj mm, - StringTable * stbl, + 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; diff --git a/xo-reader2/src/reader2/ParserStateMachine.cpp b/xo-reader2/src/reader2/ParserStateMachine.cpp index 6ab2097b..16871d22 100644 --- a/xo-reader2/src/reader2/ParserStateMachine.cpp +++ b/xo-reader2/src/reader2/ParserStateMachine.cpp @@ -9,6 +9,7 @@ #include "ToplevelSeqSsm.hpp" #include "DefineSsm.hpp" #include +#include #include #include #include @@ -26,6 +27,7 @@ namespace xo { using xo::print::APrintable; using xo::reflect::TypeDescr; using xo::facet::FacetRegistry; + using xo::facet::with_facet; namespace scm { namespace { @@ -46,7 +48,9 @@ namespace xo { DGlobalEnv * env = DGlobalEnv::_make(mm, global_symtab); - InstallSink sink = ([env, mm, &stringtable, &log] + DSimpleRcx rcx(mm, &stringtable); + + InstallSink sink = ([env, rcx, &log] (std::string_view name, TypeDescr fn_td, obj pm, @@ -57,11 +61,11 @@ namespace xo { obj pm_gco = pm.to_facet(); const DUniqueString * sym - = stringtable.intern(name); + = rcx.stringtable()->intern(name); log && log("upsert", xtag("sym", std::string_view(*sym))); - env->_upsert_value(mm, + env->_upsert_value(rcx.allocator(), sym, fn_td, pm_gco); @@ -70,8 +74,7 @@ namespace xo { }); PrimitiveRegistry::instance() - .install_primitives(mm, - &stringtable, + .install_primitives(with_facet::mkobj(&rcx), sink, pm_install_flags);