racket/collects/mzscheme/examples/idmodule.c
2005-05-27 18:56:37 +00:00

45 lines
966 B
C

/*
Extension that declares a module.
The extension is equivalent to Scheme source of them form:
(module idmodule mzscheme
(define (identity x) x)
(provide identity))
*/
#include "escheme.h"
static Scheme_Object *id(int argc, Scheme_Object **argv)
{
return argv[0];
}
Scheme_Object *scheme_reload(Scheme_Env *env)
{
Scheme_Env *menv;
Scheme_Object *proc;
menv = scheme_primitive_module(scheme_intern_symbol("idmodule"),
env);
proc = scheme_make_prim_w_arity(id, "identity", 1, 1);
/* All added names are automatically exported by the module: */
scheme_add_global("identity", proc, menv);
scheme_finish_primitive_module(menv);
return scheme_void;
}
Scheme_Object *scheme_initialize(Scheme_Env *env)
{
/* First load is same as every load: */
return scheme_reload(env);
}
Scheme_Object *scheme_module_name()
{
/* This extension defines a module named `idmodule': */
return scheme_intern_symbol("idmodule");
}