From 04a0caf2099c99a6dfa8a5a0ac8962fd77273fd9 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 15 Mar 2026 14:25:35 -0500 Subject: [PATCH] xo-interpreter2 stack: refactor: move cwd() -> ObjectPrimitives --- .../interpreter2/VirtualSchematikaMachine.cpp | 27 ------------------- .../xo/procedure2/ObjectPrimitives.hpp | 3 +++ .../src/procedure2/ObjectPrimitives.cpp | 18 +++++++++++++ .../procedure2_register_primitives.cpp | 1 + 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index 9473d15e..74612aa6 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -37,7 +37,6 @@ #include #include #include -#include // for getcwd() namespace xo { using xo::scm::DDictionary; @@ -876,20 +875,6 @@ namespace xo { } } - // ----- primitive: cwd() ----- - - obj - xfer_cwd(obj rcx) - { - char buf[PATH_MAX]; - ::getcwd(buf, sizeof(buf)); - - return obj(DString::from_cstr(rcx.allocator(), buf)); - } - - static DPrimitive_gco_0 s_cwd_pm("_cwd", - &xfer_cwd); - // ----- primitive: fn_n_args() ----- obj @@ -916,18 +901,6 @@ namespace xo { void VirtualSchematikaMachine::install_core_primitives() { - /* cwd */ - { - const DUniqueString * name - = reader_.intern_string("cwd"); - - global_env_->_upsert_value - (mm_.to_op(), - name, - Reflect::require(), - obj(&s_cwd_pm)); - } - /* fn_n_args */ { const DUniqueString * name diff --git a/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp b/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp index e7dc3127..ee2dfae0 100644 --- a/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp +++ b/xo-procedure2/include/xo/procedure2/ObjectPrimitives.hpp @@ -21,6 +21,9 @@ namespace xo { using AAllocator = xo::mm::AAllocator; public: + /** create primitive: report current working directory **/ + static DPrimitive_gco_0 * make_cwd_pm(obj mm); + /** create primitive: fetch nth element of a sequence **/ static DPrimitive_gco_2_gco_gco * make_nth_pm(obj mm); diff --git a/xo-procedure2/src/procedure2/ObjectPrimitives.cpp b/xo-procedure2/src/procedure2/ObjectPrimitives.cpp index 1cd00863..f5d7ab15 100644 --- a/xo-procedure2/src/procedure2/ObjectPrimitives.cpp +++ b/xo-procedure2/src/procedure2/ObjectPrimitives.cpp @@ -10,6 +10,7 @@ #include #include #include +#include // for getcwd() namespace xo { using xo::scm::ASequence; @@ -21,6 +22,23 @@ namespace xo { namespace scm { + // ----- cwd ----- + + obj + xfer_cwd(obj rcx) + { + char buf[PATH_MAX]; + ::getcwd(buf, sizeof(buf)); + + return obj(DString::from_cstr(rcx.allocator(), buf)); + } + + DPrimitive_gco_0 * + ObjectPrimitives::make_cwd_pm(obj mm) + { + return DPrimitive_gco_0::_make(mm, "cwd", &xfer_cwd); + } + // ----- nth ----- // TODO: seq_gc -> obj diff --git a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp index c13dd4d3..a5502d68 100644 --- a/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp +++ b/xo-procedure2/src/procedure2/procedure2_register_primitives.cpp @@ -61,6 +61,7 @@ namespace xo { bool ok = true; + ok = ok & install_aux(sink, ObjectPrimitives::make_cwd_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm(mm), flags); ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm(mm), flags);