Class: Rubydex::SingletonClassDefinition

Inherits:
Definition
  • Object
show all
Defined in:
ext/rubydex/definition.c

Instance Method Summary collapse

Methods inherited from Definition

#comments, #declaration, #deprecated?, #initialize, #lexical_nesting, #lexical_owner, #location, #name, #name_location

Constructor Details

This class inherits a constructor from Rubydex::Definition

Instance Method Details

#mixinsArray[Rubydex::Mixin]

Returns mixins attached to this definition.

Returns:



312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
# File 'ext/rubydex/definition.c', line 312

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

    MixinsIter *iter = rdx_definition_mixins(graph, data->id);
    if (iter == NULL) {
        rb_raise(rb_eRuntimeError, "Tried to get mixins for a definition that isn't a namespace");
    }

    size_t len = rdx_mixins_iter_len(iter);
    VALUE ary = rb_ary_new_capa((long)len);

    CMixin entry;
    while (rdx_mixins_iter_next(iter, &entry)) {
        VALUE constant_ref = rdxi_build_constant_reference(data->graph_obj, &entry.constant_reference);
        VALUE mixin_class = rdxi_mixin_class_for_kind(entry.kind);
        VALUE mixin = rb_class_new_instance(1, &constant_ref, mixin_class);
        rb_ary_push(ary, mixin);
    }

    rdx_mixins_iter_free(iter);
    return ary;
}