Class: Rubydex::SingletonClassDefinition

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

Instance Method Summary collapse

Methods inherited from Definition

#comments, #deprecated?, #initialize, #location, #name, #name_location

Constructor Details

This class inherits a constructor from Rubydex::Definition

Instance Method Details

#mixinsObject

Definition#mixins -> [Rubydex::Mixin]



215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'ext/rubydex/definition.c', line 215

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

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

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