Class: Rubydex::ConstantAlias

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

#referencesEnumerator[Rubydex::ConstantReference]

Returns an enumerator that yields constant references to this declaration.

Returns:



345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
# File 'ext/rubydex/declaration.c', line 345

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

    HandleData *data;
    void *graph = rdxi_graph_from_handle(self, &data);

    void *iter = rdx_declaration_constant_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_constant_references_yield, args, rdxi_constant_references_ensure, args);

    return self;
}

#targetRubydex::Declaration?

Returns the first resolved target declaration for this constant alias, or nil if none of its definitions resolved to a target.

Returns:



457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
# File 'ext/rubydex/declaration.c', line 457

static VALUE rdxr_constant_alias_target(VALUE self) {
    HandleData *data;
    void *graph = rdxi_graph_from_handle(self, &data);

    const CDeclaration *decl = rdx_constant_alias_target(graph, data->id);
    if (decl == NULL) {
        return Qnil;
    }

    VALUE decl_class = rdxi_declaration_class_for_kind(decl->kind);
    VALUE argv[] = {data->graph_obj, ULL2NUM(decl->id)};
    free_c_declaration(decl);

    return rb_class_new_instance(2, argv, decl_class);
}

#visibilitySymbol

Returns the declaration visibility.

Returns:

  • (Symbol)


435
436
437
438
439
440
441
442
443
444
445
446
447
448
# File 'ext/rubydex/declaration.c', line 435

static VALUE rdxr_declaration_visibility(VALUE self) {
    HandleData *data;
    void *graph = rdxi_graph_from_handle(self, &data);

    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;
}