47 lines
1.5 KiB
C++
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*/
|