diff --git a/xo-interpreter2/include/xo/interpreter2/DVsmRcx.hpp b/xo-interpreter2/include/xo/interpreter2/DVsmRcx.hpp index 3506206e..3d6632a3 100644 --- a/xo-interpreter2/include/xo/interpreter2/DVsmRcx.hpp +++ b/xo-interpreter2/include/xo/interpreter2/DVsmRcx.hpp @@ -1,2 +1,36 @@ /** @file DVsmRcx.hpp -n* + * + * @author Roland Conybeare, Feb 2026 + **/ + +#pragma once + +#include + +namespace xo { + namespace scm { + // see xo-interpreter/ VirtualSchematikaMachine.hpp + class VirtualSchematikaMachine; + + /** @brief Runtime context for schematika interpreter + * + * Provides allocator + **/ + class DVsmRcx { + public: + using AAllocator = xo::mm::AAllocator; + + public: + DVsmRcx(VirtualSchematikaMachine * vsm); + + obj allocator() const noexcept; + + private: + /** schematika interpreter **/ + VirtualSchematikaMachine * vsm_ = nullptr;; + }; + } /*namespace scm*/ +} /*namespace xo*/ + +/* end DVsmRcx.hpp */ + diff --git a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp index f28c5bef..af551d04 100644 --- a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp +++ b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp @@ -70,6 +70,9 @@ namespace xo { public: VirtualSchematikaMachine(const VsmConfig & config); + /** allocator for schematika data **/ + obj allocator() const noexcept; + /** visit vsm-owned memory pools; call visitor(info) for each **/ void visit_pools(const MemorySizeVisitor & visitor) const; diff --git a/xo-interpreter2/src/interpreter2/CMakeLists.txt b/xo-interpreter2/src/interpreter2/CMakeLists.txt index 373f6138..b02a4a7a 100644 --- a/xo-interpreter2/src/interpreter2/CMakeLists.txt +++ b/xo-interpreter2/src/interpreter2/CMakeLists.txt @@ -25,10 +25,9 @@ set(SELF_SRCS IPrintable_DLocalEnv.cpp DLocalEnv.cpp + DVsmRcx.cpp + VsmInstr.cpp - - - #IExpression_Any.cpp ) xo_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}) diff --git a/xo-interpreter2/src/interpreter2/DVsmRcx.cpp b/xo-interpreter2/src/interpreter2/DVsmRcx.cpp new file mode 100644 index 00000000..92e153bc --- /dev/null +++ b/xo-interpreter2/src/interpreter2/DVsmRcx.cpp @@ -0,0 +1,25 @@ +/** @file DVsmRcx.cpp + * + * @author Roland Conybeare, Feb 2026 + **/ + +#include "DVsmRcx.hpp" +#include "VirtualSchematikaMachine.hpp" + +namespace xo { + using xo::mm::AAllocator; + + namespace scm { + + DVsmRcx::DVsmRcx(VirtualSchematikaMachine * vsm) : vsm_{vsm} {} + + obj + DVsmRcx::allocator() const noexcept + { + return vsm_->allocator(); + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end DVsmRcx.cpp */ diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index c62a723f..2b07791f 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -24,6 +24,7 @@ namespace xo { using xo::print::ppstate_standalone; using xo::mm::AGCObject; //using xo::mm::MemorySizeInfo; // not used yet + using xo::mm::AAllocator; using xo::mm::DX1Collector; using xo::facet::FacetRegistry; using std::cout; @@ -42,6 +43,12 @@ namespace xo { // TODO: allocate global_env } + obj + VirtualSchematikaMachine::allocator() const noexcept + { + return mm_.to_op(); + } + void VirtualSchematikaMachine::visit_pools(const MemorySizeVisitor & visitor) const { diff --git a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp index ee4ca351..4213764b 100644 --- a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp +++ b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp @@ -225,6 +225,47 @@ namespace xo { vsm.visit_pools(visitor); } +#ifdef NOT_YET + TEST_CASE("VirtualSchematikaMachine-apply2", "[interpreter2][VSM]") + { + scope log(XO_DEBUG(true)); + + VsmConfig cfg; + VirtualSchematikaMachine vsm(cfg); + + bool eof_flag = false; + + vsm.begin_interactive_session(); + VsmResultExt res + = vsm.read_eval_print(span_type::from_cstr + ("(lambda (x : i64, y : i64) { x * y; })(13, 15);"), + eof_flag); + + REQUIRE(res.is_value()); + REQUIRE(res.value()); + + log && log(xtag("res.tseq", res.value()->_typeseq())); + + auto x = obj::from(*res.value()); + + REQUIRE(x); + //REQUIRE(x.data()->value() == 1.570796325); + + REQUIRE(res.remaining_.size() == 1); + REQUIRE(*res.remaining_.lo() == '\n'); + + auto visitor = [&log](const MemorySizeInfo & info) { + log && log(xtag("resource", info.resource_name_), + xtag("used", info.used_), + xtag("alloc", info.allocated_), + xtag("commit", info.committed_), + xtag("resv", info.reserved_)); + }; + + FacetRegistry::instance().visit_pools(visitor); + vsm.visit_pools(visitor); + } +#endif } /*namespace ut*/ } /*namespace xo*/