class Rubydex::Namespace
Public Instance Methods
static VALUE rdxr_declaration_ancestors(VALUE self) {
if (!rb_block_given_p()) {
return rb_enumeratorize(self, rb_str_new2("ancestors"), 0, NULL);
}
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
void *iter = rdx_declaration_ancestors(graph, data->id);
if (iter == NULL) {
rb_raise(rb_eRuntimeError, "failed to create iterator");
}
VALUE args = rb_ary_new_from_args(2, data->graph_obj, ULL2NUM((uintptr_t)iter));
rb_ensure(rdxi_declarations_yield, args, rdxi_declarations_ensure, args);
return self;
}
Returns an enumerator that yields ancestor namespaces.
static VALUE rdxr_declaration_descendants(VALUE self) {
if (!rb_block_given_p()) {
return rb_enumeratorize(self, rb_str_new2("descendants"), 0, NULL);
}
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
void *iter = rdx_declaration_descendants(graph, data->id);
if (iter == NULL) {
rb_raise(rb_eRuntimeError, "failed to create iterator");
}
VALUE args = rb_ary_new_from_args(2, data->graph_obj, ULL2NUM((uintptr_t)iter));
rb_ensure(rdxi_declarations_yield, args, rdxi_declarations_ensure, args);
return self;
}
Returns an enumerator that yields descendant namespaces.
static VALUE rdxr_declaration_find_member(int argc, VALUE *argv, VALUE self) {
VALUE member, opts;
rb_scan_args(argc, argv, "1:", &member, &opts);
Check_Type(member, T_STRING);
bool only_inherited = false;
if (!NIL_P(opts)) {
ID kwarg_id = rb_intern("only_inherited");
VALUE kwarg_val;
rb_get_kwargs(opts, &kwarg_id, 0, 1, &kwarg_val);
if (kwarg_val != Qundef) {
only_inherited = RTEST(kwarg_val);
}
}
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
const CDeclaration *decl = rdx_declaration_find_member(graph, data->id, StringValueCStr(member), only_inherited);
if (decl == NULL) {
return Qnil;
}
VALUE decl_class = rdxi_declaration_class_for_kind(decl->kind);
VALUE result_argv[] = {data->graph_obj, ULL2NUM(decl->id)};
free_c_declaration(decl);
return rb_class_new_instance(2, result_argv, decl_class);
}
Searches for a member in the declaration’s ancestor chain.
(*String ancestor_names) → bool
Source
# File lib/rubydex/declaration.rb, line 25 def has_ancestor?(*ancestor_names) ancestors.any? { |ancestor| ancestor_names.include?(ancestor.name) } end
static VALUE rdxr_declaration_member(VALUE self, VALUE name) {
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
if (TYPE(name) != T_STRING) {
rb_raise(rb_eTypeError, "expected String");
}
const CDeclaration *decl = rdx_declaration_member(graph, data->id, StringValueCStr(name));
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);
}
Returns a declaration handle for the named member, or nil if no member exists.
static VALUE rdxr_declaration_members(VALUE self) {
if (!rb_block_given_p()) {
return rb_enumeratorize(self, rb_str_new2("members"), 0, NULL);
}
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
void *iter = rdx_declaration_members(graph, data->id);
if (iter == NULL) {
rb_raise(rb_eRuntimeError, "failed to create iterator");
}
VALUE args = rb_ary_new_from_args(2, data->graph_obj, ULL2NUM((uintptr_t)iter));
rb_ensure(rdxi_declarations_yield, args, rdxi_declarations_ensure, args);
return self;
}
Returns an enumerator that yields member declarations.
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;
}
Returns an enumerator that yields constant references to this declaration.
static VALUE rdxr_declaration_singleton_class(VALUE self) {
HandleData *data;
void *graph = rdxi_graph_from_handle(self, &data);
const CDeclaration *decl = rdx_declaration_singleton_class(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);
}
Returns the singleton class declaration, or nil if none exists.