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 41
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 45
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 36
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 344
def ==(other)
        Lib.are_equal(@cursor, other.cursor) != 0
end
access_specifier() click to toggle source
# File lib/ffi/clang/cursor.rb, line 234
def access_specifier
        Lib.get_cxx_access_specifier @cursor
end
argument(i) click to toggle source
# File lib/ffi/clang/cursor.rb, line 336
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 86
def attribute?
        Lib.is_attribute(kind) != 0
end
availability() click to toggle source
# File lib/ffi/clang/cursor.rb, line 258
def availability
        Lib.get_cursor_availability(@cursor)
end
bitfield?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 316
def bitfield?
        Lib.is_bit_field(@cursor) != 0
end
bitwidth() click to toggle source
# File lib/ffi/clang/cursor.rb, line 320
def bitwidth
        Lib.get_field_decl_bit_width(@cursor)
end
canonical() click to toggle source
# File lib/ffi/clang/cursor.rb, line 210
def canonical
        Cursor.new Lib.get_canonical_cursor(@cursor), @translation_unit
end
comment() click to toggle source
# File lib/ffi/clang/cursor.rb, line 58
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 62
def comment_range
        SourceRange.new(Lib.cursor_get_comment_range(@cursor))
end
completion() click to toggle source
# File lib/ffi/clang/cursor.rb, line 66
def completion
        CodeCompletion::String.new Lib.get_cursor_completion_string(@cursor)
end
declaration?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 70
def declaration?
        Lib.is_declaration(kind) != 0
end
definition() click to toggle source
# File lib/ffi/clang/cursor.rb, line 214
def definition
        Cursor.new Lib.get_cursor_definition(@cursor), @translation_unit
end
definition?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 178
def definition?
        Lib.is_definition(@cursor) != 0
end
display_name() click to toggle source
# File lib/ffi/clang/cursor.rb, line 126
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 170
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 158
def enum_decl_integer_type
        Type.new Lib.get_enum_decl_integer_type(@cursor), @translation_unit
end
enum_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 202
def enum_type
        Type.new Lib.get_enum_type(@cursor), @translation_unit
end
enum_unsigned_value() click to toggle source
# File lib/ffi/clang/cursor.rb, line 198
def enum_unsigned_value
        Lib.get_enum_unsigned_value @cursor
end
enum_value() click to toggle source
# File lib/ffi/clang/cursor.rb, line 194
def enum_value
        Lib.get_enum_value @cursor
end
expression?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 78
def expression?
        Lib.is_expression(kind) != 0
end
extent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 122
def extent
        SourceRange.new(Lib.get_cursor_extent(@cursor))
end
filter() { |child, parent| ... } click to toggle source
# File lib/ffi/clang/cursor.rb, line 358
def filter
        return to_enum(:select) unless block_given?
        
        matching = []

        self.visit_children do |child, parent|
                if yield(child, parent)
                        matching << child
                end

                :recurse
        end

        return matching
end
find_all(*kinds) click to toggle source
# File lib/ffi/clang/cursor.rb, line 348
def find_all(*kinds)
        filter do |child, parent|
                kinds.include?(child.kind)
        end
end
find_first(*kinds) click to toggle source
# File lib/ffi/clang/cursor.rb, line 354
def find_first(*kinds)
        find_all(*kinds).first
end
hash() click to toggle source
# File lib/ffi/clang/cursor.rb, line 312
def hash
        Lib.get_cursor_hash(@cursor)
end
included_file() click to toggle source
# File lib/ffi/clang/cursor.rb, line 262
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 102
def invalid?
        Lib.is_invalid(kind) != 0
end
kind() click to toggle source
# File lib/ffi/clang/cursor.rb, line 138
def kind
        @cursor[:kind]
end
kind_spelling() click to toggle source
# File lib/ffi/clang/cursor.rb, line 142
def kind_spelling
        Cursor.kind_spelling @cursor[:kind]
end
language() click to toggle source
# File lib/ffi/clang/cursor.rb, line 238
def language
        Lib.get_language @cursor
end
lexical_parent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 226
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 254
def linkage
        Lib.get_cursor_linkage(@cursor)
end
location() click to toggle source
# File lib/ffi/clang/cursor.rb, line 118
def location
        ExpansionLocation.new(Lib.get_cursor_location(@cursor))
end
null?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 50
def null?
        Lib.cursor_is_null(@cursor) != 0
end
num_args() click to toggle source
# File lib/ffi/clang/cursor.rb, line 242
def num_args
        Lib.get_num_args @cursor
end
num_arguments() click to toggle source
# File lib/ffi/clang/cursor.rb, line 340
def num_arguments
        Lib.cursor_get_num_arguments(@cursor)
end
num_overloaded_decls() click to toggle source
# File lib/ffi/clang/cursor.rb, line 328
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 332
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 324
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 296
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 266
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 110
def preprocessing?
        Lib.is_preprocessing(kind) != 0
end
private?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 94
def private?
        Lib.cxx_get_access_specifier(@cursor) == :private
end
protected?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 98
def protected?
        Lib.cxx_get_access_specifier(@cursor) == :protected
end
public?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 90
def public?
        Lib.cxx_get_access_specifier(@cursor) == :public
end
pure_virtual?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 190
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 54
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 74
def reference?
        Lib.is_reference(kind) != 0
end
referenced() click to toggle source
# File lib/ffi/clang/cursor.rb, line 218
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 150
def result_type
        Type.new Lib.get_cursor_result_type(@cursor), @translation_unit
end
select() { |child| ... } click to toggle source
# File lib/ffi/clang/cursor.rb, line 374
def select
        filter do |child, parent|
                yield(child)
        end
end
semantic_parent() click to toggle source
# File lib/ffi/clang/cursor.rb, line 222
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 206
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 130
def spelling
        Lib.extract_string Lib.get_cursor_spelling(@cursor)
end
statement?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 82
def statement?
        Lib.is_statement(kind) != 0
end
static?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 182
def static?
        Lib.cxx_method_is_static(@cursor) != 0
end
template_kind() click to toggle source
# File lib/ffi/clang/cursor.rb, line 230
def template_kind
        Lib.get_template_cursor_kind @cursor
end
to_a() click to toggle source
# File lib/ffi/clang/cursor.rb, line 380
def to_a
        filter.collect{|child, parent| child}
end
translation_unit?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 106
def translation_unit?
        Lib.is_translation_unit(kind) != 0
end
type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 146
def type
        Type.new Lib.get_cursor_type(@cursor), @translation_unit
end
typedef_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 162
def typedef_type
        Type.new Lib.get_typedef_decl_unerlying_type(@cursor), @translation_unit
end
underlying_type() click to toggle source
# File lib/ffi/clang/cursor.rb, line 154
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 114
def unexposed?
        Lib.is_unexposed(kind) != 0
end
usr() click to toggle source
# File lib/ffi/clang/cursor.rb, line 134
def usr
        Lib.extract_string Lib.get_cursor_usr(@cursor)
end
variadic?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 174
def variadic?
        Lib.is_variadic(@cursor) != 0
end
virtual?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 186
def virtual?
        Lib.cxx_method_is_virtual(@cursor) != 0
end
virtual_base?() click to toggle source
# File lib/ffi/clang/cursor.rb, line 166
def virtual_base?
        Lib.is_virtual_base(@cursor) != 0
end
visit_children(&block) click to toggle source
# File lib/ffi/clang/cursor.rb, line 246
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