From 3e53b0d10a68c6b70c6b31c155a55bf922ed83e7 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 14 Feb 2026 13:06:54 -0500 Subject: [PATCH] xo-expression2 stack: + mvp DGlobalSymtab impl --- include/xo/object2/DArray.hpp | 7 +++++++ src/object2/DArray.cpp | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/xo/object2/DArray.hpp b/include/xo/object2/DArray.hpp index c6f2522..7b75886 100644 --- a/include/xo/object2/DArray.hpp +++ b/include/xo/object2/DArray.hpp @@ -58,6 +58,13 @@ namespace xo { static DArray * empty(obj mm, size_type cap); + /** create copy of @p src using memory from @p mm + * with capacity for @p new_cap elements + **/ + static DArray * copy(obj mm, + DArray * src, + size_type new_cap); + /** create array containing elements @p args, using memory from @p mm. * Nullptr if space exhausted. * diff --git a/src/object2/DArray.cpp b/src/object2/DArray.cpp index 237c9af..e1414ee 100644 --- a/src/object2/DArray.cpp +++ b/src/object2/DArray.cpp @@ -37,6 +37,23 @@ namespace xo { return result; } + DArray * + DArray::copy(obj mm, + DArray * src, + size_type new_cap) + { + DArray * dest = empty(mm, new_cap); + + /** could just memcpy here **/ + for (size_type i = 0, n = src->size(); i < n; ++i) { + dest->elts_[i] = src->elts_[i]; + } + + dest->size_ = src->size(); + + return dest; + } + obj DArray::at(size_type ix) const {