16 using namespace opencog;
21 #define C(X) ((scm_t_subr) X)
23 #define C(X) ((SCM (*) ()) X)
39 scm_c_use_module(
"opencog extension");
46 scm_c_define_gsubr(
"opencog-extension", 2,0,0,
C(
do_call));
49 scm_c_export(
"opencog-extension", NULL);
55 const char *name,
int nargs)
83 const char *name,
int nargs)
88 scm_gc_register_collectable_memory (
this,
get_size(),
89 "opencog primitive environ");
92 std::string modn =
"opencog ";
94 SCM module = scm_c_define_module(modn.c_str(), NULL, NULL);
95 scm_c_use_module(modn.c_str());
106 snprintf(buff,
BUFLEN,
"cog-prim-%p",
this);
107 scm_c_module_define(module, buff, smob);
109 std::string wrapper =
"(use-modules (opencog extension))";
110 wrapper +=
"(define-public (";
112 for (
int i=0; i<nargs; i++)
118 wrapper +=
") (opencog-extension ";
121 for (
int i=0; i<nargs; i++)
128 scm_c_eval_string_in_module(wrapper.c_str(), module);
148 catch (
const std::exception& ex)
156 scm_remember_upto_here_1(sfe);
163 scm_wrong_type_arg_msg(subrname, 1, spe,
"opencog primitive function");
165 scm_t_bits misctype = SCM_SMOB_FLAGS(spe);
167 scm_wrong_type_arg_msg(subrname, 1, spe,
"opencog primitive function");
virtual SCM invoke(SCM)=0
static SCM do_call(SCM, SCM)
static void throw_exception(const char *, const char *)
static scm_t_bits cog_misc_tag
virtual ~PrimitiveEnviron()
static void * c_wrap_register(void *)
void do_register(const char *, const char *, int)
void really_do_register(const char *, const char *, int)
virtual const char * get_name(void)=0
static PrimitiveEnviron * verify_pe(SCM, const char *)
static void init_in_module(void *)
virtual size_t get_size(void)=0