xo-interpreter2 stack: + more primitive function-type decoration

This commit is contained in:
Roland Conybeare 2026-03-16 12:34:59 -05:00
commit 7bfe5d9586
8 changed files with 76 additions and 22 deletions

View file

@ -40,13 +40,16 @@ namespace xo {
StringTable * stbl);
/** create primitive for creating a dictionary instance **/
static DPrimitive_gco_2_dict_string * make_dict_lookup_pm(obj<AAllocator> mm);
static DPrimitive_gco_2_dict_string * make_dict_lookup_pm(obj<AAllocator> mm,
StringTable * stbl);
/** create primitive that upserts a key,value pair into a dictionary **/
static DPrimitive_gco_3_dict_string_gco * make_dict_upsert_pm(obj<AAllocator> mm);
static DPrimitive_gco_3_dict_string_gco * make_dict_upsert_pm(obj<AAllocator> mm,
StringTable * stbl);
/** create primitive: get fixed number of args for function **/
static DPrimitive_gco_1_gco * make_fn_n_args_pm(obj<AAllocator> mm);
static DPrimitive_gco_1_gco * make_fn_n_args_pm(obj<AAllocator> mm,
StringTable * stbl);
};
} /*namespace scm*/

View file

@ -163,9 +163,21 @@ namespace xo {
}
DPrimitive_gco_2_dict_string *
ObjectPrimitives::make_dict_lookup_pm(obj<AAllocator> mm)
ObjectPrimitives::make_dict_lookup_pm(obj<AAllocator> mm,
StringTable * stbl)
{
return DPrimitive_gco_2_dict_string::_make(mm, "dict_lookup", &xfer_dict_lookup);
(void)stbl;
// dict_ty: generic dictionary
auto dict_ty = DAtomicType::make(mm, Metatype::t_dict());
auto str_ty = DAtomicType::make(mm, Metatype::t_str());
auto any_ty = DAtomicType::make(mm, Metatype::t_any());
// pm_ty: dict x string -> any
auto pm_ty = obj<AType,DFunctionType>
(DFunctionType::_make(mm, any_ty, dict_ty, str_ty));
return DPrimitive_gco_2_dict_string::_make
(mm, "dict_lookup", pm_ty, &xfer_dict_lookup);
}
// ----- dict_upsert -----
@ -196,9 +208,23 @@ namespace xo {
}
DPrimitive_gco_3_dict_string_gco *
ObjectPrimitives::make_dict_upsert_pm(obj<AAllocator> mm)
ObjectPrimitives::make_dict_upsert_pm(obj<AAllocator> mm,
StringTable * stbl)
{
return DPrimitive_gco_3_dict_string_gco::_make(mm, "dict_upsert", &xfer_dict_upsert);
(void)stbl;
auto dict_ty = DAtomicType::make(mm, Metatype::t_dict());
auto str_ty = DAtomicType::make(mm, Metatype::t_str());
auto any_ty = DAtomicType::make(mm, Metatype::t_any());
// pm_ty: dict x string x any -> dict
auto pm_ty = obj<AType,DFunctionType>(DFunctionType::_make(mm,
dict_ty,
dict_ty,
str_ty,
any_ty));
return DPrimitive_gco_3_dict_string_gco::_make
(mm, "dict_upsert", pm_ty, &xfer_dict_upsert);
}
// ----- fn_n_args -----
@ -220,9 +246,18 @@ namespace xo {
}
DPrimitive_gco_1_gco *
ObjectPrimitives::make_fn_n_args_pm(obj<AAllocator> mm)
ObjectPrimitives::make_fn_n_args_pm(obj<AAllocator> mm,
StringTable * stbl)
{
return DPrimitive_gco_1_gco::_make(mm, "fn_n_args", &xfer_fn_n_args);
(void)stbl;
auto integer_ty = DAtomicType::make(mm, Metatype::t_integer());
auto callable_ty = DAtomicType::make(mm, Metatype::t_callable());
auto pm_ty = obj<AType,DFunctionType>(DFunctionType::_make(mm,
integer_ty,
callable_ty));
return DPrimitive_gco_1_gco::_make(mm, "fn_n_args", pm_ty, &xfer_fn_n_args);
}
} /*namespace scm*/

View file

@ -62,13 +62,13 @@ namespace xo {
bool ok = true;
ok = ok & install_aux(sink, ObjectPrimitives::make_cwd_pm(mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm(mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm(mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm(mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_lookup_pm(mm), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm(mm), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_fn_n_args_pm(mm), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_cwd_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_nth_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_cons_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_make_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_lookup_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_dict_upsert_pm (mm, stbl), flags);
ok = ok & install_aux(sink, ObjectPrimitives::make_fn_n_args_pm (mm, stbl), flags);
return ok;
}