Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 19 additions & 84 deletions ext/rubydex/declaration.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,10 @@ VALUE rdxi_declaration_class_for_kind(CDeclarationKind kind) {
*/
static VALUE rdxr_declaration_name(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
void *graph = rdxi_graph_from_handle(self, &data);
const char *name = rdx_declaration_name(graph, data->id);

if (name == NULL) {
return Qnil;
}

VALUE str = rb_utf8_str_new_cstr(name);
free_c_string(name);

return str;
return rdxi_owned_c_string_to_ruby(name);
}

/*
Expand All @@ -83,20 +73,10 @@ static VALUE rdxr_declaration_name(VALUE self) {
*/
static VALUE rdxr_declaration_unqualified_name(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
void *graph = rdxi_graph_from_handle(self, &data);
const char *name = rdx_declaration_unqualified_name(graph, data->id);

if (name == NULL) {
return Qnil;
}

VALUE str = rb_utf8_str_new_cstr(name);
free_c_string(name);

return str;
return rdxi_owned_c_string_to_ruby(name);
}

// Body function for rb_ensure in Declaration#definitions
Expand Down Expand Up @@ -130,10 +110,7 @@ static VALUE declaration_definitions_ensure(VALUE args) {
// Size function for the Declaration#definitions enumerator
static VALUE declaration_definitions_size(VALUE self, VALUE _args, VALUE _eobj) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
void *graph = rdxi_graph_from_handle(self, &data);
struct DefinitionsIter *iter = rdx_declaration_definitions_iter_new(graph, data->id);
size_t len = rdx_definitions_iter_len(iter);
rdx_definitions_iter_free(iter);
Expand All @@ -153,10 +130,7 @@ static VALUE rdxr_declaration_definitions(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_definitions_iter_new(graph, data->id);
VALUE args = rb_ary_new_from_args(2, self, ULL2NUM((uintptr_t)iter));
Expand All @@ -173,10 +147,7 @@ static VALUE rdxr_declaration_definitions(VALUE self) {
*/
static VALUE rdxr_declaration_member(VALUE self, VALUE name) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

if (TYPE(name) != T_STRING) {
rb_raise(rb_eTypeError, "expected String");
Expand Down Expand Up @@ -217,10 +188,7 @@ static VALUE rdxr_declaration_find_member(int argc, VALUE *argv, VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
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) {
Expand All @@ -242,10 +210,7 @@ static VALUE rdxr_declaration_find_member(int argc, VALUE *argv, VALUE self) {
*/
static VALUE rdxr_declaration_singleton_class(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
void *graph = rdxi_graph_from_handle(self, &data);
const CDeclaration *decl = rdx_declaration_singleton_class(graph, data->id);

if (decl == NULL) {
Expand All @@ -267,10 +232,7 @@ static VALUE rdxr_declaration_singleton_class(VALUE self) {
*/
static VALUE rdxr_declaration_owner(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

void *graph;
TypedData_Get_Struct(data->graph_obj, void *, &graph_type, graph);
void *graph = rdxi_graph_from_handle(self, &data);
const CDeclaration *decl = rdx_declaration_owner(graph, data->id);

if (decl == NULL) {
Expand All @@ -296,10 +258,7 @@ static VALUE rdxr_declaration_ancestors(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_ancestors(graph, data->id);
if (iter == NULL) {
Expand All @@ -324,10 +283,7 @@ static VALUE rdxr_declaration_descendants(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_descendants(graph, data->id);
if (iter == NULL) {
Expand All @@ -352,10 +308,7 @@ static VALUE rdxr_declaration_members(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_members(graph, data->id);
if (iter == NULL) {
Expand All @@ -371,10 +324,7 @@ static VALUE rdxr_declaration_members(VALUE self) {
// Size function for constant declaration references enumerator
static VALUE constant_declaration_references_size(VALUE self, VALUE _args, VALUE _eobj) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

struct ConstantReferencesIter *iter = rdx_declaration_constant_references_iter_new(graph, data->id);
if (iter == NULL) {
Expand All @@ -399,10 +349,7 @@ static VALUE rdxr_constant_declaration_references(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_constant_references_iter_new(graph, data->id);
if (iter == NULL) {
Expand All @@ -418,10 +365,7 @@ static VALUE rdxr_constant_declaration_references(VALUE self) {
// Size function for method declaration references enumerator
static VALUE method_declaration_references_size(VALUE self, VALUE _args, VALUE _eobj) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

struct MethodReferencesIter *iter = rdx_declaration_method_references_iter_new(graph, data->id);
if (iter == NULL) {
Expand All @@ -446,10 +390,7 @@ static VALUE rdxr_method_declaration_references(VALUE self) {
}

HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

void *iter = rdx_declaration_method_references_iter_new(graph, data->id);
if (iter == NULL) {
Expand Down Expand Up @@ -493,10 +434,7 @@ static VALUE rdxi_visibility_to_symbol(CVisibility visibility) {
*/
static VALUE rdxr_declaration_visibility(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const CVisibility *visibility = rdx_graph_visibility(graph, data->id);
if (visibility == NULL) {
Expand All @@ -518,10 +456,7 @@ static VALUE rdxr_declaration_visibility(VALUE self) {
*/
static VALUE rdxr_constant_alias_target(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const CDeclaration *decl = rdx_constant_alias_target(graph, data->id);
if (decl == NULL) {
Expand Down
73 changes: 15 additions & 58 deletions ext/rubydex/definition.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "signature.h"
#include "ruby/internal/scan_args.h"
#include "rustbindings.h"
#include "utils.h"

/*
* RDoc parser workaround for https://github.com/ruby/rdoc/issues/1744:
Expand Down Expand Up @@ -84,10 +85,7 @@ VALUE rdxi_definition_class_for_kind(DefinitionKind kind) {
*/
static VALUE rdxr_definition_location(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

Location *loc = rdx_definition_location(graph, data->id);
VALUE location = rdxi_build_location_value(loc);
Expand All @@ -104,10 +102,7 @@ static VALUE rdxr_definition_location(VALUE self) {
*/
static VALUE rdxr_definition_comments(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

CommentArray *arr = rdx_definition_comments(graph, data->id);
if (arr == NULL || arr->len == 0) {
Expand Down Expand Up @@ -147,18 +142,10 @@ static VALUE rdxr_definition_comments(VALUE self) {
*/
static VALUE rdxr_definition_name(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const char *name = rdx_definition_name(graph, data->id);
if (name == NULL) {
return Qnil;
}
VALUE str = rb_utf8_str_new_cstr(name);
free_c_string(name);
return str;
return rdxi_owned_c_string_to_ruby(name);
}

/*
Expand All @@ -169,10 +156,7 @@ static VALUE rdxr_definition_name(VALUE self) {
*/
static VALUE rdxr_definition_deprecated(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

bool deprecated = rdx_definition_is_deprecated(graph, data->id);
return deprecated ? Qtrue : Qfalse;
Expand All @@ -187,10 +171,7 @@ static VALUE rdxr_definition_deprecated(VALUE self) {
*/
static VALUE rdxr_definition_name_location(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

Location *loc = rdx_definition_name_location(graph, data->id);
if (loc == NULL) {
Expand All @@ -210,10 +191,7 @@ static VALUE rdxr_definition_name_location(VALUE self) {
*/
static VALUE rdxr_definition_declaration(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const struct CDeclaration *decl = rdx_definition_declaration(graph, data->id);
if (decl == NULL) {
Expand Down Expand Up @@ -243,10 +221,7 @@ static VALUE rdxi_build_definition(VALUE graph_obj, void *graph, uint64_t defini
*/
static VALUE rdxr_definition_lexical_owner(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const uint64_t *owner_id = rdx_definition_lexical_nesting_id(graph, data->id);
if (owner_id == NULL) {
Expand All @@ -267,10 +242,7 @@ static VALUE rdxr_definition_lexical_owner(VALUE self) {
*/
static VALUE rdxr_definition_lexical_nesting(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

VALUE nesting = rb_ary_new();
uint64_t definition_id = data->id;
Expand Down Expand Up @@ -306,10 +278,7 @@ static VALUE rdxi_build_constant_reference(VALUE graph_obj, const CConstantRefer
*/
static VALUE rdxr_class_definition_superclass(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

const CConstantReference *ref = rdx_class_definition_superclass(graph, data->id);
if (ref == NULL) {
Expand Down Expand Up @@ -342,10 +311,7 @@ static VALUE rdxi_mixin_class_for_kind(MixinKind kind) {
*/
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);
void *graph = rdxi_graph_from_handle(self, &data);

MixinsIter *iter = rdx_definition_mixins(graph, data->id);
if (iter == NULL) {
Expand Down Expand Up @@ -375,10 +341,7 @@ static VALUE rdxr_definition_mixins(VALUE self) {
*/
static VALUE rdxr_method_definition_signatures(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

SignatureArray *arr = rdx_definition_signatures(graph, data->id);
return rdxi_signatures_to_ruby(arr);
Expand All @@ -392,10 +355,7 @@ static VALUE rdxr_method_definition_signatures(VALUE self) {
*/
static VALUE rdxr_method_alias_definition_signatures(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

SignatureArray *arr = rdx_method_alias_definition_signatures(graph, data->id);
return rdxi_signatures_to_ruby(arr);
Expand All @@ -410,10 +370,7 @@ static VALUE rdxr_method_alias_definition_signatures(VALUE self) {
*/
static VALUE rdxr_method_alias_definition_target(VALUE self) {
HandleData *data;
TypedData_Get_Struct(self, HandleData, &handle_type, data);

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

CMethodAliasTargetResult result = rdx_method_alias_definition_target(graph, data->id);

Expand Down
Loading
Loading