xo-interpreter: vsm work on environments [WIP]

This commit is contained in:
Roland Conybeare 2026-02-07 23:14:48 -05:00
commit 3221eef2f8
5 changed files with 72 additions and 2 deletions

View file

@ -0,0 +1,29 @@
/** @file DGlobalEnv.hpp
*
* @author Roland Conybeare, Feb 2026
**/
#pragma once
#include <xo/expression2/DGlobalSymtab.hpp>
#include <xo/object2/DList.hpp>
namespace xo {
namespace scm {
/** @brief runtime bindings for global variabels
**/
class DGlobalEnv {
public:
DGLobalEnv() = default;
private:
// absurd O(n) implementation for now
// replace with gc-aware hashtable, when available.
/** globals. Slots in @ref global_v_ are numbered in DLocalSymtab **/
DArray * global_v_ = nullptr;
};
}
}

View file

@ -11,7 +11,7 @@
namespace xo {
namespace scm {
/** @brief bindings for arguments to a lambda
/** @brief runtime bindings for arguments to a lambda
**/
class DLocalEnv {
public:

View file

@ -0,0 +1,2 @@
/** @file DVsmRcx.hpp
n*

View file

@ -194,6 +194,9 @@ namespace xo {
// for VM stack. Only works for code that doesn't rely on fancy
// lexical scoping
// consider separate allocator for reader (i.e. program code)
// and data (program execution)
/** reader: text -> expression **/
SchematikaReader reader_;
@ -206,6 +209,16 @@ namespace xo {
/** expression register **/
obj<AExpression> expr_;
/** environment pointer. Provides bindings
* for surrounding lexical scope at this point
* in execution
**/
DLocalEnv * local_env_ = nullptr;
/** environment pointer. Maintains bindings
* for global variables.
**/
DGlobalEnv * global_env_ = nullptr;
/** function to call **/
obj<AProcedure> fn_;
/** evaluated argument list **/