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
6 changes: 6 additions & 0 deletions resect.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,12 @@ typedef enum {
RESECT_CONSTRUCTOR_KIND_OTHER = 5,
} resect_constructor_kind;

typedef enum {
RESECT_REF_QUALIFIER_NONE = 0,
RESECT_REF_QUALIFIER_LVALUE = 1,
RESECT_REF_QUALIFIER_RVALUE = 2
} resect_ref_qualifier;

typedef struct P_resect_translation_unit *resect_translation_unit;
typedef struct P_resect_collection *resect_collection;
typedef struct P_resect_iterator *resect_iterator;
Expand Down
19 changes: 19 additions & 0 deletions src/decl.c
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,7 @@ typedef struct P_resect_function_data {
resect_function_calling_convention calling_convention;
resect_type result_type;
resect_bool inlined;
resect_ref_qualifier ref_qualifier;
} *resect_function_data;

resect_type resect_function_get_result_type(resect_decl decl) {
Expand Down Expand Up @@ -1097,10 +1098,22 @@ resect_function_data resect_function_data_create(resect_visit_context visit_cont
data->variadic = clang_isFunctionTypeVariadic(functionType) != 0 ? resect_true : resect_false;
data->result_type = resect_type_create(visit_context, context, clang_getResultType(functionType));
data->inlined = convert_bool_from_uint(clang_Cursor_isFunctionInlined(cursor));
data->ref_qualifier = convert_ref_qualifier(clang_Type_getCXXRefQualifier(functionType));

return data;
}

resect_ref_qualifier convert_ref_qualifier(enum CXRefQualifierKind qual) {
switch (qual) {
case CXRefQualifier_LValue:
return RESECT_REF_QUALIFIER_LVALUE;
case CXRefQualifier_RValue:
return RESECT_REF_QUALIFIER_RVALUE;
default:
return RESECT_REF_QUALIFIER_NONE;
}
}

void resect_function_init(resect_visit_context visit_context, resect_translation_context context, resect_decl decl,
CXCursor cursor) {
resect_function_data function_data = resect_function_data_create(visit_context, context, cursor);
Expand Down Expand Up @@ -1426,6 +1439,12 @@ resect_collection resect_method_parameters(resect_decl decl) {
return data->function_data->parameters;
}

resect_ref_qualifier resect_method_get_ref_qualifier(resect_decl decl) {
assert(decl->kind == RESECT_DECL_KIND_METHOD);
resect_method_data data = decl->data;
return data->function_data->ref_qualifier;
}

enum CXChildVisitResult resect_visit_method_parameter(CXCursor cursor, CXCursor parent, CXClientData data) {
resect_decl_child_visit_data visit_data = data;
resect_method_data method_data = visit_data->parent->data;
Expand Down
2 changes: 2 additions & 0 deletions src/resect_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,8 @@ resect_decl_visit_data resect_decl_visit_data_create(resect_translation_context

void resect_visit_decl_data_free(resect_decl_visit_data data);

resect_ref_qualifier convert_ref_qualifier(enum CXRefQualifierKind qual);

/*
* TEMPLATE ARGUMENT
*/
Expand Down