From ef7fc21287df316bb462d4dbbbbbb0736a03bd02 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 16 Feb 2026 23:25:34 -0500 Subject: [PATCH] xo-reader2: utest with variable reference. Works ! --- src/expression2/Binding.cpp | 2 +- src/expression2/DGlobalSymtab.cpp | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/expression2/Binding.cpp b/src/expression2/Binding.cpp index 6802ba69..94be9b6b 100644 --- a/src/expression2/Binding.cpp +++ b/src/expression2/Binding.cpp @@ -27,7 +27,7 @@ namespace xo { Binding::print(std::ostream & os) const { if (i_link_ == c_link_global) { - os << "{path:global}"; + os << "{path:global:" << j_slot_ << "}"; } else if (i_link_ == c_link_sentinel) { os << "{path}"; } else { diff --git a/src/expression2/DGlobalSymtab.cpp b/src/expression2/DGlobalSymtab.cpp index 89d10f32..38809a38 100644 --- a/src/expression2/DGlobalSymtab.cpp +++ b/src/expression2/DGlobalSymtab.cpp @@ -69,6 +69,8 @@ namespace xo { DGlobalSymtab::upsert_variable(obj mm, DVariable * var) { + scope log(XO_DEBUG(true), std::string_view(*var->name())); + // It's possible there's already a global variable // with the same name. // @@ -78,6 +80,8 @@ namespace xo { DVariable * existing = this->lookup_variable(var->name()); if (existing) { + log && log("variable with this symbol already exists"); + if (existing == var) { // impossible, but.. noop, right? return; @@ -91,6 +95,8 @@ namespace xo { // (*vars_)[existing->path().j_slot()] = obj(var); } else { + log && log("variable is new"); + DArray::size_type n = vars_->size(); // NOTE: expansion of var_ array here is moot at present (Feb 2026), @@ -146,8 +152,7 @@ namespace xo { { assert(sym); - scope log(XO_DEBUG(true), "stub"); - log && log(xtag("sym", std::string_view(*sym))); + scope log(XO_DEBUG(true), std::string_view(*sym)); auto ix = map_->find(sym);