From 92e79852b9d99493ad3969004ea7a69537a4bd47 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 31 Jan 2026 01:44:53 -0500 Subject: [PATCH] xo-expression2 xo-gc: DSequenceExpr builds [WIP] --- xo-expression2/CMakeLists.txt | 14 + .../idl/IExpression_DSequenceExpr.json5 | 12 + .../xo/expression2}/DSequenceExpr.hpp | 10 +- .../include/xo/expression2/Expression.hpp | 2 +- .../include/xo/expression2/SymbolTable.hpp | 2 +- .../xo/expression2/detail/AExpression.hpp | 2 +- .../xo/expression2/detail/IExpression_Any.hpp | 2 +- .../detail/IExpression_DApplyExpr.hpp | 2 +- .../detail/IExpression_DConstant.hpp | 2 +- .../detail/IExpression_DDefineExpr.hpp | 2 +- .../detail/IExpression_DIfElseExpr.hpp | 2 +- .../detail/IExpression_DLambdaExpr.hpp | 2 +- .../detail/IExpression_DSequenceExpr.hpp | 66 +++++ .../detail/IExpression_DVariable.hpp | 2 +- .../expression2/detail/IExpression_Xfer.hpp | 2 +- .../detail/IGCObject_DUniqueString.hpp | 2 +- .../detail/IGCObject_DVariable.hpp | 2 +- .../detail/IPrintable_DApplyExpr.hpp | 2 +- .../detail/IPrintable_DConstant.hpp | 2 +- .../detail/IPrintable_DDefineExpr.hpp | 2 +- .../detail/IPrintable_DIfElseExpr.hpp | 2 +- .../detail/IPrintable_DLambdaExpr.hpp | 2 +- .../detail/IPrintable_DUniqueString.hpp | 2 +- .../detail/IPrintable_DVariable.hpp | 2 +- .../xo/expression2/detail/RExpression.hpp | 2 +- .../xo/expression2/symtab/ASymbolTable.hpp | 2 +- .../symtab/IPrintable_DLocalSymtab.hpp | 2 +- .../expression2/symtab/ISymbolTable_Any.hpp | 2 +- .../symtab/ISymbolTable_DLocalSymtab.hpp | 2 +- .../expression2/symtab/ISymbolTable_Xfer.hpp | 2 +- .../xo/expression2/symtab/RSymbolTable.hpp | 2 +- xo-expression2/src/expression2/CMakeLists.txt | 3 + .../src/expression2/DSequenceExpr.cpp | 33 ++- .../expression2/IExpression_DApplyExpr.cpp | 2 +- .../src/expression2/IExpression_DConstant.cpp | 2 +- .../expression2/IExpression_DDefineExpr.cpp | 2 +- .../expression2/IExpression_DIfElseExpr.cpp | 2 +- .../expression2/IExpression_DLambdaExpr.cpp | 2 +- .../expression2/IExpression_DSequenceExpr.cpp | 45 +++ .../src/expression2/IExpression_DVariable.cpp | 2 +- .../expression2/IGCObject_DUniqueString.cpp | 2 +- .../src/expression2/IGCObject_DVariable.cpp | 2 +- .../src/expression2/IPrintable_DApplyExpr.cpp | 2 +- .../src/expression2/IPrintable_DConstant.cpp | 2 +- .../expression2/IPrintable_DDefineExpr.cpp | 2 +- .../expression2/IPrintable_DIfElseExpr.cpp | 2 +- .../expression2/IPrintable_DLambdaExpr.cpp | 2 +- .../expression2/IPrintable_DLocalSymtab.cpp | 2 +- .../expression2/IPrintable_DUniqueString.cpp | 2 +- .../src/expression2/IPrintable_DVariable.cpp | 2 +- .../expression2/ISymbolTable_DLocalSymtab.cpp | 2 +- xo-gc/CMakeLists.txt | 4 + xo-gc/idl/GCObject.json5 | 6 +- xo-gc/include/xo/gc/GCObject.hpp | 3 +- xo-gc/include/xo/gc/detail/AGCObject.hpp | 2 +- xo-gc/include/xo/gc/detail/IGCObject_Any.hpp | 2 +- xo-gc/include/xo/gc/detail/IGCObject_Xfer.hpp | 2 +- xo-gc/include/xo/gc/detail/RGCObject.hpp | 7 +- .../include/xo/object2/GCObjectConverter.hpp | 158 +++++++++++ xo-object2/src/object2/GCObjectConverter.cpp | 258 ++++++++++++++++++ 60 files changed, 651 insertions(+), 62 deletions(-) create mode 100644 xo-expression2/idl/IExpression_DSequenceExpr.json5 rename xo-expression2/{ => include/xo/expression2}/DSequenceExpr.hpp (85%) create mode 100644 xo-expression2/include/xo/expression2/detail/IExpression_DSequenceExpr.hpp create mode 100644 xo-expression2/src/expression2/IExpression_DSequenceExpr.cpp create mode 100644 xo-object2/include/xo/object2/GCObjectConverter.hpp create mode 100644 xo-object2/src/object2/GCObjectConverter.cpp diff --git a/xo-expression2/CMakeLists.txt b/xo-expression2/CMakeLists.txt index ae1bb8c2..4f7705ce 100644 --- a/xo-expression2/CMakeLists.txt +++ b/xo-expression2/CMakeLists.txt @@ -238,6 +238,20 @@ xo_add_genfacetimpl( # ---------------------------------------------------------------- +# note: manual target; generated code committed to git +xo_add_genfacetimpl( + TARGET xo-expression2-facetimpl-expression-sequenceexpr + FACET_PKG xo_expression2 + FACET Expression + REPR SequenceExpr + INPUT idl/IExpression_DSequenceExpr.json5 + OUTPUT_HPP_DIR include/xo/expression2 + OUTPUT_IMPL_SUBDIR detail + OUTPUT_CPP_DIR src/expression2 +) + +# ---------------------------------------------------------------- + # note: manual target; generated code committed to git xo_add_genfacetimpl( TARGET xo-expression2-facetimpl-gcobject-uniquestring diff --git a/xo-expression2/idl/IExpression_DSequenceExpr.json5 b/xo-expression2/idl/IExpression_DSequenceExpr.json5 new file mode 100644 index 00000000..451d39f1 --- /dev/null +++ b/xo-expression2/idl/IExpression_DSequenceExpr.json5 @@ -0,0 +1,12 @@ +{ + mode: "implementation", + includes: [ "\"Expression.hpp\"" ], + local_types: [ ], + namespace1: "xo", + namespace2: "scm", + facet_idl: "idl/Expression.json5", + brief: "provide AExpression interface for DSequenceExpr state", + using_doxygen: true, + repr: "DSequenceExpr", + doc: ["doc for something or other IExpression+DSequenceExpr" ], +} diff --git a/xo-expression2/DSequenceExpr.hpp b/xo-expression2/include/xo/expression2/DSequenceExpr.hpp similarity index 85% rename from xo-expression2/DSequenceExpr.hpp rename to xo-expression2/include/xo/expression2/DSequenceExpr.hpp index 12caf649..7285ada8 100644 --- a/xo-expression2/DSequenceExpr.hpp +++ b/xo-expression2/include/xo/expression2/DSequenceExpr.hpp @@ -5,6 +5,7 @@ #pragma once +#include "Expression.hpp" #include "TypeRef.hpp" #include @@ -21,6 +22,8 @@ namespace xo { **/ class DSequenceExpr { public: + using AAllocator = xo::mm::AAllocator; + using TypeDescr = xo::reflect::TypeDescr; using size_type = DArray::size_type; using ppindentinfo = xo::print::ppindentinfo; @@ -37,8 +40,11 @@ namespace xo { size_type size() const noexcept; obj operator[](std::size_t i) const; - /** append @p expr to the end of this sequence **/ - void push_back(obj expr); + /** append @p expr to the end of this sequence; + * use memory from @p mm if need to expand storage + **/ + void push_back(obj mm, + obj expr); // get_free_variables(); // visit_preorder(); diff --git a/xo-expression2/include/xo/expression2/Expression.hpp b/xo-expression2/include/xo/expression2/Expression.hpp index df4161a1..60e8a402 100644 --- a/xo-expression2/include/xo/expression2/Expression.hpp +++ b/xo-expression2/include/xo/expression2/Expression.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/Expression.json5] * 2. jinja2 template for facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/SymbolTable.hpp b/xo-expression2/include/xo/expression2/SymbolTable.hpp index 26576ed6..09fc04a8 100644 --- a/xo-expression2/include/xo/expression2/SymbolTable.hpp +++ b/xo-expression2/include/xo/expression2/SymbolTable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/SymbolTable.json5] * 2. jinja2 template for facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/AExpression.hpp b/xo-expression2/include/xo/expression2/detail/AExpression.hpp index e080ece8..10375114 100644 --- a/xo-expression2/include/xo/expression2/detail/AExpression.hpp +++ b/xo-expression2/include/xo/expression2/detail/AExpression.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/Expression.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_Any.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_Any.hpp index 17545afb..c92c2c4a 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_Any.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_Any.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/Expression.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DApplyExpr.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DApplyExpr.hpp index c8952199..d577854f 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DApplyExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DApplyExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DApplyExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DConstant.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DConstant.hpp index 61b92e12..89c5044c 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DConstant.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DConstant.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DConstant.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DDefineExpr.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DDefineExpr.hpp index 3ac7fd49..f5585b60 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DDefineExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DDefineExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DDefineExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DIfElseExpr.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DIfElseExpr.hpp index 7d726dde..03500a39 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DIfElseExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DIfElseExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DIfElseExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DLambdaExpr.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DLambdaExpr.hpp index d488b6b3..916b82ac 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DLambdaExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DLambdaExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DLambdaExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DSequenceExpr.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DSequenceExpr.hpp new file mode 100644 index 00000000..b010ac65 --- /dev/null +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DSequenceExpr.hpp @@ -0,0 +1,66 @@ +/** @file IExpression_DSequenceExpr.hpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IExpression_DSequenceExpr.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_repr.hpp.j2] + * 3. idl for facet methods + * [idl/IExpression_DSequenceExpr.json5] + **/ + +#pragma once + +#include "Expression.hpp" +#include "Expression.hpp" +#include "DSequenceExpr.hpp" + +namespace xo { namespace scm { class IExpression_DSequenceExpr; } } + +namespace xo { + namespace facet { + template <> + struct FacetImplementation + { + using ImplType = xo::scm::IExpression_Xfer + ; + }; + } +} + +namespace xo { + namespace scm { + /** @class IExpression_DSequenceExpr + **/ + class IExpression_DSequenceExpr { + public: + /** @defgroup scm-expression-dsequenceexpr-type-traits **/ + ///@{ + using TypeDescr = xo::scm::AExpression::TypeDescr; + using Copaque = xo::scm::AExpression::Copaque; + using Opaque = xo::scm::AExpression::Opaque; + ///@} + /** @defgroup scm-expression-dsequenceexpr-methods **/ + ///@{ + // const methods + /** expression type (constant | apply | ..) **/ + static exprtype extype(const DSequenceExpr & self) noexcept; + /** placeholder for type giving possible values for this expression **/ + static TypeRef typeref(const DSequenceExpr & self) noexcept; + /** type giving possible values for this expression. Maybe null before typecheck **/ + static TypeDescr valuetype(const DSequenceExpr & self) noexcept; + + // non-const methods + /** assing to valuetype member. Useful when scaffolding expressions **/ + static void assign_valuetype(DSequenceExpr & self, TypeDescr td) noexcept; + ///@} + }; + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end */ \ No newline at end of file diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_DVariable.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_DVariable.hpp index 6b9b702f..95b1becb 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_DVariable.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_DVariable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IExpression_Xfer.hpp b/xo-expression2/include/xo/expression2/detail/IExpression_Xfer.hpp index fac8c541..9f7356bc 100644 --- a/xo-expression2/include/xo/expression2/detail/IExpression_Xfer.hpp +++ b/xo-expression2/include/xo/expression2/detail/IExpression_Xfer.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/Expression.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp b/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp index b971daea..c95db10f 100644 --- a/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp +++ b/xo-expression2/include/xo/expression2/detail/IGCObject_DUniqueString.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IGCObject_DUniqueString.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IGCObject_DVariable.hpp b/xo-expression2/include/xo/expression2/detail/IGCObject_DVariable.hpp index 24dc591f..aee612ea 100644 --- a/xo-expression2/include/xo/expression2/detail/IGCObject_DVariable.hpp +++ b/xo-expression2/include/xo/expression2/detail/IGCObject_DVariable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IGCObject_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DApplyExpr.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DApplyExpr.hpp index c05e87e2..b7782166 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DApplyExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DApplyExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DApplyExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DConstant.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DConstant.hpp index a1e31382..35535d80 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DConstant.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DConstant.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DConstant.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DDefineExpr.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DDefineExpr.hpp index 6d727d86..758022a6 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DDefineExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DDefineExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DDefineExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DIfElseExpr.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DIfElseExpr.hpp index fcf80fd5..e9cf67ff 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DIfElseExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DIfElseExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DIfElseExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DLambdaExpr.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DLambdaExpr.hpp index 64ab6af1..45970bd8 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DLambdaExpr.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DLambdaExpr.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLambdaExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DUniqueString.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DUniqueString.hpp index 34c9da79..51afa9da 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DUniqueString.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DUniqueString.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DUniqueString.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/IPrintable_DVariable.hpp b/xo-expression2/include/xo/expression2/detail/IPrintable_DVariable.hpp index 6e97451b..a31ee97e 100644 --- a/xo-expression2/include/xo/expression2/detail/IPrintable_DVariable.hpp +++ b/xo-expression2/include/xo/expression2/detail/IPrintable_DVariable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/detail/RExpression.hpp b/xo-expression2/include/xo/expression2/detail/RExpression.hpp index 4d717640..caf69fe0 100644 --- a/xo-expression2/include/xo/expression2/detail/RExpression.hpp +++ b/xo-expression2/include/xo/expression2/detail/RExpression.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/Expression.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/ASymbolTable.hpp b/xo-expression2/include/xo/expression2/symtab/ASymbolTable.hpp index f0c6e10f..36d4c812 100644 --- a/xo-expression2/include/xo/expression2/symtab/ASymbolTable.hpp +++ b/xo-expression2/include/xo/expression2/symtab/ASymbolTable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/SymbolTable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/IPrintable_DLocalSymtab.hpp b/xo-expression2/include/xo/expression2/symtab/IPrintable_DLocalSymtab.hpp index c013e937..d4481dca 100644 --- a/xo-expression2/include/xo/expression2/symtab/IPrintable_DLocalSymtab.hpp +++ b/xo-expression2/include/xo/expression2/symtab/IPrintable_DLocalSymtab.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLocalSymtab.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Any.hpp b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Any.hpp index b642adb7..6a119832 100644 --- a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Any.hpp +++ b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Any.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/SymbolTable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_DLocalSymtab.hpp b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_DLocalSymtab.hpp index 72f409dd..2c1816e4 100644 --- a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_DLocalSymtab.hpp +++ b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_DLocalSymtab.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/ISymbolTable_DLocalSymtab.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Xfer.hpp b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Xfer.hpp index 3d5f7221..2333bb05 100644 --- a/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Xfer.hpp +++ b/xo-expression2/include/xo/expression2/symtab/ISymbolTable_Xfer.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/SymbolTable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/include/xo/expression2/symtab/RSymbolTable.hpp b/xo-expression2/include/xo/expression2/symtab/RSymbolTable.hpp index 600ea4f8..c72503cc 100644 --- a/xo-expression2/include/xo/expression2/symtab/RSymbolTable.hpp +++ b/xo-expression2/include/xo/expression2/symtab/RSymbolTable.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/SymbolTable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/CMakeLists.txt b/xo-expression2/src/expression2/CMakeLists.txt index 8e6565c4..ab10048e 100644 --- a/xo-expression2/src/expression2/CMakeLists.txt +++ b/xo-expression2/src/expression2/CMakeLists.txt @@ -10,6 +10,7 @@ set(SELF_SRCS DLambdaExpr.cpp DApplyExpr.cpp DIfElseExpr.cpp + DSequenceExpr.cpp TypeRef.cpp @@ -34,6 +35,8 @@ set(SELF_SRCS IExpression_DIfElseExpr.cpp IPrintable_DIfElseExpr.cpp + IExpression_DSequenceExpr.cpp + DLocalSymtab.cpp DGlobalSymtab.cpp diff --git a/xo-expression2/src/expression2/DSequenceExpr.cpp b/xo-expression2/src/expression2/DSequenceExpr.cpp index c5abf27b..5e449531 100644 --- a/xo-expression2/src/expression2/DSequenceExpr.cpp +++ b/xo-expression2/src/expression2/DSequenceExpr.cpp @@ -4,8 +4,19 @@ **/ #include "DSequenceExpr.hpp" +#include "detail/IExpression_DSequenceExpr.hpp" +#include +#include +#include +#include +#include +#include namespace xo { + using xo::mm::AGCObject; + using xo::facet::FacetRegistry; + using xo::reflect::typeseq; + namespace scm { obj @@ -35,8 +46,8 @@ namespace xo { return expr; } - size_type - DSequenceExpr::size() const noexcept + auto + DSequenceExpr::size() const noexcept -> size_type { return expr_v_->size(); } @@ -44,7 +55,9 @@ namespace xo { obj DSequenceExpr::operator[](std::size_t i) const { - return (*expr_v_)[i]; + obj gco = (*expr_v_)[i]; + + return FacetRegistry::instance().variant(gco); } void @@ -64,7 +77,10 @@ namespace xo { this->expr_v_ = expr_2x_v; } - this->expr_v_->push_back(expr); + obj expr_gco + = FacetRegistry::instance().variant(expr); + + this->expr_v_->push_back(expr_gco); } void @@ -73,15 +89,16 @@ namespace xo { typeref_.resolve(td); } - void + bool DSequenceExpr::pretty(const ppindentinfo & ppii) const { using xo::print::ppstate; - ppstate * pps = ppii.pps(); - - xxx; + return ppii.pps()->pretty_struct + (ppii, + "DSequenceExpr"); } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-expression2/src/expression2/IExpression_DApplyExpr.cpp b/xo-expression2/src/expression2/IExpression_DApplyExpr.cpp index 2098e050..c00e91dc 100644 --- a/xo-expression2/src/expression2/IExpression_DApplyExpr.cpp +++ b/xo-expression2/src/expression2/IExpression_DApplyExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DApplyExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IExpression_DConstant.cpp b/xo-expression2/src/expression2/IExpression_DConstant.cpp index 2d39c36d..0e91d27d 100644 --- a/xo-expression2/src/expression2/IExpression_DConstant.cpp +++ b/xo-expression2/src/expression2/IExpression_DConstant.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DConstant.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IExpression_DDefineExpr.cpp b/xo-expression2/src/expression2/IExpression_DDefineExpr.cpp index 3222eabd..ab0676a4 100644 --- a/xo-expression2/src/expression2/IExpression_DDefineExpr.cpp +++ b/xo-expression2/src/expression2/IExpression_DDefineExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DDefineExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IExpression_DIfElseExpr.cpp b/xo-expression2/src/expression2/IExpression_DIfElseExpr.cpp index d913eaf0..78680310 100644 --- a/xo-expression2/src/expression2/IExpression_DIfElseExpr.cpp +++ b/xo-expression2/src/expression2/IExpression_DIfElseExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DIfElseExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IExpression_DLambdaExpr.cpp b/xo-expression2/src/expression2/IExpression_DLambdaExpr.cpp index 273f5544..d9174ad2 100644 --- a/xo-expression2/src/expression2/IExpression_DLambdaExpr.cpp +++ b/xo-expression2/src/expression2/IExpression_DLambdaExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DLambdaExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IExpression_DSequenceExpr.cpp b/xo-expression2/src/expression2/IExpression_DSequenceExpr.cpp new file mode 100644 index 00000000..e269a114 --- /dev/null +++ b/xo-expression2/src/expression2/IExpression_DSequenceExpr.cpp @@ -0,0 +1,45 @@ +/** @file IExpression_DSequenceExpr.cpp + * + * Generated automagically from ingredients: + * 1. code generator: + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * arguments: + * --input [idl/IExpression_DSequenceExpr.json5] + * 2. jinja2 template for abstract facet .hpp file: + * [iface_facet_any.hpp.j2] + * 3. idl for facet methods + * [idl/IExpression_DSequenceExpr.json5] +**/ + +#include "detail/IExpression_DSequenceExpr.hpp" + +namespace xo { + namespace scm { + auto + IExpression_DSequenceExpr::extype(const DSequenceExpr & self) noexcept -> exprtype + { + return self.extype(); + } + + auto + IExpression_DSequenceExpr::typeref(const DSequenceExpr & self) noexcept -> TypeRef + { + return self.typeref(); + } + + auto + IExpression_DSequenceExpr::valuetype(const DSequenceExpr & self) noexcept -> TypeDescr + { + return self.valuetype(); + } + + auto + IExpression_DSequenceExpr::assign_valuetype(DSequenceExpr & self, TypeDescr td) noexcept -> void + { + self.assign_valuetype(td); + } + + } /*namespace scm*/ +} /*namespace xo*/ + +/* end IExpression_DSequenceExpr.cpp */ \ No newline at end of file diff --git a/xo-expression2/src/expression2/IExpression_DVariable.cpp b/xo-expression2/src/expression2/IExpression_DVariable.cpp index 2b4a007b..ca657c36 100644 --- a/xo-expression2/src/expression2/IExpression_DVariable.cpp +++ b/xo-expression2/src/expression2/IExpression_DVariable.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IExpression_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp b/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp index b13b3f79..5d2553f0 100644 --- a/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp +++ b/xo-expression2/src/expression2/IGCObject_DUniqueString.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IGCObject_DUniqueString.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IGCObject_DVariable.cpp b/xo-expression2/src/expression2/IGCObject_DVariable.cpp index 4af0f906..8735b286 100644 --- a/xo-expression2/src/expression2/IGCObject_DVariable.cpp +++ b/xo-expression2/src/expression2/IGCObject_DVariable.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IGCObject_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DApplyExpr.cpp b/xo-expression2/src/expression2/IPrintable_DApplyExpr.cpp index 4f4a50d3..6c7c16a8 100644 --- a/xo-expression2/src/expression2/IPrintable_DApplyExpr.cpp +++ b/xo-expression2/src/expression2/IPrintable_DApplyExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DApplyExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DConstant.cpp b/xo-expression2/src/expression2/IPrintable_DConstant.cpp index 1bacfb9d..02e8bde0 100644 --- a/xo-expression2/src/expression2/IPrintable_DConstant.cpp +++ b/xo-expression2/src/expression2/IPrintable_DConstant.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DConstant.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DDefineExpr.cpp b/xo-expression2/src/expression2/IPrintable_DDefineExpr.cpp index e8c6a799..31f8c554 100644 --- a/xo-expression2/src/expression2/IPrintable_DDefineExpr.cpp +++ b/xo-expression2/src/expression2/IPrintable_DDefineExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DDefineExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DIfElseExpr.cpp b/xo-expression2/src/expression2/IPrintable_DIfElseExpr.cpp index a75cd6a4..ec68b9fc 100644 --- a/xo-expression2/src/expression2/IPrintable_DIfElseExpr.cpp +++ b/xo-expression2/src/expression2/IPrintable_DIfElseExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DIfElseExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DLambdaExpr.cpp b/xo-expression2/src/expression2/IPrintable_DLambdaExpr.cpp index 12e6c22c..966c9d2f 100644 --- a/xo-expression2/src/expression2/IPrintable_DLambdaExpr.cpp +++ b/xo-expression2/src/expression2/IPrintable_DLambdaExpr.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLambdaExpr.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DLocalSymtab.cpp b/xo-expression2/src/expression2/IPrintable_DLocalSymtab.cpp index dbd4887b..90f69407 100644 --- a/xo-expression2/src/expression2/IPrintable_DLocalSymtab.cpp +++ b/xo-expression2/src/expression2/IPrintable_DLocalSymtab.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLocalSymtab.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DUniqueString.cpp b/xo-expression2/src/expression2/IPrintable_DUniqueString.cpp index a7b92af8..ef7cf037 100644 --- a/xo-expression2/src/expression2/IPrintable_DUniqueString.cpp +++ b/xo-expression2/src/expression2/IPrintable_DUniqueString.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DUniqueString.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/IPrintable_DVariable.cpp b/xo-expression2/src/expression2/IPrintable_DVariable.cpp index 75e673ae..edf79638 100644 --- a/xo-expression2/src/expression2/IPrintable_DVariable.cpp +++ b/xo-expression2/src/expression2/IPrintable_DVariable.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DVariable.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-expression2/src/expression2/ISymbolTable_DLocalSymtab.cpp b/xo-expression2/src/expression2/ISymbolTable_DLocalSymtab.cpp index 778cfdf4..3e5e465c 100644 --- a/xo-expression2/src/expression2/ISymbolTable_DLocalSymtab.cpp +++ b/xo-expression2/src/expression2/ISymbolTable_DLocalSymtab.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/ISymbolTable_DLocalSymtab.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-gc/CMakeLists.txt b/xo-gc/CMakeLists.txt index 2ad70af5..c0bf8418 100644 --- a/xo-gc/CMakeLists.txt +++ b/xo-gc/CMakeLists.txt @@ -30,6 +30,10 @@ xo_add_genfacet( # ---------------------------------------------------------------- +xo_add_genfacet_all(xo-gc-genfacet-all) + +# ---------------------------------------------------------------- + # must complete definition of expression lib before configuring examples add_subdirectory(src/gc) add_subdirectory(utest) diff --git a/xo-gc/idl/GCObject.json5 b/xo-gc/idl/GCObject.json5 index ef00b5d9..f2336678 100644 --- a/xo-gc/idl/GCObject.json5 +++ b/xo-gc/idl/GCObject.json5 @@ -6,11 +6,13 @@ "", "", ], + // extra includes in GCObject.hpp, if any + user_hpp_includes: [], + namespace1: "xo", + namespace2: "mm", pretext: [ "namespace xo { namespace mm { struct ACollector; }}", ], - namespace1: "xo", - namespace2: "mm", facet: "GCObject", detail_subdir: "detail", brief: "xxx", diff --git a/xo-gc/include/xo/gc/GCObject.hpp b/xo-gc/include/xo/gc/GCObject.hpp index 25834817..2eede6b3 100644 --- a/xo-gc/include/xo/gc/GCObject.hpp +++ b/xo-gc/include/xo/gc/GCObject.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/GCObject.json5] * 2. jinja2 template for facet .hpp file: @@ -18,4 +18,5 @@ #include "detail/IGCObject_Xfer.hpp" #include "detail/RGCObject.hpp" + /* end GCObject.hpp */ \ No newline at end of file diff --git a/xo-gc/include/xo/gc/detail/AGCObject.hpp b/xo-gc/include/xo/gc/detail/AGCObject.hpp index b7a5ffa3..ab6b4096 100644 --- a/xo-gc/include/xo/gc/detail/AGCObject.hpp +++ b/xo-gc/include/xo/gc/detail/AGCObject.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/GCObject.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-gc/include/xo/gc/detail/IGCObject_Any.hpp b/xo-gc/include/xo/gc/detail/IGCObject_Any.hpp index c930693f..e1b274a7 100644 --- a/xo-gc/include/xo/gc/detail/IGCObject_Any.hpp +++ b/xo-gc/include/xo/gc/detail/IGCObject_Any.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/GCObject.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-gc/include/xo/gc/detail/IGCObject_Xfer.hpp b/xo-gc/include/xo/gc/detail/IGCObject_Xfer.hpp index 655263bf..d25eb81e 100644 --- a/xo-gc/include/xo/gc/detail/IGCObject_Xfer.hpp +++ b/xo-gc/include/xo/gc/detail/IGCObject_Xfer.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/GCObject.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-gc/include/xo/gc/detail/RGCObject.hpp b/xo-gc/include/xo/gc/detail/RGCObject.hpp index e54a2539..435d5a64 100644 --- a/xo-gc/include/xo/gc/detail/RGCObject.hpp +++ b/xo-gc/include/xo/gc/detail/RGCObject.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] + * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] * arguments: * --input [idl/GCObject.json5] * 2. jinja2 template for abstract facet .hpp file: @@ -40,6 +40,9 @@ public: ///@{ RGCObject() {} RGCObject(Object::DataPtr data) : Object{std::move(data)} {} + RGCObject(const AGCObject * iface, void * data) + requires std::is_same_v + : Object(iface, data) {} ///@} /** @defgroup mm-gcobject-router-methods **/ @@ -54,7 +57,7 @@ public: return O::iface()->shallow_copy(O::data(), mm); } - // non-const methods + // non-const methods (still const in router!) size_type forward_children(obj gc) noexcept { return O::iface()->forward_children(O::data(), gc); } diff --git a/xo-object2/include/xo/object2/GCObjectConverter.hpp b/xo-object2/include/xo/object2/GCObjectConverter.hpp new file mode 100644 index 00000000..bf244f48 --- /dev/null +++ b/xo-object2/include/xo/object2/GCObjectConverter.hpp @@ -0,0 +1,158 @@ +/** @file GCObjectConverter.hpp + * + * @author Roland Conybeare, Nov 2025 + **/ + +#pragma once + +#include +#include +#include +//#include "xo/reflect/TaggedPtr.hpp" +#include + +namespace xo { + namespace scm { + /* Convert between xo::reflect::TaggedPtr and xo::Object for + * a particular wrapped c++ type + */ + struct Converter { + using AAllocator = xo::mm::AAllocator; + using AGCObject = xo::mm::AGCObject; + using TaggedPtr = xo::reflect::TaggedPtr; + /** convert from some reflected T* @p src to + * obj dest + * using memory from allocator @p mm + **/ + using ConvertToObjectFn = obj (*)(obj mm, + TaggedPtr src); + /** convert from obj @p src to some refected T* @p dest + * using memory from allocator @p mm. + * + * NOTE: obj is gc-aware -> will likely reside in + * a collected memory region. + **/ + using ConvertFromObjectFn = TaggedPtr (*)(obj mm, + obj obj); + + public: + Converter() = default; + explicit Converter(ConvertToObjectFn to, + ConvertFromObjectFn from) + : cvt_to_object_{to}, + cvt_from_object_{from} + {} + + /** convert tagged pointer @p tp to new object, + * allocated via @p mm. + * + * Conversion will typically be for some specific type; + * see @ref ObjectConverter + **/ + ConvertToObjectFn cvt_to_object_ = nullptr; + + /** convert object to tagged pointer @p, + * allocated via @p mm. + * + * Conversion will typically be for some specific type; + * see @ref ObjectConverter + **/ + ConvertFromObjectFn cvt_from_object_ = nullptr; + }; + + /** @class ObjectConverter + * @brief Conversion to/from Object + * + * For some instance of type T: + * + * @code + * ObjectConverter & converters = ...; + * T x = ...; + * TaggedPtr tp = Reflect::make_tp(&x); + * TypeId tid = tp.td()->id(); + * + * const Converter * cvt = converters.cvt_.lookup(tid); + * + * if (cvt) { + * // cvt is a converter for T instances + * gp obj = (*(cvt->cvt_to_object_))(mm, + * @endcode + **/ + class ObjectConverter { + public: + using AAllocator = xo::mm::AAllocator; + using AGCObject = xo::mm::AGCObject; + using Reflect = xo::reflect::Reflect; + using TaggedPtr = xo::reflect::TaggedPtr; + using TypeId = xo::reflect::TypeId; + + /** sets up standard conversions **/ + ObjectConverter(); + + /** singleton instance **/ + static const ObjectConverter & instance(); + + /** establish conversion: use @p fn to convert values of type @tparam T. **/ + template + void establish_conversion(Converter::ConvertToObjectFn to, + Converter::ConvertFromObjectFn from); + + /** convert tagged poitner @p tp to object. allocates memory only from @p mm. + * return nullptr if no converter available and @p throw_flag not set. + * throw exception if no converter available and @p throw_flag set. + **/ + obj tp_to_gco(obj mm, + TaggedPtr tp, + bool throw_flag) const; + + /** convert @p x to object. + * return converted object; if allocated, using only memory from @p mm. + * return nullptr if no converter available, and @p throw_flag not set. + * throw exception if no converter available, and @p throw_flag set. + **/ + template + obj to_gco(obj mm, const T & x, bool throw_flag); + + /** convert object @p obj to tagged pointer, with typeid @p target_id. + * Allocates memory only from @p mm. + * return null TaggedPtr if no converter available and @p throw_flag not set. + * Throw exception if no converter available and @p throw_flag set. + **/ + TaggedPtr tp_from_gco(obj mm, + obj obj, + TypeId target_type_id, + bool throw_flag) const; + + private: + /** expandable type-driven conversion table. + **/ + xo::reflect::TypeDrivenMap cvt_; + }; + + template + void + ObjectConverter::establish_conversion(Converter::ConvertToObjectFn to, + Converter::ConvertFromObjectFn from) + { + using xo::reflect::TypeDescrW; + using xo::reflect::Reflect; + + TypeDescrW td = Reflect::require(); + Converter * cvt = cvt_.require(td); + + *cvt = Converter(to, from); + } + + template + auto + ObjectConverter::to_gco(obj mm, const T & x, bool throw_flag) + -> obj + { + TaggedPtr x_tp = Reflect::make_tp(&x); + + return tp_to_gco(mm, x_tp, throw_flag); + } + } /*namespace scm*/ +} /*namespace xo*/ + +/* end GCObjectConverter.hpp */ diff --git a/xo-object2/src/object2/GCObjectConverter.cpp b/xo-object2/src/object2/GCObjectConverter.cpp new file mode 100644 index 00000000..6f3f5b4a --- /dev/null +++ b/xo-object2/src/object2/GCObjectConverter.cpp @@ -0,0 +1,258 @@ +/** @file GCObjectConverter.cpp + * + * @author Roland Conybeare, Nov 2025 + **/ + +#include "GCObjectConverter.hpp" + +#include "DInteger.hpp" +#include "number/IGCObject_DInteger.hpp" + +#include "DFloat.hpp" +#include "number/IGCObject_DFloat.hpp" + +#include "DBoolean.hpp" +#include "boolean/IGCObject_DBoolean.hpp" + +#include "DString.hpp" +#include "string/IGCObject_DString.hpp" + +#include +#include +//#include "xo/alloc/Blob.hpp" + +namespace xo { + using xo::mm::AGCObject; + using xo::reflect::Reflect; + using xo::reflect::TaggedPtr; + using xo::reflect::TypeId; + using xo::facet::obj; + using xo::facet::typeseq; + using xo::mm::AAllocator; + + namespace scm { + namespace { + // DInteger <-> T + + template + obj + int_to_gco(obj mm, TaggedPtr src) + { + T * native = src.recover_native(); + + assert(native); + + return DInteger::box(mm, *native); + } + + template + TaggedPtr + gco_to_int(obj mm, + obj obj) + { + + /* mm cannot be GC allocator! + * That's Object-only + */ + + auto int_obj = xo::facet::obj::from(obj); //Integer::from(obj); + + if (!int_obj) { + throw std::runtime_error + (tostr("Object obj found where Integer expected", + xtag("obj", obj))); + } + + void * mem = mm.alloc(typeseq::id(), sizeof(T)); + + T * p = reinterpret_cast(mem); + + *p = int_obj.data()->value(); + + /* Note: + * retval invalidated when + * *mm cleared/recycled/collected + */ + + return Reflect::make_tp(p); + } + + // DFloat <-> T + + template + xo::facet::obj + float_to_gco(xo::facet::obj mm, + TaggedPtr src) + { + T * native = src.recover_native(); + + assert(native); + + return DFloat::box(mm, *native); + } + + template + TaggedPtr + gco_to_float(obj mm, obj obj) + { + auto float_obj = xo::facet::obj::from(obj); + + if (!float_obj) { + throw std::runtime_error + (tostr("Object obj found where Float expected", + xtag("obj", obj))); + } + + void * mem = mm.alloc(typeseq::id(), sizeof(T)); + + T * p = reinterpret_cast(mem); + + *p = float_obj.data()->value(); + + /* Note: + * retval invalidated when *mm cleared/recycled/collected + */ + + return Reflect::make_tp(p); + } + + // DBoolean <-> T + + obj + bool_to_gco(obj mm, TaggedPtr src) + { + bool * native = src.recover_native(); + + assert(native); + + return DBoolean::box(mm, *native); + } + + TaggedPtr + gco_to_bool(obj /*mm*/, + obj obj) + { + static bool s_true = true; + static bool s_false = false; + + auto bool_obj = xo::facet::obj::from(obj); + + if (!bool_obj) { + throw std::runtime_error + (tostr("Object obj found where Boolean expected", + xtag("obj", obj))); + } + + return Reflect::make_tp(bool_obj.data()->value() ? &s_true : &s_false); + } + + // DString <-> T + // w/ + // T = std::string + + obj + string_to_gco(obj mm, TaggedPtr src) + { + // try std::string.. + + std::string * native = src.recover_native(); + + assert(native); + + DString * dstr = DString::from_str(mm, *native); + + return xo::facet::obj(dstr); + } + + TaggedPtr + gco_to_string(obj mm, obj obj) + { + auto string_obj = xo::facet::obj::from(obj); + + if (!string_obj) { + throw std::runtime_error + (tostr("Object obj founcd where String expected", + xtag("obj", obj))); + } + + // still don't have impl for this + // Need regular std::allocator interface + // + + (void)mm; + assert(false); + } + } + + ObjectConverter::ObjectConverter() + { + this->establish_conversion(&int_to_gco, + &gco_to_int); + this->establish_conversion(&int_to_gco, + &gco_to_int); + + this->establish_conversion(&float_to_gco, + &gco_to_float); + + this->establish_conversion(&bool_to_gco, + &gco_to_bool); + + this->establish_conversion(&string_to_gco, + &gco_to_string); + } + + const ObjectConverter & + ObjectConverter::instance() { + static ObjectConverter s_instance; + + return s_instance; + } + + obj + ObjectConverter::tp_to_gco(obj mm, + TaggedPtr x_tp, + bool throw_flag) const + { + using xo::reflect::Reflect; + using xo::reflect::TaggedPtr; + + const Converter * cvt = cvt_.lookup(x_tp.td()); + + if (cvt) { + return (cvt->cvt_to_object_)(mm, x_tp); + } else { + if (throw_flag) { + throw std::runtime_error + (tostr("no to-object-converter available for instance of type", + xtag("id", x_tp.td()->id()), + xtag("name", x_tp.td()->short_name()))); + } + + return obj(); + } + } + + TaggedPtr + ObjectConverter::tp_from_gco(obj mm, + obj obj, + TypeId target_id, + bool throw_flag) const + { + const Converter * cvt = cvt_.lookup(target_id); + + if (cvt) { + return (cvt->cvt_from_object_)(mm, obj); + } else { + if (throw_flag) { + throw std::runtime_error + (tostr("no from-object-converter available for instance of type", + xtag("id", target_id))); + } + + return TaggedPtr::universal_null(); + } + } + } +} + +/* end GCObjectConverter.cpp */