From 42b5cc7aea2af85e7c7fc54d0def4f68bfa96b0a Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Mar 2026 14:35:44 -0500 Subject: [PATCH] xo-interpreter2 stack: move fn_n_args() to ObjectPrimitives --- include/xo/procedure2/ObjectPrimitives.hpp | 4 ++++ src/procedure2/ObjectPrimitives.cpp | 24 +++++++++++++++++++ .../procedure2_register_primitives.cpp | 1 + 3 files changed, 29 insertions(+) diff --git a/include/xo/procedure2/ObjectPrimitives.hpp b/include/xo/procedure2/ObjectPrimitives.hpp index ee2dfae..1de2fd2 100644 --- a/include/xo/procedure2/ObjectPrimitives.hpp +++ b/include/xo/procedure2/ObjectPrimitives.hpp @@ -6,6 +6,7 @@ #pragma once #include "Primitive_gco_0.hpp" +#include "Primitive_gco_1_gco.hpp" #include "Primitive_gco_2_gco_gco.hpp" #include "Primitive_gco_3_dict_string_gco.hpp" @@ -35,6 +36,9 @@ namespace xo { /** create primitive that upserts a key,value pair into a dictionary **/ static DPrimitive_gco_3_dict_string_gco * make_dict_upsert_pm(obj mm); + + /** create primitive: get fixed number of args for function **/ + static DPrimitive_gco_1_gco * make_fn_n_args_pm(obj mm); }; } /*namespace scm*/ diff --git a/src/procedure2/ObjectPrimitives.cpp b/src/procedure2/ObjectPrimitives.cpp index f5d7ab1..29e9e9b 100644 --- a/src/procedure2/ObjectPrimitives.cpp +++ b/src/procedure2/ObjectPrimitives.cpp @@ -133,6 +133,30 @@ namespace xo { return DPrimitive_gco_3_dict_string_gco::_make(mm, "dict_upsert", &xfer_dict_upsert); } + // ----- fn_n_args ----- + + obj + xfer_fn_n_args(obj rcx, + obj fn_gco) + { + scope log(XO_DEBUG(true)); + + log && log(xtag("fn_gco.tseq", fn_gco._typeseq())); + log && log(xtag("fn_gco.tname", TypeRegistry::id2name(fn_gco._typeseq()))); + + auto fn_proc = FacetRegistry::instance().try_variant(fn_gco); + + assert(fn_proc); + + return DInteger::box(rcx.allocator(), fn_proc.n_args()); + } + + DPrimitive_gco_1_gco * + ObjectPrimitives::make_fn_n_args_pm(obj mm) + { + return DPrimitive_gco_1_gco::_make(mm, "fn_n_args", &xfer_fn_n_args); + } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/procedure2/procedure2_register_primitives.cpp b/src/procedure2/procedure2_register_primitives.cpp index a5502d6..2585457 100644 --- a/src/procedure2/procedure2_register_primitives.cpp +++ b/src/procedure2/procedure2_register_primitives.cpp @@ -66,6 +66,7 @@ namespace xo { ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm(mm), flags); + ok = ok & install_aux(sink, ObjectPrimitives::make_fn_n_args_pm(mm), flags); return ok; }