xo-expression2: + Binding etc

This commit is contained in:
Roland Conybeare 2026-01-17 01:10:33 -05:00
commit d6b29241fd
3 changed files with 49 additions and 2 deletions

View file

@ -0,0 +1,46 @@
/** @file Binding.hpp
*
* @author Roland Conybeare, Jan 2026
**/
#pragma once
#include <cstdint>
namespace xo {
namespace scm {
class Binding {
public:
static constexpr int32_t s_link_sentinel = -2;
static constexpr int32_t s_link_global = -1;
public:
Binding(int32_t i_link, int32_t j_slot)
: i_link_{i_link}, j_slot_{j_slot} {}
/** global bindings are located by symbol name **/
static Binding global() { return Binding(s_link_global, 0); }
static Binding local(int32_t j_slot) { return Binding(0, j_slot); }
bool is_global() const { return i_link_ == s_link_global; }
int32_t i_link() const noexcept { return i_link_; }
int32_t j_slot() const noexcept { return j_slot_; }
private:
/**
* >= 0: number of parent links to traverse
* to a fixed-size frame
* -1: resolve globally
**/
int32_t i_link_ = s_link_sentinel;
/** if @ref i_link_ >= 0, frame offset
* (in 'variables' not bytes).
* ignored if @ref i_link_ is global
**/
int32_t j_slot_ = -1;
};
} /*namespace scm*/
} /*namespace xo*/
/* Binding.hpp */

View file

@ -40,7 +40,7 @@ namespace xo {
*
* Legend
* header 8 byte allocation header
* u 1 byte DUniqueString placholder (c++ insists)
* u 1 byte DUniqueString placeholder (c++ insists)
* padding 7 bytes allocator-imposed padding to 8-byte alignment
* cap 4 bytes DString.capacity
* size 4 bytes DString.size

View file

@ -11,7 +11,8 @@
namespace xo {
namespace scm {
/** @class TypeRef
* @brief name and (when established) resolution for type associate with an expression
* @brief name and (when established) resolution for type
* associated with an expression
*
* Type inference / unification operates on
* @ref xo::scm::TypeBlueprint instances. See also!