From 7ca1366becd3145ec9c0803333f0ab4071632b08 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 27 Nov 2025 12:05:58 -0500 Subject: [PATCH] xo-interpreter: + PrimitiveBase.name_ + populate --- .../src/interpreter/BuiltinPrimitives.cpp | 2 +- xo-object/include/xo/object/Primitive.hpp | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/xo-interpreter/src/interpreter/BuiltinPrimitives.cpp b/xo-interpreter/src/interpreter/BuiltinPrimitives.cpp index 1f8f7a1e..7224c92a 100644 --- a/xo-interpreter/src/interpreter/BuiltinPrimitives.cpp +++ b/xo-interpreter/src/interpreter/BuiltinPrimitives.cpp @@ -28,7 +28,7 @@ namespace xo { // add(x,y) { - gp rhs = xo::obj::make_primitive(mm, add64); + gp rhs = xo::obj::make_primitive(mm, "add", add64); TypeDescr td = Reflect::require(); rp lhs = Variable::make("add", td); gp * addr = env->establish_var(lhs.borrow()); diff --git a/xo-object/include/xo/object/Primitive.hpp b/xo-object/include/xo/object/Primitive.hpp index 70257f87..3dc171fe 100644 --- a/xo-object/include/xo/object/Primitive.hpp +++ b/xo-object/include/xo/object/Primitive.hpp @@ -6,6 +6,7 @@ #pragma once #include "Procedure.hpp" +#include "String.hpp" #include "ObjectConversion.hpp" #include "xo/reflect/Reflect.hpp" @@ -26,7 +27,7 @@ namespace xo { using function_type = Fn; public: - explicit PrimitiveBase(Fn impl) : impl_{std::move(impl)} {} + explicit PrimitiveBase(std::string_view name, Fn impl) : name_{name}, impl_{std::move(impl)} {} // inherited from Procedure.. @@ -34,6 +35,9 @@ namespace xo { virtual gp apply_nocheck(gc::IAlloc * mm, const CVector> & args) override = 0; protected: + /** name for this primitive **/ + std::string_view name_; + /** implementation **/ Fn impl_; }; @@ -49,7 +53,8 @@ namespace xo { using TaggedPtr = xo::reflect::TaggedPtr; public: - explicit Primitive(function_type fn) : PrimitiveBase{fn} {} + explicit Primitive(std::string_view name, + function_type fn) : PrimitiveBase{name, fn} {} // inherited from Procedure.. @@ -76,7 +81,7 @@ namespace xo { return Reflect::make_tp(const_cast(this)); } virtual void display(std::ostream & os) const final override { - os << ""; + os << ""; } virtual std::size_t _shallow_size() const final override { return sizeof(*this); @@ -92,8 +97,8 @@ namespace xo { template gp> - make_primitive(gc::IAlloc * mm, Fn fn) { - return new (MMPtr(mm)) Primitive(fn); + make_primitive(gc::IAlloc * mm, std::string_view name, Fn fn) { + return new (MMPtr(mm)) Primitive(name, fn); } } }