class FFI::Clang::Cursor

Attributes

cursor[R]
translation_unit[R]

Public Class Methods

kind_spelling(kind) click to toggle source

this function is categorized as “Debugging facilities”

# File lib/ffi/clang/cursor.rb, line 40
def self.kind_spelling(kind)
        Lib.extract_string Lib.get_cursor_kind_spelling(kind)
end
new(cxcursor, translation_unit) click to toggle source
# File lib/ffi/clang/cursor.rb, line 44
def initialize(cxcursor, translation_unit)
        @cursor = cxcursor
        @translation_unit = translation_unit
end
null_cursor() click to toggle source
# File lib/ffi/clang/cursor.rb, line 35
def self.null_cursor
        Cursor.new Lib.get_null_cursor, nil
end

Public Instance Methods

==(other) click to toggle source
# File lib/ffi/clang/cursor.rb, line 337
def ==(other)
        Lib.are_equal(@cursor, other.cursor) != 0
end
access_specifier() click to toggle source
# File lib/ffi/clang/cursor.rb, line 225
def access_specifier
        Lib.get_cxx_access_specifier @cursor
end
argument(i) click to toggle source
# File lib/ffi/clang/cursor.rb, line 327
def argument(i)
        Cursor.new Lib.cursor_get_argument(@cursor, i), @translation_unit
end
attribute?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 85
def attribute?
        Lib.is_attribute(kind) != 0
end
availability() click to toggle source
# File lib/ffi/clang/cursor.rb, line 249
def availability
        Lib.get_cursor_availability(@cursor)
end
bitfield?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 307
def bitfield?
        Lib.is_bit_field(@cursor) != 0
end
bitwidth() click to toggle source
# File lib/ffi/clang/cursor.rb, line 311
def bitwidth
        Lib.get_field_decl_bit_width(@cursor)
end
canonical() click to toggle source
# File lib/ffi/clang/cursor.rb, line 201
def canonical
        Cursor.new Lib.get_canonical_cursor(@cursor), @translation_unit
end
comment() click to toggle source
# File lib/ffi/clang/cursor.rb, line 57
def comment
        Comment.build_from Lib.cursor_get_parsed_comment(@cursor)
end
comment_range() click to toggle source
# File lib/ffi/clang/cursor.rb, line 61
def comment_range
        SourceRange.new(Lib.cursor_get_comment_range(@cursor))
end
completion() click to toggle source
# File lib/ffi/clang/cursor.rb, line 65
def completion
        CodeCompletion::String.new Lib.get_cursor_completion_string(@cursor)
end
declaration?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 69
def declaration?
        Lib.is_declaration(kind) != 0
end
definition() click to toggle source
# File lib/ffi/clang/cursor.rb, line 205
def definition
        Cursor.new Lib.get_cursor_definition(@cursor), @translation_unit
end
definition?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 173
def definition?
        Lib.is_definition(@cursor) != 0
end
display_name() click to toggle source
# File lib/ffi/clang/cursor.rb, line 125
def display_name
        Lib.extract_string Lib.get_cursor_display_name(@cursor)
end
dynamic_call?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 165
def dynamic_call?
        Lib.is_dynamic_call(@cursor) != 0
end
enum_decl_integer_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 157
def enum_decl_integer_type
        Type.new Lib.get_enum_decl_integer_type(@cursor), @translation_unit
end
enum_unsigned_value() click to toggle source
# File lib/ffi/clang/cursor.rb, line 193
def enum_unsigned_value
        Lib.get_enum_unsigned_value @cursor
end
enum_value() click to toggle source
# File lib/ffi/clang/cursor.rb, line 189
def enum_value
        Lib.get_enum_value @cursor
end
expression?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 77
def expression?
        Lib.is_expression(kind) != 0
end
extent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 121
def extent
        SourceRange.new(Lib.get_cursor_extent(@cursor))
end
hash() click to toggle source
# File lib/ffi/clang/cursor.rb, line 303
def hash
        Lib.get_cursor_hash(@cursor)
end
included_file() click to toggle source
# File lib/ffi/clang/cursor.rb, line 253
def included_file
        File.new Lib.get_included_file(@cursor), @translation_unit
end
invalid?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 101
def invalid?
        Lib.is_invalid(kind) != 0
end
kind() click to toggle source
# File lib/ffi/clang/cursor.rb, line 137
def kind
        @cursor[:kind]
end
kind_spelling() click to toggle source
# File lib/ffi/clang/cursor.rb, line 141
def kind_spelling
        Cursor.kind_spelling @cursor[:kind]
end
language() click to toggle source
# File lib/ffi/clang/cursor.rb, line 229
def language
        Lib.get_language @cursor
end
lexical_parent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 217
def lexical_parent
        Cursor.new Lib.get_cursor_lexical_parent(@cursor), @translation_unit
end
linkage() click to toggle source
# File lib/ffi/clang/cursor.rb, line 245
def linkage
        Lib.get_cursor_linkage(@cursor)
end
location() click to toggle source
# File lib/ffi/clang/cursor.rb, line 117
def location
        ExpansionLocation.new(Lib.get_cursor_location(@cursor))
end
null?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 49
def null?
        Lib.cursor_is_null(@cursor) != 0
end
num_arguments() click to toggle source
# File lib/ffi/clang/cursor.rb, line 331
def num_arguments
        Lib.cursor_get_num_arguments(@cursor)
end
num_overloaded_decls() click to toggle source
# File lib/ffi/clang/cursor.rb, line 319
def num_overloaded_decls
        Lib.get_num_overloaded_decls(@cursor)
end
objc_type_encoding() click to toggle source
# File lib/ffi/clang/cursor.rb, line 323
def objc_type_encoding
        Lib.extract_string Lib.get_decl_objc_type_encoding(@cursor)
end
overloaded_decl(i) click to toggle source
# File lib/ffi/clang/cursor.rb, line 315
def overloaded_decl(i)
        Cursor.new Lib.get_overloaded_decl(@cursor, i), @translation_unit
end
overriddens() click to toggle source
# File lib/ffi/clang/cursor.rb, line 287
def overriddens
        cursor_ptr = FFI::MemoryPointer.new :pointer
        num_ptr = FFI::MemoryPointer.new :uint
        Lib.get_overridden_cursors(@cursor, cursor_ptr, num_ptr)
        num = num_ptr.get_uint(0)
        cur_ptr = cursor_ptr.get_pointer(0)

        overriddens = []
        num.times {
                overriddens << Cursor.new(cur_ptr, @translation_unit)
                cur_ptr += Lib::CXCursor.size
        }
        Lib.dispose_overridden_cursors(cursor_ptr.get_pointer(0)) if num != 0
        overriddens
end
platform_availability(max_availability_size = 4) click to toggle source
# File lib/ffi/clang/cursor.rb, line 257
def platform_availability(max_availability_size = 4)
        availability_ptr = FFI::MemoryPointer.new(Lib::CXPlatformAvailability, max_availability_size)
        always_deprecated_ptr = FFI::MemoryPointer.new :int
        always_unavailable_ptr = FFI::MemoryPointer.new :int
        deprecated_message_ptr = FFI::MemoryPointer.new Lib::CXString
        unavailable_message_ptr = FFI::MemoryPointer.new Lib::CXString

        actual_availability_size = Lib.get_cursor_platform_availability(
                @cursor,
                always_deprecated_ptr, deprecated_message_ptr,
                always_unavailable_ptr, unavailable_message_ptr,
                availability_ptr, max_availability_size)

        availability = []
        cur_ptr = availability_ptr
        [actual_availability_size, max_availability_size].min.times {
                availability << PlatformAvailability.new(cur_ptr)
                cur_ptr += Lib::CXPlatformAvailability.size
        }

        # return as Hash
        {
                always_deprecated: always_deprecated_ptr.get_int(0),
                always_unavailable: always_unavailable_ptr.get_int(0),
                deprecated_message: Lib.extract_string(Lib::CXString.new(deprecated_message_ptr)),
                unavailable_message: Lib.extract_string(Lib::CXString.new(unavailable_message_ptr)),
                availability: availability
        }
end
preprocessing?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 109
def preprocessing?
        Lib.is_preprocessing(kind) != 0
end
private?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 93
def private?
        Lib.cxx_get_access_specifier(@cursor) == :private
end
protected?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 97
def protected?
        Lib.cxx_get_access_specifier(@cursor) == :protected
end
public?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 89
def public?
        Lib.cxx_get_access_specifier(@cursor) == :public
end
pure_virtual?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 185
def pure_virtual?
        Lib.cxx_method_is_pure_virtual(@cursor) != 0
end
raw_comment_text() click to toggle source
# File lib/ffi/clang/cursor.rb, line 53
def raw_comment_text
        Lib.extract_string Lib.cursor_get_raw_comment_text(@cursor)
end
reference?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 73
def reference?
        Lib.is_reference(kind) != 0
end
referenced() click to toggle source
# File lib/ffi/clang/cursor.rb, line 209
def referenced
        Cursor.new Lib.get_cursor_referenced(@cursor), @translation_unit
end
result_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 149
def result_type
        Type.new Lib.get_cursor_result_type(@cursor), @translation_unit
end
semantic_parent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 213
def semantic_parent
        Cursor.new Lib.get_cursor_semantic_parent(@cursor), @translation_unit
end
specialized_template() click to toggle source
# File lib/ffi/clang/cursor.rb, line 197
def specialized_template
        Cursor.new Lib.get_specialized_cursor_template(@cursor), @translation_unit
end
spelling() click to toggle source
# File lib/ffi/clang/cursor.rb, line 129
def spelling
        Lib.extract_string Lib.get_cursor_spelling(@cursor)
end
statement?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 81
def statement?
        Lib.is_statement(kind) != 0
end
static?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 177
def static?
        Lib.cxx_method_is_static(@cursor) != 0
end
template_kind() click to toggle source
# File lib/ffi/clang/cursor.rb, line 221
def template_kind
        Lib.get_template_cursor_kind @cursor
end
translation_unit?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 105
def translation_unit?
        Lib.is_translation_unit(kind) != 0
end
type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 145
def type
        Type.new Lib.get_cursor_type(@cursor), @translation_unit
end
underlying_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 153
def underlying_type
        Type.new Lib.get_typedef_decl_underlying_type(@cursor), @translation_unit
end
unexposed?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 113
def unexposed?
        Lib.is_unexposed(kind) != 0
end
usr() click to toggle source
# File lib/ffi/clang/cursor.rb, line 133
def usr
        Lib.extract_string Lib.get_cursor_usr(@cursor)
end
variadic?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 169
def variadic?
        Lib.is_variadic(@cursor) != 0
end
virtual?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 181
def virtual?
        Lib.cxx_method_is_virtual(@cursor) != 0
end
virtual_base?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 161
def virtual_base?
        Lib.is_virtual_base(@cursor) != 0
end
visit_children(&block) click to toggle source
# File lib/ffi/clang/cursor.rb, line 237
def visit_children(&block)
        adapter = Proc.new do |cxcursor, parent_cursor, unused|
                block.call Cursor.new(cxcursor, @translation_unit), Cursor.new(parent_cursor, @translation_unit)
        end
        
        Lib.visit_children(@cursor, adapter, nil)
end