[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Requiring module extensions



Quoting Robert John Andersen:
>   name = scheme_intern_symbol( "my-mod" );
>   module_env = scheme_primitive_module( name, env );
> 
>   prim = scheme_make_prim_w_arity( prim1, "prim1", 0, 0 );
>   scheme_add_global( "prim1", prim, module );
                                      ------
> 
>   scheme_finish_primitive_module( module_env );

The problem may be simply the underlined `module', which should be
`module_env'. Or maybe that was just a typo in the e-mail message.

The code below (yours, with appropriate wrappers) worked for me when
compiled to "x.so":

 > (load-extension "x.so")
 > (require my-mod)
 > prim1
 #<primitive:prim1>
 > (prim1)
 hello

Does that much work for you, too?

Matthew

----------------------------------------

#include "escheme.h"

Scheme_Object *prim1 (int argc, Scheme_Object  **argv)
{
  return scheme_intern_symbol("hello");
}

Scheme_Object *scheme_reload(Scheme_Env *env)
{
  Scheme_Object *name, *prim;
  Scheme_Env *module_env;
  
  name = scheme_intern_symbol( "my-mod" );
  module_env = scheme_primitive_module( name, env );

  prim = scheme_make_prim_w_arity( prim1, "prim1", 0, 0 );
  scheme_add_global( "prim1", prim, module_env );

  scheme_finish_primitive_module( module_env );

  return scheme_void;
}

Scheme_Object *scheme_initialize(Scheme_Env *env)
{
    return scheme_reload(env);
}