Class: Rubydex::Method

Inherits:
Declaration show all
Includes:
Visibility
Defined in:
lib/rubydex/declaration.rb,
ext/rubydex/declaration.c

Instance Method Summary collapse

Methods included from Visibility

#private?, #protected?, #public?

Methods inherited from Declaration

#definitions, #initialize, #name, #owner, #unqualified_name

Constructor Details

This class inherits a constructor from Rubydex::Declaration

Instance Method Details

#referencesObject

Returns an enumerator that yields method references to this declaration



382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
# File 'ext/rubydex/declaration.c', line 382

static VALUE rdxr_method_declaration_references(VALUE self) {
    if (!rb_block_given_p()) {
        return rb_enumeratorize_with_size(self, rb_str_new2("references"), 0, NULL,
                                          method_declaration_references_size);
    }

    HandleData *data;
    TypedData_Get_Struct(self, HandleData, &handle_type, data);

    void *graph;
    TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);

    void *iter = rdx_declaration_method_references_iter_new(graph, data->id);
    if (iter == NULL) {
        rb_raise(rb_eRuntimeError, "Declaration not found");
    }

    VALUE args = rb_ary_new_from_args(2, data->graph_obj, ULL2NUM((uintptr_t)iter));
    rb_ensure(rdxi_method_references_yield, args, rdxi_method_references_ensure, args);

    return self;
}

#visibilityObject

Declaration#visibility -> Symbol



424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# File 'ext/rubydex/declaration.c', line 424

static VALUE rdxr_declaration_visibility(VALUE self) {
    HandleData *data;
    TypedData_Get_Struct(self, HandleData, &handle_type, data);

    void *graph;
    TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);

    const CVisibility *visibility = rdx_graph_visibility(graph, data->id);
    if (visibility == NULL) {
        rb_raise(rb_eRuntimeError, "declaration has no visibility");
    }

    VALUE symbol = rdxi_visibility_to_symbol(*visibility);
    free_c_visibility(visibility);

    return symbol;
}