xo-gc: + CollectorTypeRegistry for streamlined init

This commit is contained in:
Roland Conybeare 2026-01-16 16:10:00 -05:00
commit 23383d7e69
5 changed files with 86 additions and 1 deletions

View file

@ -11,6 +11,7 @@ find_dependency(reflect)
find_dependency(xo_object2)
find_dependency(xo_printable2)
find_dependency(xo_flatstring)
find_dependency(cmake)
find_dependency(indentlog)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")

View file

@ -0,0 +1,21 @@
/** @file init_expression2.hpp
*
* @author Roland Conybeare, Jan 2026
**/
#pragma once
#include <xo/subsys/Subsystem.hpp>
namespace xo {
/* tag to represent the xo-expression2/ subsystem within ordered initialization */
enum S_expression2_tag {};
template <>
struct InitSubsys<S_expression2_tag> {
static void init();
static InitEvidence require();
};
} /*namespace xo*/
/* end init_expression2.hpp */

View file

@ -2,13 +2,16 @@
set(SELF_LIB xo_expression2)
set(SELF_SRCS
init_expression2.cpp
DConstant.cpp
TypeRef.cpp
IExpression_Any.cpp
IExpression_DConstant.cpp
StringTable.cpp
DUniqueString.cpp
IGCObject_DUniqueString.cpp
expression2_register_facets.cpp
expression2_register_types.cpp
)
xo_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS})
@ -18,4 +21,5 @@ xo_dependency(${SELF_LIB} reflect)
xo_dependency(${SELF_LIB} xo_object2)
xo_dependency(${SELF_LIB} xo_printable2)
xo_dependency(${SELF_LIB} xo_flatstring)
xo_dependency(${SELF_LIB} subsys)
xo_dependency(${SELF_LIB} indentlog)

View file

@ -0,0 +1,41 @@
/** @file init_expression2.cpp
*
* @author Roland Conybeare, Jan 2026
**/
#include "init_expression2.hpp"
#include "expression2_register_facets.hpp"
#include "expression2_register_types.hpp"
#include <xo/object2/init_object2.hpp>
#include <xo/gc/CollectorTypeRegistry.hpp>
namespace xo {
using xo::scm::expression2_register_facets;
using xo::scm::expression2_register_types;
using xo::mm::CollectorTypeRegistry;
void
InitSubsys<S_expression2_tag>::init()
{
expression2_register_facets();
CollectorTypeRegistry::instance().register_types(&expression2_register_types);
}
InitEvidence
InitSubsys<S_expression2_tag>::require()
{
InitEvidence retval;
/* direct subsystem deps for xo-object2/ */
retval ^= InitSubsys<S_object2_tag>::require();
/* xo-expression2/'s own initialization code */
retval ^= Subsystem::provide<S_expression2_tag>("expression2", &init);
return retval;
}
} /*namespace xo*/
/* end init_expression2.cpp */

View file

@ -1,6 +1,24 @@
/* file expression2_utest_main.cpp */
#define CATCH_CONFIG_MAIN
#include <xo/subsys/Subsystem.hpp>
#define CATCH_CONFIG_RUNNER
#include "catch2/catch.hpp"
int
main(int argc, char* argv[])
{
using xo::Subsystem;
// Your custom initialization code here
Subsystem::initialize_all();
// Run Catch2's test session
int result = Catch::Session().run(argc, argv);
// cleanup here, if any
return result;
}
/* end expression2_utest_main.cpp */