xo-reader2/xo-interpreter/include/xo/interpreter/Env.hpp

47 lines
1.5 KiB
C++

/** @file Env.hpp
*
* @author Roland Conybeare, Nov 2025
**/
#pragma once
#include "xo/alloc/Object.hpp"
#include "xo/refcnt/Refcounted.hpp"
namespace xo {
namespace scm {
class Variable; // see xo::scm::Variable in xo/expression/Variable.hpp
/** @class Env
* @brief runtime environment, holding variable bindings for schematika interpreter
*
* Garbage-collected
*
* TODO: rename xo-expression xo::scm::Environment -> xo::scm::SymbolTable
**/
class Env : public Object {
public:
/** true iff @p vname is present in Symtab for innermost environment **/
virtual bool local_contains_var(const std::string & vname) const = 0;
/** Fetch storage location for innermost binding of variable with name @p vname.
* nullptr if not found
**/
virtual gp<Object> * lookup_slot(const std::string & vname) = 0;
/** require storage for variable @p v.
* will also establish binding path.
*
* Intended for introducing a new variable,
* replacing any previous variable with the same name.
*
* Beware of invalidating type correctness
*
* @return slot address for runtime value of @p v
**/
virtual gp<Object> * establish_var(bp<Variable> v) = 0;
//gp<Object> lookup_symbol(const std::string & name) const;
};
} /*namespace scm*/
} /*namespace xo*/