diff --git a/src/interpreter2/VirtualSchematikaMachine.cpp b/src/interpreter2/VirtualSchematikaMachine.cpp index 1dac6dc6..1b3d338c 100644 --- a/src/interpreter2/VirtualSchematikaMachine.cpp +++ b/src/interpreter2/VirtualSchematikaMachine.cpp @@ -906,6 +906,27 @@ namespace xo { static DPrimitive_gco_0 s_cwd_pm("_cwd", &xfer_cwd); + // ----- primitive: fn_n_args() ----- + + obj + xfer_fn_n_args(obj rcx, + obj fn_gco) + { + scope log(XO_DEBUG(true)); + + log && log(xtag("fn_gco.tseq", fn_gco._typeseq())); + log && log(xtag("fn_gco.tname", TypeRegistry::id2name(fn_gco._typeseq()))); + + auto fn_proc = FacetRegistry::instance().try_variant(fn_gco); + + assert(fn_proc); + + return DInteger::box(rcx.allocator(), fn_proc.n_args()); + } + + static DPrimitive_gco_1_gco s_fn_n_args_pm("_fn_n_args", + &xfer_fn_n_args); + // ----- primitive: dict_make() ----- obj @@ -947,6 +968,18 @@ namespace xo { obj(&s_cwd_pm)); } + /* fn_n_args */ + { + const DUniqueString * name + = reader_.intern_string("fn_n_args"); + + global_env_->_upsert_value + (mm_.to_op(), + name, + Reflect::require(), + obj(&s_fn_n_args_pm)); + } + /* dict_make */ { const DUniqueString * name