static void import_base_rule( void * r_, void * d_ ) { RULE * r = (RULE *)r_; RULE * ir1; RULE * ir2; struct import_base_data * d = (struct import_base_data *)d_; string qualified_name[ 1 ]; OBJECT * qname; string_new ( qualified_name ); string_append ( qualified_name, object_str( d->base_name ) ); string_push_back( qualified_name, '.' ); string_append ( qualified_name, object_str( r->name ) ); qname = object_new( qualified_name->value ); ir1 = import_rule( r, d->class_module, r->name ); ir2 = import_rule( r, d->class_module, qname ); object_free( qname ); /* Copy 'exported' flag. */ ir1->exported = ir2->exported = r->exported; /* If we are importing a class method, localize it. */ if ( ( r->module == d->base_module ) || ( r->module->class_module && ( r->module->class_module == d->base_module ) ) ) ir1->module = ir2->module = d->class_module; string_free( qualified_name ); }
RULE* duplicate_rule( char* name, RULE* other ) { return import_rule( other, root_module(), name ); }