From 6cd861f47e44d8e0431ef5eeea194b8996de915f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 17 Jan 2026 01:11:50 -0500 Subject: [PATCH] xo-expression2: scaffold variable eval in VSM --- xo-expression2/include/xo/expression2/exprtype.hpp | 2 ++ .../include/xo/interpreter2/VirtualSchematikaMachine.hpp | 8 ++++++++ .../src/interpreter2/VirtualSchematikaMachine.cpp | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/xo-expression2/include/xo/expression2/exprtype.hpp b/xo-expression2/include/xo/expression2/exprtype.hpp index cf66d39e..0d5e8299 100644 --- a/xo-expression2/include/xo/expression2/exprtype.hpp +++ b/xo-expression2/include/xo/expression2/exprtype.hpp @@ -31,8 +31,10 @@ namespace xo { apply, /** function definition **/ lambda, +#endif /** variable reference **/ variable, +#ifdef NOT_YET /** if-then-else **/ ifexpr, /** sequence **/ diff --git a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp index 6facb3fb..8bbe6bb4 100644 --- a/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp +++ b/xo-interpreter2/include/xo/interpreter2/VirtualSchematikaMachine.hpp @@ -45,6 +45,12 @@ namespace xo { **/ void _do_eval_constant_op(); + /** evaluate a variable expression + * Require: + * - expression in @ref expr_ + **/ + void _do_eval_variable_op(); + private: /* * Some registers are preserved by evaluation: @@ -60,8 +66,10 @@ namespace xo { /** program counter **/ VsmInstr pc_ = VsmInstr::halt(); +#ifdef NOT_YET /** stack pointer **/ Stack stack_; +#endif /** expression register **/ obj expr_; diff --git a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp index 012b16f6..bd29e968 100644 --- a/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/xo-interpreter2/src/interpreter2/VirtualSchematikaMachine.cpp @@ -45,6 +45,9 @@ namespace xo { case exprtype::constant: _do_eval_constant_op(); break; + case exprtype::variable: + _do_eval_variable_op(); + break; } } @@ -58,6 +61,12 @@ namespace xo { this->pc_ = this->cont_; } + void + VirtualSchematikaMachine::_do_eval_variable_op() + { + // not implemented + assert(false); + } } /*namespace scm*/ } /*namespace xo*/