xo-interpreter2 stack: modularize nth() primitive setup/install
This commit is contained in:
parent
4c9771126b
commit
e67117c815
6 changed files with 22 additions and 5 deletions
|
|
@ -90,6 +90,7 @@ namespace xo {
|
|||
obj<AAllocator> expr_alloc() const noexcept { return expr_alloc_; }
|
||||
DGlobalSymtab * global_symtab() const noexcept { return global_symtab_.data(); }
|
||||
DLocalSymtab * local_symtab() const noexcept { return local_symtab_; }
|
||||
DGlobalEnv * global_env() const noexcept { return global_env_.data(); }
|
||||
const ParserResult & result() const noexcept { return result_; }
|
||||
|
||||
/** polymoprhihc multiply primitive. Use to implement infix op* **/
|
||||
|
|
|
|||
|
|
@ -184,6 +184,7 @@ namespace xo {
|
|||
///@{
|
||||
|
||||
DGlobalSymtab * global_symtab() const noexcept;
|
||||
DGlobalEnv * global_env() const noexcept;
|
||||
|
||||
bool debug_flag() const { return debug_flag_; }
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ namespace xo {
|
|||
/** top-level symbol table **/
|
||||
DGlobalSymtab * global_symtab() const noexcept;
|
||||
|
||||
/** top-level global environment (e.g. contains built-in primitives) **/
|
||||
DGlobalEnv * global_env() const noexcept;
|
||||
|
||||
/** visit reader-owned memory pools; call visitor(info) for each.
|
||||
* Specifically exclude expr_alloc, since we don't consider
|
||||
* that reader-owned
|
||||
|
|
|
|||
|
|
@ -41,19 +41,17 @@ namespace xo {
|
|||
DGlobalSymtab * global_symtab,
|
||||
InstallFlags pm_install_flags)
|
||||
{
|
||||
scope log(XO_DEBUG(true));
|
||||
|
||||
DGlobalEnv * env = DGlobalEnv::_make(mm,
|
||||
global_symtab);
|
||||
|
||||
InstallSink sink = ([env, mm, &stringtable]
|
||||
InstallSink sink = ([env, mm, &stringtable, &log]
|
||||
(std::string_view name,
|
||||
TypeDescr fn_td,
|
||||
obj<AProcedure> pm,
|
||||
InstallFlags flags)
|
||||
{
|
||||
scope log(XO_DEBUG(false));
|
||||
|
||||
log && log(xtag("name", name));
|
||||
|
||||
(void)flags;
|
||||
|
||||
obj<AGCObject> pm_gco = pm.to_facet<AGCObject>();
|
||||
|
|
@ -61,6 +59,8 @@ namespace xo {
|
|||
const DUniqueString * sym
|
||||
= stringtable.intern(name);
|
||||
|
||||
log && log("upsert", xtag("sym", std::string_view(*sym)));
|
||||
|
||||
env->_upsert_value(mm,
|
||||
sym,
|
||||
fn_td,
|
||||
|
|
|
|||
|
|
@ -42,6 +42,12 @@ namespace xo {
|
|||
return psm_.global_symtab();
|
||||
}
|
||||
|
||||
DGlobalEnv *
|
||||
SchematikaParser::global_env() const noexcept
|
||||
{
|
||||
return psm_.global_env();
|
||||
}
|
||||
|
||||
bool
|
||||
SchematikaParser::is_at_toplevel() const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -32,6 +32,12 @@ namespace xo {
|
|||
return parser_.global_symtab();
|
||||
}
|
||||
|
||||
DGlobalEnv *
|
||||
SchematikaReader::global_env() const noexcept
|
||||
{
|
||||
return parser_.global_env();
|
||||
}
|
||||
|
||||
void
|
||||
SchematikaReader::visit_pools(const MemorySizeVisitor & visitor) const
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue