From 0170b8dacfb35c5b554fdd32f49fc074998b78b8 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 8 Feb 2026 23:32:20 -0500 Subject: [PATCH] xo-interpreter2 stack: lambda expr -> closure runs in VSM utest --- .../include/xo/expression2/DLambdaExpr.hpp | 11 +++- .../include/xo/expression2/IfElseExpr.hpp | 13 ++++ .../include/xo/expression2/UniqueString.hpp | 12 ++++ xo-expression2/src/expression2/CMakeLists.txt | 15 ++--- .../src/expression2/DIfElseExpr.cpp | 54 ++++++++-------- .../src/expression2/DLambdaExpr.cpp | 51 +++++++++++++-- .../src/expression2/DLocalSymtab.cpp | 49 ++++++++++++++- .../expression2_register_facets.cpp | 28 +++------ xo-interpreter2/CMakeLists.txt | 12 ++++ .../idl/IPrintable_DLocalEnv.json5 | 13 ++++ .../include/xo/interpreter2/DLocalEnv.hpp | 6 ++ .../include/xo/interpreter2/LocalEnv.hpp | 2 +- .../interpreter2/VirtualSchematikaMachine.hpp | 1 + .../detail/IPrintable_DLocalEnv.hpp | 62 +++++++++++++++++++ .../src/interpreter2/CMakeLists.txt | 4 +- xo-interpreter2/src/interpreter2/DClosure.cpp | 19 ++++++ .../src/interpreter2/DLocalEnv.cpp | 16 +++++ .../src/interpreter2/IPrintable_DLocalEnv.cpp | 28 +++++++++ .../interpreter2/VirtualSchematikaMachine.cpp | 7 +-- .../interpreter2_register_facets.cpp | 6 ++ .../utest/VirtualSchematikaMachine.test.cpp | 16 ++--- xo-object2/src/object2/DArray.cpp | 6 +- 22 files changed, 358 insertions(+), 73 deletions(-) create mode 100644 xo-expression2/include/xo/expression2/IfElseExpr.hpp create mode 100644 xo-expression2/include/xo/expression2/UniqueString.hpp create mode 100644 xo-interpreter2/idl/IPrintable_DLocalEnv.json5 create mode 100644 xo-interpreter2/include/xo/interpreter2/detail/IPrintable_DLocalEnv.hpp create mode 100644 xo-interpreter2/src/interpreter2/IPrintable_DLocalEnv.cpp diff --git a/xo-expression2/include/xo/expression2/DLambdaExpr.hpp b/xo-expression2/include/xo/expression2/DLambdaExpr.hpp index 2a0cc2c3..b21a37ce 100644 --- a/xo-expression2/include/xo/expression2/DLambdaExpr.hpp +++ b/xo-expression2/include/xo/expression2/DLambdaExpr.hpp @@ -20,6 +20,7 @@ namespace xo { **/ class DLambdaExpr { public: + using ACollector = xo::mm::ACollector; using AAllocator = xo::mm::AAllocator; using TypeDescr = xo::reflect::TypeDescr; using ppindentinfo = xo::print::ppindentinfo; @@ -78,6 +79,14 @@ namespace xo { TypeDescr valuetype() const noexcept; void assign_valuetype(TypeDescr td) noexcept; + ///@} + /** @defgroup scm-lambdaexpr-gcobject-facet **/ + ///@{ + + std::size_t shallow_size() const noexcept; + DLambdaExpr * shallow_copy(obj mm) const noexcept; + std::size_t forward_children(obj gc) noexcept; + ///@} /** @defgroup scm-lambdaexpr-printable-facet **/ ///@{ @@ -95,7 +104,7 @@ namespace xo { /** name for this lambda (generated if necessary) **/ const DUniqueString * name_ = nullptr; -#ifdef NOT_YET +#ifdef NOT_YET // when enabled, need to visit forward_children() /** e.g. * i64(f64,string) * for function of two arguments with types (f64, string) respectively, diff --git a/xo-expression2/include/xo/expression2/IfElseExpr.hpp b/xo-expression2/include/xo/expression2/IfElseExpr.hpp new file mode 100644 index 00000000..901062b2 --- /dev/null +++ b/xo-expression2/include/xo/expression2/IfElseExpr.hpp @@ -0,0 +1,13 @@ +/** @file IfElseExpr.hpp + * + * @author Roland Conybeare, Feb 2026 + **/ + +#pragma once + +#include "DIfElseExpr.hpp" +#include "detail/IExpression_DIfElseExpr.hpp" +#include "detail/IGCObject_DIfElseExpr.hpp" +#include "detail/IPrintable_DIfElseExpr.hpp" + +/* end IfElseExpr.hpp */ diff --git a/xo-expression2/include/xo/expression2/UniqueString.hpp b/xo-expression2/include/xo/expression2/UniqueString.hpp new file mode 100644 index 00000000..90cd1cd2 --- /dev/null +++ b/xo-expression2/include/xo/expression2/UniqueString.hpp @@ -0,0 +1,12 @@ +/** @file UniqueString.hpp + * + * @author Roland Conybeare, Feb 2026 + **/ + +#pragma once + +#include "DUniqueString.hpp" +#include "detail/IGCObject_DUniqueString.hpp" +#include "detail/IPrintable_DUniqueString.hpp" + +/* end UniqueString.hpp */ diff --git a/xo-expression2/src/expression2/CMakeLists.txt b/xo-expression2/src/expression2/CMakeLists.txt index 45b5a06e..749910e4 100644 --- a/xo-expression2/src/expression2/CMakeLists.txt +++ b/xo-expression2/src/expression2/CMakeLists.txt @@ -10,15 +10,13 @@ set(SELF_SRCS DVariable.cpp DVarRef.cpp DDefineExpr.cpp - DLambdaExpr.cpp DApplyExpr.cpp - DIfElseExpr.cpp - DSequenceExpr.cpp TypeRef.cpp Binding.cpp IExpression_Any.cpp + ISymbolTable_Any.cpp IExpression_DConstant.cpp IGCObject_DConstant.cpp @@ -39,25 +37,28 @@ set(SELF_SRCS IGCObject_DApplyExpr.cpp IPrintable_DApplyExpr.cpp + DLambdaExpr.cpp IExpression_DLambdaExpr.cpp + IGCObject_DLambdaExpr.cpp IPrintable_DLambdaExpr.cpp + DIfElseExpr.cpp IExpression_DIfElseExpr.cpp IGCObject_DIfElseExpr.cpp IPrintable_DIfElseExpr.cpp + DSequenceExpr.cpp IExpression_DSequenceExpr.cpp IGCObject_DSequenceExpr.cpp IPrintable_DSequenceExpr.cpp DLocalSymtab.cpp - DGlobalSymtab.cpp - - ISymbolTable_Any.cpp - ISymbolTable_DLocalSymtab.cpp + IGCObject_DLocalSymtab.cpp IPrintable_DLocalSymtab.cpp + DGlobalSymtab.cpp + StringTable.cpp DUniqueString.cpp diff --git a/xo-expression2/src/expression2/DIfElseExpr.cpp b/xo-expression2/src/expression2/DIfElseExpr.cpp index 631be466..6a0b053c 100644 --- a/xo-expression2/src/expression2/DIfElseExpr.cpp +++ b/xo-expression2/src/expression2/DIfElseExpr.cpp @@ -80,32 +80,6 @@ namespace xo { typeref_.resolve(td); } - bool - DIfElseExpr::pretty(const ppindentinfo & ppii) const - { - auto test - = FacetRegistry::instance().try_variant(test_); - auto when_true - = FacetRegistry::instance().try_variant(when_true_); - auto when_false - = FacetRegistry::instance().try_variant(when_false_); - - bool test_present = test; - bool when_true_present = when_true; - bool when_false_present = when_false; - - return ppii.pps()->pretty_struct - (ppii, - "DIfElseExpr", - refrtag("typeref", typeref_), - refrtag("test", test, test_present), - refrtag("when_true", when_true, when_true_present), - refrtag("when_false", when_false, when_false_present)); - } - // GCObject facet std::size_t @@ -145,6 +119,34 @@ namespace xo { return shallow_size(); } + // ----- printable facet ----- + + bool + DIfElseExpr::pretty(const ppindentinfo & ppii) const + { + auto test + = FacetRegistry::instance().try_variant(test_); + auto when_true + = FacetRegistry::instance().try_variant(when_true_); + auto when_false + = FacetRegistry::instance().try_variant(when_false_); + + bool test_present = test; + bool when_true_present = when_true; + bool when_false_present = when_false; + + return ppii.pps()->pretty_struct + (ppii, + "DIfElseExpr", + refrtag("typeref", typeref_), + refrtag("test", test, test_present), + refrtag("when_true", when_true, when_true_present), + refrtag("when_false", when_false, when_false_present)); + } + // ---------------------------------------------------------------- #ifdef NOPE diff --git a/xo-expression2/src/expression2/DLambdaExpr.cpp b/xo-expression2/src/expression2/DLambdaExpr.cpp index 080e49b5..56d55c03 100644 --- a/xo-expression2/src/expression2/DLambdaExpr.cpp +++ b/xo-expression2/src/expression2/DLambdaExpr.cpp @@ -3,16 +3,16 @@ * @author Roland Conybeare, Jan 2026 **/ -#include "DLambdaExpr.hpp" -#include "detail/IExpression_DLambdaExpr.hpp" -#include "DLocalSymtab.hpp" -#include "symtab/IPrintable_DLocalSymtab.hpp" +#include "LambdaExpr.hpp" +#include "LocalSymtab.hpp" +#include "UniqueString.hpp" #include #include #include #include namespace xo { + using xo::mm::AGCObject; using xo::print::APrintable; using xo::facet::FacetRegistry; using xo::reflect::TypeDescr; @@ -134,6 +134,49 @@ namespace xo { typeref_.resolve(td); } + std::size_t + DLambdaExpr::shallow_size() const noexcept { + return sizeof(DLambdaExpr); + } + + DLambdaExpr * + DLambdaExpr::shallow_copy(obj mm) const noexcept { + DLambdaExpr * copy = (DLambdaExpr *)mm.alloc_copy((std::byte *)this); + + if (copy) { + *copy = *this; + } + + return copy; + } + + std::size_t + DLambdaExpr::forward_children(obj gc) noexcept { + { + auto iface = xo::facet::impl_for(); + gc.forward_inplace(&iface, (void **)(&name_)); + } + + // type_name_str_ + + { + auto iface = xo::facet::impl_for(); + gc.forward_inplace(&iface, (void **)(&local_symtab_)); + } + + { + auto iface = body_expr_.to_facet().iface(); + gc.forward_inplace(iface, (void **)(&body_expr_)); + } + + // xxx free_var_set + // xxx captured_var_set + // xxx layer_var_map + // xxx nested_lambda_map + + return shallow_size(); + } + bool DLambdaExpr::pretty(const ppindentinfo & ppii) const { diff --git a/xo-expression2/src/expression2/DLocalSymtab.cpp b/xo-expression2/src/expression2/DLocalSymtab.cpp index 85631d34..cf9c8459 100644 --- a/xo-expression2/src/expression2/DLocalSymtab.cpp +++ b/xo-expression2/src/expression2/DLocalSymtab.cpp @@ -3,13 +3,14 @@ * @author Roland Conybeare, Jan 2026 **/ -#include "DLocalSymtab.hpp" +#include "LocalSymtab.hpp" +#include "Variable.hpp" #include "DUniqueString.hpp" -#include #include #include namespace xo { + using xo::mm::AGCObject; using xo::print::APrintable; using xo::facet::typeseq; using xo::print::ppstate; @@ -77,6 +78,50 @@ namespace xo { return Binding(); } + // ----- gcobject facet ----- + + std::size_t + DLocalSymtab::shallow_size() const noexcept + { + return (sizeof(DLocalSymtab) + (capacity_ * sizeof(Slot))); + } + + DLocalSymtab * + DLocalSymtab::shallow_copy(obj mm) const noexcept + { + DLocalSymtab * copy = (DLocalSymtab *)mm.alloc_copy((std::byte *)this); + + if (copy) { + *copy = *this; + + ::memcpy((void*)&(copy->slots_[0]), + (void*)&(slots_[0]), + capacity_ * sizeof(Slot)); + } + + return copy; + } + + std::size_t + DLocalSymtab::forward_children(obj gc) noexcept + { + { + auto iface + = xo::facet::impl_for(); + gc.forward_inplace(&iface, (void **)(&parent_)); + } + + auto iface + = xo::facet::impl_for(); + for (size_type i = 0; i < size_; ++i) { + gc.forward_inplace(&iface, (void **)(&(slots_[i].var_))); + } + + return shallow_size(); + } + + // ----- printable facet ----- + bool DLocalSymtab::pretty(const ppindentinfo & ppii) const { diff --git a/xo-expression2/src/expression2/expression2_register_facets.cpp b/xo-expression2/src/expression2/expression2_register_facets.cpp index 67944a08..16bfac2a 100644 --- a/xo-expression2/src/expression2/expression2_register_facets.cpp +++ b/xo-expression2/src/expression2/expression2_register_facets.cpp @@ -17,28 +17,16 @@ #include #include - -#include -#include -#include - +#include #include - -#include -//#include -#include - -#include -#include -#include +#include +#include #include #include #include -#include -//#include -#include +#include #include #include @@ -70,6 +58,10 @@ namespace xo { // +- IfElseExpr // \- SequenceExpr + // SymbolTable + // +- LocalSymtab + // \- GlobalSymtab + FacetRegistry::register_impl(); FacetRegistry::register_impl(); FacetRegistry::register_impl(); @@ -91,7 +83,7 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); - //FacetRegistry::register_impl(); + FacetRegistry::register_impl(); FacetRegistry::register_impl(); FacetRegistry::register_impl(); @@ -103,7 +95,7 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); - //FacetRegistry::register_impl(); + FacetRegistry::register_impl(); FacetRegistry::register_impl(); log && log(xtag("DUniqueString.tseq", typeseq::id())); diff --git a/xo-interpreter2/CMakeLists.txt b/xo-interpreter2/CMakeLists.txt index b0b3c63a..7bda6388 100644 --- a/xo-interpreter2/CMakeLists.txt +++ b/xo-interpreter2/CMakeLists.txt @@ -127,6 +127,18 @@ xo_add_genfacetimpl( OUTPUT_CPP_DIR src/interpreter2 ) +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-interpreter2-facetimpl-printable-localenv + FACET_PKG xo_printable2 + FACET Printable + REPR LocalEnv + INPUT idl/IPrintable_DLocalEnv.json5 + OUTPUT_HPP_DIR include/xo/interpreter2 + OUTPUT_IMPL_SUBDIR detail + OUTPUT_CPP_DIR src/interpreter2 +) + # ---------------------------------------------------------------- xo_add_genfacet_all(xo-interpreter2-genfacet-all) diff --git a/xo-interpreter2/idl/IPrintable_DLocalEnv.json5 b/xo-interpreter2/idl/IPrintable_DLocalEnv.json5 new file mode 100644 index 00000000..0302834d --- /dev/null +++ b/xo-interpreter2/idl/IPrintable_DLocalEnv.json5 @@ -0,0 +1,13 @@ +{ + mode: "implementation", + includes: [ "", + "" ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/Printable.json5", + brief: "provide APrintable interface for DLocalEnv", + using_doxygen: true, + repr: "DLocalEnv", + doc: [ "implement APrintable for DLocalEnv" ], +} diff --git a/xo-interpreter2/include/xo/interpreter2/DLocalEnv.hpp b/xo-interpreter2/include/xo/interpreter2/DLocalEnv.hpp index 5563fb3a..234db71f 100644 --- a/xo-interpreter2/include/xo/interpreter2/DLocalEnv.hpp +++ b/xo-interpreter2/include/xo/interpreter2/DLocalEnv.hpp @@ -58,6 +58,12 @@ namespace xo { std::size_t forward_children(obj gc) noexcept; ///@} + /** @defgroup scm-localenv-printable-facet **/ + ///@{ + + bool pretty(const ppindentinfo & ppii) const noexcept; + + ///@} private: /** parent environment (from closure) **/ diff --git a/xo-interpreter2/include/xo/interpreter2/LocalEnv.hpp b/xo-interpreter2/include/xo/interpreter2/LocalEnv.hpp index a709e006..8955e35d 100644 --- a/xo-interpreter2/include/xo/interpreter2/LocalEnv.hpp +++ b/xo-interpreter2/include/xo/interpreter2/LocalEnv.hpp @@ -7,6 +7,6 @@ #include "DLocalEnv.hpp" #include "detail/IGCObject_DLocalEnv.hpp" -//#include "detail/IPrintable_DLocalEnv.hpp" +#include "detail/IPrintable_DLocalEnv.hpp" /* end LocalEnv.hpp */ diff --git a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp index 1aebed2c..f28c5bef 100644 --- a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp +++ b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp @@ -216,6 +216,7 @@ namespace xo { * in execution **/ DLocalEnv * local_env_ = nullptr; + protected: // temporarily, to appease compiler /** environment pointer. Maintains bindings * for global variables. diff --git a/xo-interpreter2/include/xo/interpreter2/detail/IPrintable_DLocalEnv.hpp b/xo-interpreter2/include/xo/interpreter2/detail/IPrintable_DLocalEnv.hpp new file mode 100644 index 00000000..c0ddb7f8 --- /dev/null +++ b/xo-interpreter2/include/xo/interpreter2/detail/IPrintable_DLocalEnv.hpp @@ -0,0 +1,62 @@ +/** @file IPrintable_DLocalEnv.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IPrintable_DLocalEnv.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/IPrintable_DLocalEnv.json5] + **/ + +#pragma once + +#include "Printable.hpp" +#include +#include +#include "DLocalEnv.hpp" + +namespace xo { namespace scm { class IPrintable_DLocalEnv; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::print::IPrintable_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class IPrintable_DLocalEnv + **/ + class IPrintable_DLocalEnv { + public: + /** @defgroup scm-printable-dlocalenv-type-traits **/ + ///@{ + using ppindentinfo = xo::print::APrintable::ppindentinfo; + using Copaque = xo::print::APrintable::Copaque; + using Opaque = xo::print::APrintable::Opaque; + ///@} + /** @defgroup scm-printable-dlocalenv-methods **/ + ///@{ + // const methods + /** Pretty-printing support for this object. +See [xo-indentlog/xo/indentlog/pretty.hpp] **/ + static bool pretty(const DLocalEnv & self, const ppindentinfo & ppii); + + // non-const methods + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-interpreter2/src/interpreter2/CMakeLists.txt b/xo-interpreter2/src/interpreter2/CMakeLists.txt index e7493775..373f6138 100644 --- a/xo-interpreter2/src/interpreter2/CMakeLists.txt +++ b/xo-interpreter2/src/interpreter2/CMakeLists.txt @@ -17,10 +17,12 @@ set(SELF_SRCS IPrintable_DVsmApplyFrame.cpp DClosure.cpp - IGCObject_DClosure.cpp IProcedure_DClosure.cpp + IGCObject_DClosure.cpp + IPrintable_DClosure.cpp IGCObject_DLocalEnv.cpp + IPrintable_DLocalEnv.cpp DLocalEnv.cpp VsmInstr.cpp diff --git a/xo-interpreter2/src/interpreter2/DClosure.cpp b/xo-interpreter2/src/interpreter2/DClosure.cpp index b1868950..d1baa172 100644 --- a/xo-interpreter2/src/interpreter2/DClosure.cpp +++ b/xo-interpreter2/src/interpreter2/DClosure.cpp @@ -10,6 +10,7 @@ namespace xo { using xo::mm::AGCObject; + using xo::print::APrintable; namespace scm { @@ -69,6 +70,24 @@ namespace xo { return shallow_size(); } + // ----- printable facet ----- + + bool + DClosure::pretty(const ppindentinfo & ppii) const + { + obj lambda_pr(const_cast(lambda_)); + obj env_pr(const_cast(env_)); + + bool lambda_present = lambda_pr; + bool env_present = env_pr; + + return ppii.pps()->pretty_struct + (ppii, + "DClosure", + refrtag("lambda", lambda_pr, lambda_present), + refrtag("env", env_pr, env_present)); + } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-interpreter2/src/interpreter2/DLocalEnv.cpp b/xo-interpreter2/src/interpreter2/DLocalEnv.cpp index 9ba65085..9ee0911a 100644 --- a/xo-interpreter2/src/interpreter2/DLocalEnv.cpp +++ b/xo-interpreter2/src/interpreter2/DLocalEnv.cpp @@ -121,6 +121,22 @@ namespace xo { return shallow_size(); } + // ----- printable facet ----- + + bool + DLocalEnv::pretty(const ppindentinfo & ppii) const noexcept + { + // print local bindings, perhaps + // symtab_ + // args_ + + return ppii.pps()->pretty_struct + (ppii, + "DLocalEnv", + refrtag("n_args", args_->size()) + ); + } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-interpreter2/src/interpreter2/IPrintable_DLocalEnv.cpp b/xo-interpreter2/src/interpreter2/IPrintable_DLocalEnv.cpp new file mode 100644 index 00000000..bf701cb6 --- /dev/null +++ b/xo-interpreter2/src/interpreter2/IPrintable_DLocalEnv.cpp @@ -0,0 +1,28 @@ +/** @file IPrintable_DLocalEnv.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IPrintable_DLocalEnv.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/IPrintable_DLocalEnv.json5] +**/ + +#include "detail/IPrintable_DLocalEnv.hpp" + +namespace xo { + namespace scm { + auto + IPrintable_DLocalEnv::pretty(const DLocalEnv & self, const ppindentinfo & ppii) -> bool + { + return self.pretty(ppii); + } + + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end IPrintable_DLocalEnv.cpp */ diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index bfd5e09f..c62a723f 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -241,10 +241,9 @@ namespace xo { lambda.data(), local_env_); - this->value_ = obj(obj(closure)); - - // not implemented - assert(false); + this->value_ + = obj(obj(closure)); + this->pc_ = this->cont_; } void diff --git a/xo-interpreter2/src/interpreter2/interpreter2_register_facets.cpp b/xo-interpreter2/src/interpreter2/interpreter2_register_facets.cpp index 1953bf1d..22757a48 100644 --- a/xo-interpreter2/src/interpreter2/interpreter2_register_facets.cpp +++ b/xo-interpreter2/src/interpreter2/interpreter2_register_facets.cpp @@ -8,6 +8,7 @@ #include "VsmApplyFrame.hpp" #include "VsmEvalArgsFrame.hpp" #include "Closure.hpp" +#include "LocalEnv.hpp" #include #include @@ -37,9 +38,13 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); + FacetRegistry::register_impl(); FacetRegistry::register_impl(); FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + // Procedure // +- Primitive_gco_2_gco_gco // \- Closure @@ -49,6 +54,7 @@ namespace xo { log && log(xtag("DVsmApplyFrame.tseq", typeseq::id())); log && log(xtag("DVsmEvalArgsFrame.tseq", typeseq::id())); log && log(xtag("DClosure.tseq", typeseq::id())); + log && log(xtag("DLocalEnv.tseq", typeseq::id())); return true; } diff --git a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp index 90805af7..ee4ca351 100644 --- a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp +++ b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp @@ -4,10 +4,11 @@ **/ #include -#include -#include -#include -#include +#include +#include +//#include +#include +//#include #ifdef NOT_YET #include @@ -28,6 +29,7 @@ namespace xo { using xo::scm::VirtualSchematikaMachine; using xo::scm::VsmConfig; using xo::scm::VsmResultExt; + using xo::scm::DClosure; using xo::scm::DFloat; using xo::scm::DInteger; using xo::mm::AGCObject; @@ -196,17 +198,17 @@ namespace xo { bool eof_flag = false; vsm.begin_interactive_session(); - VsmResultExt res = vsm.read_eval_print(span_type::from_cstr("lambda (x : i64) -> i64 { x * x; };"), eof_flag); + VsmResultExt res = vsm.read_eval_print(span_type::from_cstr("lambda (x : i64) -> i64 { x * x; }"), eof_flag); REQUIRE(res.is_value()); REQUIRE(res.value()); log && log(xtag("res.tseq", res.value()->_typeseq())); - auto x = obj::from(*res.value()); + auto x = obj::from(*res.value()); REQUIRE(x); - REQUIRE(x.data()->value() == 1.570796325); + //REQUIRE(x.data()->value() == 1.570796325); REQUIRE(res.remaining_.size() == 1); REQUIRE(*res.remaining_.lo() == '\n'); diff --git a/xo-object2/src/object2/DArray.cpp b/xo-object2/src/object2/DArray.cpp index 401524e0..cee62bca 100644 --- a/xo-object2/src/object2/DArray.cpp +++ b/xo-object2/src/object2/DArray.cpp @@ -1,5 +1,5 @@ /** @file DArray.cpp -* + * * @author Roland Conybeare, Jan 2026 **/ @@ -121,7 +121,9 @@ namespace xo { constexpr auto c_obj_z = sizeof(obj); /* memcpy sufficient for obj */ - ::memcpy((void*)&(copy->elts_[0]), (void*)&(elts_[0]), capacity_ * c_obj_z); + ::memcpy((void*)&(copy->elts_[0]), + (void*)&(elts_[0]), + capacity_ * c_obj_z); } return copy;