text: /* Copyright 2003. Vladimir Prus
   * Distributed under the Boost Software License, Version 1.0.
   * (See accompanying file LICENSE_1_0.txt or copy at
   * http://www.boost.org/LICENSE_1_0.txt)
   */
  
  #include "native.h"
  
  #include "hash.h"
  
  #include <assert.h>
  
  
  void declare_native_rule( char const * module, char const * rule,
      char const * * args, LIST * (*f)( FRAME *, int ), int version )
  {
      OBJECT * const module_obj = module ? object_new( module ) : 0 ;
      module_t * m = bindmodule( module_obj );
      if ( module_obj )
          object_free( module_obj );
      if ( !m->native_rules )
          m->native_rules = hashinit( sizeof( native_rule_t ), "native rules" );
  
      {
          OBJECT * const name = object_new( rule );
          int found;
          native_rule_t * const np = (native_rule_t *)hash_insert(
              m->native_rules, name, &found );
          np->name = name;
          assert( !found );
          np->procedure = function_builtin( f, 0, args );
          np->version = version;
      }
  }
  