Class: Rubydex::ClassDefinition
- Inherits:
-
Definition
- Object
- Definition
- Rubydex::ClassDefinition
- Defined in:
- ext/rubydex/definition.c
Instance Method Summary collapse
-
#mixins ⇒ Array[Rubydex::Mixin]
Returns mixins attached to this definition.
-
#raw_name ⇒ String
Returns the class, module, or constant name as written in source, preserving explicit parent scopes like "Foo::Bar" and rooted paths like "::Bar".
-
#superclass ⇒ Rubydex::ConstantReference?
Returns the superclass constant reference, or nil if this class definition has no explicit superclass.
Methods inherited from Definition
#comments, #declaration, #deprecated?, #document, #initialize, #lexical_nesting, #lexical_owner, #location, #name, #name_location
Constructor Details
This class inherits a constructor from Rubydex::Definition
Instance Method Details
#mixins ⇒ Array[Rubydex::Mixin]
Returns mixins attached to this definition.
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 |
# File 'ext/rubydex/definition.c', line 368
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;
}
|
#raw_name ⇒ String
Returns the class, module, or constant name as written in source, preserving explicit parent scopes like "Foo::Bar" and rooted paths like "::Bar".
174 175 176 177 178 179 180 181 182 183 184 |
# File 'ext/rubydex/definition.c', line 174
static VALUE rdxr_definition_raw_name(VALUE self) {
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
const char *name = rdx_definition_raw_name(graph, data->id);
if (name == NULL) {
rb_raise(rb_eRuntimeError, "Definition not found");
}
return rdxi_owned_c_string_to_ruby(name);
}
|
#superclass ⇒ Rubydex::ConstantReference?
Returns the superclass constant reference, or nil if this class definition has no explicit superclass.
335 336 337 338 339 340 341 342 343 344 345 346 347 |
# File 'ext/rubydex/definition.c', line 335
static VALUE rdxr_class_definition_superclass(VALUE self) {
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
const CConstantReference *ref = rdx_class_definition_superclass(graph, data->id);
if (ref == NULL) {
return Qnil;
}
VALUE result = rdxi_build_constant_reference(data->graph_obj, ref);
free_c_constant_reference(ref);
return result;
}
|