From ce5232efd923a2caa7d48128a71a2257cfc9233d Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 12 Feb 2026 18:46:43 -0500 Subject: [PATCH] xo-interpreter2 stack: work on runtime error representation [WIP] --- .../interpreter2/VirtualSchematikaMachine.hpp | 26 ++++-- .../include/xo/interpreter2/VsmConfig.hpp | 6 ++ xo-interpreter2/src/interpreter2/DClosure.cpp | 27 +++++- .../interpreter2/VirtualSchematikaMachine.cpp | 38 +++++++-- .../utest/VirtualSchematikaMachine.test.cpp | 2 - xo-object2/CMakeLists.txt | 28 +++++++ xo-object2/idl/IGCObject_DRuntimeError.json5 | 15 ++++ xo-object2/idl/IPrintable_DRuntimeError.json5 | 13 +++ .../include/xo/object2/DRuntimeError.hpp | 61 ++++++++++++++ .../include/xo/object2/RuntimeError.hpp | 12 +++ .../object2/error/IGCObject_DRuntimeError.hpp | 65 +++++++++++++++ .../error/IPrintable_DRuntimeError.hpp | 62 ++++++++++++++ xo-object2/src/object2/CMakeLists.txt | 40 +++++---- xo-object2/src/object2/DList.cpp | 4 +- xo-object2/src/object2/DRuntimeError.cpp | 82 +++++++++++++++++++ .../src/object2/IGCObject_DRuntimeError.cpp | 39 +++++++++ .../src/object2/IPrintable_DRuntimeError.cpp | 28 +++++++ .../src/object2/object2_register_facets.cpp | 5 ++ 18 files changed, 525 insertions(+), 28 deletions(-) create mode 100644 xo-object2/idl/IGCObject_DRuntimeError.json5 create mode 100644 xo-object2/idl/IPrintable_DRuntimeError.json5 create mode 100644 xo-object2/include/xo/object2/DRuntimeError.hpp create mode 100644 xo-object2/include/xo/object2/RuntimeError.hpp create mode 100644 xo-object2/include/xo/object2/error/IGCObject_DRuntimeError.hpp create mode 100644 xo-object2/include/xo/object2/error/IPrintable_DRuntimeError.hpp create mode 100644 xo-object2/src/object2/DRuntimeError.cpp create mode 100644 xo-object2/src/object2/IGCObject_DRuntimeError.cpp create mode 100644 xo-object2/src/object2/IPrintable_DRuntimeError.cpp diff --git a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp index af551d04..39421981 100644 --- a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp +++ b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp @@ -10,6 +10,7 @@ #include "VsmFrame.hpp" #include "DLocalEnv.hpp" #include "DGlobalEnv.hpp" +#include #include #include #include @@ -17,6 +18,10 @@ namespace xo { namespace scm { +#ifdef OBSOLETE // see DVsmError + // TODO: move error to collected space? + // or special arena? + // struct EvaluationError { /** source location (in vsm implementation) at which error identified **/ std::string_view src_function_; @@ -24,6 +29,7 @@ namespace xo { std::string_view error_description_; // TODO: info about location in schematika source }; +#endif /** similar to @ref xo::scm::ReaderResult **/ struct VsmResult { @@ -31,17 +37,17 @@ namespace xo { using span_type = xo::mm::span; VsmResult() = default; - VsmResult(obj value) : result_{value} {} - VsmResult(TokenizerError err) : result_{err} {} + explicit VsmResult(obj value) : result_{value} {} + explicit VsmResult(TokenizerError err) : result_{err} {} bool is_value() const { return std::holds_alternative>(result_); } bool is_tk_error() const { return std::holds_alternative(result_); } - bool is_eval_error() const { return std::holds_alternative(result_); } + bool is_eval_error() const; const obj * value() const { return std::get_if>(&result_); } /** result of evaluating first expression encountered in input **/ - std::variant, TokenizerError, EvaluationError> result_; + std::variant, TokenizerError> result_; }; /** vsm result + reamining span **/ @@ -72,6 +78,8 @@ namespace xo { /** allocator for schematika data **/ obj allocator() const noexcept; + /** allocator for runtime errors **/ + obj error_allocator() const noexcept; /** visit vsm-owned memory pools; call visitor(info) for each **/ void visit_pools(const MemorySizeVisitor & visitor) const; @@ -185,11 +193,19 @@ namespace xo { /** configuration **/ VsmConfig config_; - /** allocator (likely collector) for + /** allocator (likely DX1Collector or similar) for * expressions and values **/ box mm_; + /** Sidecar allocator for error reporting. + * Separate to mitigate interference with @ref mm_ + * (separate memory so we can for example report + * an out-of-memory error). + * Likely DArena or similar + **/ + box error_mm_; + /** runtime context for this vsm. * For example, provides allocator to primitives **/ diff --git a/xo-interpreter2/include/xo/interpreter2/VsmConfig.hpp b/xo-interpreter2/include/xo/interpreter2/VsmConfig.hpp index 9d13ab8e..63c4b365 100644 --- a/xo-interpreter2/include/xo/interpreter2/VsmConfig.hpp +++ b/xo-interpreter2/include/xo/interpreter2/VsmConfig.hpp @@ -7,6 +7,7 @@ #include #include +#include namespace xo { namespace scm { @@ -14,6 +15,7 @@ namespace xo { **/ struct VsmConfig { using X1CollectorConfig = xo::mm::X1CollectorConfig; + using ArenaConfig = xo::mm::ArenaConfig; VsmConfig() = default; @@ -26,6 +28,10 @@ namespace xo { * TODO: may want to make CollectorConfig polymorphic **/ X1CollectorConfig x1_config_ = X1CollectorConfig().with_size(4*1024*1024); + /** Configuration for error allocator + * TODO: may want to make ArenaConfig polymorphic + **/ + ArenaConfig error_config_ = ArenaConfig().with_size(64*1024); }; } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-interpreter2/src/interpreter2/DClosure.cpp b/xo-interpreter2/src/interpreter2/DClosure.cpp index d1baa172..7fa3698c 100644 --- a/xo-interpreter2/src/interpreter2/DClosure.cpp +++ b/xo-interpreter2/src/interpreter2/DClosure.cpp @@ -6,6 +6,8 @@ #include "Closure.hpp" #include "LambdaExpr.hpp" #include "LocalEnv.hpp" +#include "VsmRcx.hpp" +#include #include namespace xo { @@ -33,7 +35,30 @@ namespace xo { DClosure::apply_nocheck(obj rcx, const DArray * args) { - (void)rcx; + scope log(XO_DEBUG(true)); + + auto vsm_rcx + = obj::from(rcx); + + log && log(xtag("vsm_rcx.data", (void*)vsm_rcx.data())); + + // let's try a not-implemented error + + // don't want to clutter Procedure facet, since it's + // lower-level than xo-interpreter2 + +#ifdef NOT_YET + // TODO: verify arguments against type signature. + // unless we have evidence that program is type correct + + int32_t n_args = this->n_args(); + + if (n_args != args->size()) { + // + } +#endif + + (void)args; assert(false); diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index 1569ccc0..abdfb168 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -15,6 +15,7 @@ //#include #include #include +#include #include #include #include @@ -27,12 +28,25 @@ namespace xo { //using xo::mm::MemorySizeInfo; // not used yet using xo::mm::AAllocator; using xo::mm::DX1Collector; + using xo::mm::DArena; using xo::facet::FacetRegistry; using std::cout; namespace scm { - // NOTE: using heap here for {DX1Collector, DVsmRcx} instances + bool + VsmResult::is_eval_error() const + { + if (std::holds_alternative>(result_)) { + auto err = obj::from(*(this->value())); + + return err; + } else { + return false; + } + } + + // NOTE: using heap here for {DX1Collector, DArena, DVsmRcx} instances // (though DX1Collector allocations will be from explictly mmap'd memory) // VirtualSchematikaMachine::VirtualSchematikaMachine(const VsmConfig & config) @@ -41,6 +55,14 @@ namespace xo { rcx_(box(new DVsmRcx(this))), reader_{config.rdr_config_, mm_.to_op()} { + { + DArena * arena = new DArena(); + assert(arena); + *arena = DArena::map(config_.error_config_); + + error_mm_.adopt(obj(arena)); + } + // TODO: allocate global_env } @@ -50,6 +72,12 @@ namespace xo { return mm_.to_op(); } + obj + VirtualSchematikaMachine::error_allocator() const noexcept + { + return error_mm_.to_op(); + } + void VirtualSchematikaMachine::visit_pools(const MemorySizeVisitor & visitor) const { @@ -113,7 +141,7 @@ namespace xo { { this->pc_ = VsmInstr::c_eval; this->expr_ = expr; - this->value_ = obj(); + this->value_ = VsmResult(obj()); this->cont_ = VsmInstr::c_halt; this->run(); @@ -200,7 +228,7 @@ namespace xo { auto expr = obj::from(expr_); - this->value_ = expr.data()->value(); + this->value_ = VsmResult(expr.data()->value()); this->pc_ = this->cont_; } @@ -250,7 +278,7 @@ namespace xo { local_env_); this->value_ - = obj(obj(closure)); + = VsmResult(obj(obj(closure))); this->pc_ = this->cont_; } @@ -341,7 +369,7 @@ namespace xo { // TODO: check argument types - this->value_ = fn_.apply_nocheck(rcx_.to_op(), args_); + this->value_ = VsmResult(fn_.apply_nocheck(rcx_.to_op(), args_)); this->pc_ = cont_; return; diff --git a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp index 4213764b..5ccef226 100644 --- a/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp +++ b/xo-interpreter2/utest/VirtualSchematikaMachine.test.cpp @@ -225,7 +225,6 @@ namespace xo { vsm.visit_pools(visitor); } -#ifdef NOT_YET TEST_CASE("VirtualSchematikaMachine-apply2", "[interpreter2][VSM]") { scope log(XO_DEBUG(true)); @@ -265,7 +264,6 @@ namespace xo { FacetRegistry::instance().visit_pools(visitor); vsm.visit_pools(visitor); } -#endif } /*namespace ut*/ } /*namespace xo*/ diff --git a/xo-object2/CMakeLists.txt b/xo-object2/CMakeLists.txt index 83b24223..2fc0ae29 100644 --- a/xo-object2/CMakeLists.txt +++ b/xo-object2/CMakeLists.txt @@ -208,6 +208,34 @@ xo_add_genfacetimpl( OUTPUT_CPP_DIR src/object2 ) +# ---------------------------------------------------------------- + +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-object2-facetimpl-printable-runtimeerror + FACET_PKG xo_printable2 + FACET Printable + REPR RuntimeError + INPUT idl/IPrintable_DRuntimeError.json5 + OUTPUT_HPP_DIR include/xo/object2 + OUTPUT_IMPL_SUBDIR error + OUTPUT_CPP_DIR src/object2 +) + +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-object2-facetimpl-gcobject-runtimeerror + FACET_PKG xo_gc + FACET GCObject + REPR RuntimeError + INPUT idl/IGCObject_DRuntimeError.json5 + OUTPUT_HPP_DIR include/xo/object2 + OUTPUT_IMPL_SUBDIR error + OUTPUT_CPP_DIR src/object2 +) + +# ---------------------------------------------------------------- + xo_add_genfacet_all(xo-object2-genfacet-all) # ---------------------------------------------------------------- diff --git a/xo-object2/idl/IGCObject_DRuntimeError.json5 b/xo-object2/idl/IGCObject_DRuntimeError.json5 new file mode 100644 index 00000000..9e416b24 --- /dev/null +++ b/xo-object2/idl/IGCObject_DRuntimeError.json5 @@ -0,0 +1,15 @@ +{ + mode: "implementation", + includes: [ +// "", +// "" + ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/GCObject.json5", + brief: "provide AGCObject interface for DRuntimeError", + using_doxygen: true, + repr: "DRuntimeError", + doc: [ "implement AGCObject for DRuntimeError" ], +} diff --git a/xo-object2/idl/IPrintable_DRuntimeError.json5 b/xo-object2/idl/IPrintable_DRuntimeError.json5 new file mode 100644 index 00000000..2d0f3eff --- /dev/null +++ b/xo-object2/idl/IPrintable_DRuntimeError.json5 @@ -0,0 +1,13 @@ +{ + mode: "implementation", + includes: [ "", + "" ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/Printable.json5", + brief: "provide APrintable interface for DRuntimeError", + using_doxygen: true, + repr: "DRuntimeError", + doc: [ "implement APrintable for DRuntimeError" ], +} diff --git a/xo-object2/include/xo/object2/DRuntimeError.hpp b/xo-object2/include/xo/object2/DRuntimeError.hpp new file mode 100644 index 00000000..9da75c68 --- /dev/null +++ b/xo-object2/include/xo/object2/DRuntimeError.hpp @@ -0,0 +1,61 @@ +/** @file DRuntimeError.hpp + * + * @author Roland Conybeare, Feb 2026 + **/ + +#pragma once + +#include "String.hpp" +#include + +namespace xo { + namespace scm { + + /** @brief representation for runtime errors + **/ + class DRuntimeError { + public: + using ACollector = xo::mm::ACollector; + using AAllocator = xo::mm::AAllocator; + using ppindentinfo = xo::print::ppindentinfo; + + public: + /** create instance using memory from allocator @p mm + * @p src_fn identifies the (c++) function/method in which + * error detercted. + * @p error_descr contains human-readable error message; + * will be copied by this function. + **/ + DRuntimeError * _make(obj mm, + DString * src_fn, + DString * error_descr); + + /** @defgroup scm-runtimeerror-printable-facet printable facet **/ + ///@{ + + bool pretty(const ppindentinfo & ppii) const; + + ///@} + /** @defgroup scm-runtimeerror-gcobject-facet gcobject facet **/ + ///@{ + + std::size_t shallow_size() const noexcept; + DRuntimeError * shallow_copy(obj mm) const noexcept; + std::size_t forward_children(obj gc) noexcept; + + ///@} + + private: + DRuntimeError(DString * src_fn, DString * error_descr); + + private: + /** source location at which error identified **/ + DString * src_function_ = nullptr; + /** error description (allocated from ErrorArena) **/ + DString * error_descr_ = nullptr; + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end DRuntimeError.hpp */ diff --git a/xo-object2/include/xo/object2/RuntimeError.hpp b/xo-object2/include/xo/object2/RuntimeError.hpp new file mode 100644 index 00000000..c2a5f65d --- /dev/null +++ b/xo-object2/include/xo/object2/RuntimeError.hpp @@ -0,0 +1,12 @@ +/** @file RuntimeError.hpp + * + * @author Roland Conybeare, Feb 2026 + **/ + +#pragma once + +#include "DRuntimeError.hpp" +#include "error/IGCObject_DRuntimeError.hpp" +#include "error/IPrintable_DRuntimeError.hpp" + +/* end RuntimeError.hpp */ diff --git a/xo-object2/include/xo/object2/error/IGCObject_DRuntimeError.hpp b/xo-object2/include/xo/object2/error/IGCObject_DRuntimeError.hpp new file mode 100644 index 00000000..3bb4d3d8 --- /dev/null +++ b/xo-object2/include/xo/object2/error/IGCObject_DRuntimeError.hpp @@ -0,0 +1,65 @@ +/** @file IGCObject_DRuntimeError.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IGCObject_DRuntimeError.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/IGCObject_DRuntimeError.json5] + **/ + +#pragma once + +#include "GCObject.hpp" +#include "DRuntimeError.hpp" + +namespace xo { namespace scm { class IGCObject_DRuntimeError; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::mm::IGCObject_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class IGCObject_DRuntimeError + **/ + class IGCObject_DRuntimeError { + public: + /** @defgroup scm-gcobject-druntimeerror-type-traits **/ + ///@{ + using size_type = xo::mm::AGCObject::size_type; + using AAllocator = xo::mm::AGCObject::AAllocator; + using ACollector = xo::mm::AGCObject::ACollector; + using Copaque = xo::mm::AGCObject::Copaque; + using Opaque = xo::mm::AGCObject::Opaque; + ///@} + /** @defgroup scm-gcobject-druntimeerror-methods **/ + ///@{ + // const methods + /** memory consumption for this instance **/ + static size_type shallow_size(const DRuntimeError & self) noexcept; + /** copy instance using allocator **/ + static Opaque shallow_copy(const DRuntimeError & self, obj mm) noexcept; + + // non-const methods + /** during GC: forward immdiate children **/ + static size_type forward_children(DRuntimeError & self, obj gc) noexcept; + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-object2/include/xo/object2/error/IPrintable_DRuntimeError.hpp b/xo-object2/include/xo/object2/error/IPrintable_DRuntimeError.hpp new file mode 100644 index 00000000..8b5a4d17 --- /dev/null +++ b/xo-object2/include/xo/object2/error/IPrintable_DRuntimeError.hpp @@ -0,0 +1,62 @@ +/** @file IPrintable_DRuntimeError.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IPrintable_DRuntimeError.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/IPrintable_DRuntimeError.json5] + **/ + +#pragma once + +#include "Printable.hpp" +#include +#include +#include "DRuntimeError.hpp" + +namespace xo { namespace scm { class IPrintable_DRuntimeError; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::print::IPrintable_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class IPrintable_DRuntimeError + **/ + class IPrintable_DRuntimeError { + public: + /** @defgroup scm-printable-druntimeerror-type-traits **/ + ///@{ + using ppindentinfo = xo::print::APrintable::ppindentinfo; + using Copaque = xo::print::APrintable::Copaque; + using Opaque = xo::print::APrintable::Opaque; + ///@} + /** @defgroup scm-printable-druntimeerror-methods **/ + ///@{ + // const methods + /** Pretty-printing support for this object. +See [xo-indentlog/xo/indentlog/pretty.hpp] **/ + static bool pretty(const DRuntimeError & self, const ppindentinfo & ppii); + + // non-const methods + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-object2/src/object2/CMakeLists.txt b/xo-object2/src/object2/CMakeLists.txt index 609290e8..a5595246 100644 --- a/xo-object2/src/object2/CMakeLists.txt +++ b/xo-object2/src/object2/CMakeLists.txt @@ -5,29 +5,41 @@ set(SELF_SRCS init_object2.cpp object2_register_types.cpp object2_register_facets.cpp + GCObjectConversion_DFloat.cpp GCObjectConversion_DInteger.cpp - IGCObject_DArray.cpp - IGCObject_DFloat.cpp - IGCObject_DBoolean.cpp - IGCObject_DInteger.cpp - IGCObject_DList.cpp - IGCObject_DString.cpp + ISequence_Any.cpp - ISequence_DArray.cpp - ISequence_DList.cpp - IPrintable_DArray.cpp - IPrintable_DList.cpp - IPrintable_DBoolean.cpp - IPrintable_DFloat.cpp - IPrintable_DInteger.cpp - IPrintable_DString.cpp + DArray.cpp + ISequence_DArray.cpp + IGCObject_DArray.cpp + IPrintable_DArray.cpp + DList.cpp + ISequence_DList.cpp + IGCObject_DList.cpp + IPrintable_DList.cpp + DFloat.cpp + IGCObject_DFloat.cpp + IPrintable_DFloat.cpp + DInteger.cpp + IGCObject_DInteger.cpp + IPrintable_DInteger.cpp + DBoolean.cpp + IGCObject_DBoolean.cpp + IPrintable_DBoolean.cpp + DString.cpp + IGCObject_DString.cpp + IPrintable_DString.cpp + + DRuntimeError.cpp + IGCObject_DRuntimeError.cpp + IPrintable_DRuntimeError.cpp ) xo_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}) diff --git a/xo-object2/src/object2/DList.cpp b/xo-object2/src/object2/DList.cpp index 81512218..73c8cd0d 100644 --- a/xo-object2/src/object2/DList.cpp +++ b/xo-object2/src/object2/DList.cpp @@ -148,6 +148,8 @@ namespace xo { } } + // ----- GCObject facet ------ + auto DList::shallow_size() const noexcept -> size_type { @@ -175,7 +177,7 @@ namespace xo { auto iface = xo::facet::impl_for(); gc.forward_inplace(&iface, (void **)(&rest_)); - return shallow_size(); + return this->shallow_size(); } } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-object2/src/object2/DRuntimeError.cpp b/xo-object2/src/object2/DRuntimeError.cpp new file mode 100644 index 00000000..972bd0c8 --- /dev/null +++ b/xo-object2/src/object2/DRuntimeError.cpp @@ -0,0 +1,82 @@ +/** @file DRuntimeError.cpp +* + * @author Roland Conybeare, Feb 2026 + **/ + +#include "DRuntimeError.hpp" + +namespace xo { + using xo::mm::AGCObject; + using xo::facet::typeseq; + + namespace scm { + + DRuntimeError * + DRuntimeError::_make(obj mm, + DString * src_fn, + DString * error_descr) + { + void * mem + = mm.alloc(typeseq::id(), + sizeof(DRuntimeError)); + + DRuntimeError * err + = new (mem) DRuntimeError(src_fn, error_descr); + + return err; + } + + DRuntimeError::DRuntimeError(DString * src_fn, + DString * error_descr) : src_function_{src_fn}, + error_descr_{error_descr} + {} + + // ----- GCObject facet ----- + + std::size_t + DRuntimeError::shallow_size() const noexcept + { + return sizeof(DRuntimeError); + } + + DRuntimeError * + DRuntimeError::shallow_copy(obj mm) const noexcept + { + DRuntimeError * copy = (DRuntimeError *)mm.alloc_copy((std::byte *)this); + + if (copy) + *copy = *this; + + return copy; + } + + std::size_t + DRuntimeError::forward_children(obj gc) noexcept + { + { + auto iface = xo::facet::impl_for(); + gc.forward_inplace(&iface, (void **)(&src_function_)); + } + + { + auto iface = xo::facet::impl_for(); + gc.forward_inplace(&iface, (void **)(&error_descr_)); + } + + return this->shallow_size(); + } + + // ----- Printable facet ----- + + bool + DRuntimeError::pretty(const ppindentinfo & ppii) const + { + return ppii.pps()->pretty_struct(ppii, + "DRuntimeError"); + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end DRuntimeError.cpp */ + diff --git a/xo-object2/src/object2/IGCObject_DRuntimeError.cpp b/xo-object2/src/object2/IGCObject_DRuntimeError.cpp new file mode 100644 index 00000000..d44c4359 --- /dev/null +++ b/xo-object2/src/object2/IGCObject_DRuntimeError.cpp @@ -0,0 +1,39 @@ +/** @file IGCObject_DRuntimeError.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IGCObject_DRuntimeError.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/IGCObject_DRuntimeError.json5] +**/ + +#include "error/IGCObject_DRuntimeError.hpp" + +namespace xo { + namespace scm { + auto + IGCObject_DRuntimeError::shallow_size(const DRuntimeError & self) noexcept -> size_type + { + return self.shallow_size(); + } + + auto + IGCObject_DRuntimeError::shallow_copy(const DRuntimeError & self, obj mm) noexcept -> Opaque + { + return self.shallow_copy(mm); + } + + auto + IGCObject_DRuntimeError::forward_children(DRuntimeError & self, obj gc) noexcept -> size_type + { + return self.forward_children(gc); + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end IGCObject_DRuntimeError.cpp */ diff --git a/xo-object2/src/object2/IPrintable_DRuntimeError.cpp b/xo-object2/src/object2/IPrintable_DRuntimeError.cpp new file mode 100644 index 00000000..eaf084ca --- /dev/null +++ b/xo-object2/src/object2/IPrintable_DRuntimeError.cpp @@ -0,0 +1,28 @@ +/** @file IPrintable_DRuntimeError.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IPrintable_DRuntimeError.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/IPrintable_DRuntimeError.json5] +**/ + +#include "error/IPrintable_DRuntimeError.hpp" + +namespace xo { + namespace scm { + auto + IPrintable_DRuntimeError::pretty(const DRuntimeError & self, const ppindentinfo & ppii) -> bool + { + return self.pretty(ppii); + } + + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end IPrintable_DRuntimeError.cpp */ diff --git a/xo-object2/src/object2/object2_register_facets.cpp b/xo-object2/src/object2/object2_register_facets.cpp index a910e276..c6358474 100644 --- a/xo-object2/src/object2/object2_register_facets.cpp +++ b/xo-object2/src/object2/object2_register_facets.cpp @@ -4,6 +4,7 @@ **/ #include "object2_register_facets.hpp" +#include "RuntimeError.hpp" #include #include @@ -66,6 +67,9 @@ namespace xo { FacetRegistry::register_impl(); FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + FacetRegistry::register_impl(); + log && log(xtag("DVariantPlaceholder.tseq", typeseq::id())); log && log(xtag("DList.tseq", typeseq::id())); @@ -74,6 +78,7 @@ namespace xo { log && log(xtag("DInteger.tseq", typeseq::id())); log && log(xtag("DString.tseq", typeseq::id())); log && log(xtag("DArray.tseq", typeseq::id())); + log && log(xtag("DRuntimeError.tseq", typeseq::id())); log && log(xtag("AAllocator.tseq", typeseq::id())); log && log(xtag("APrintable.tseq", typeseq::id()));