ffi-clang 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +12 -2
- data/README.md +24 -10
- data/ext/rakefile.rb +12 -0
- data/ext/teapot.rb +16 -0
- data/lib/ffi/clang.rb +2 -1
- data/lib/ffi/clang/cursor.rb +126 -7
- data/lib/ffi/clang/index.rb +4 -4
- data/lib/ffi/clang/lib.rb +4 -5
- data/lib/ffi/clang/lib/cursor.rb +207 -4
- data/lib/ffi/clang/lib/type.rb +71 -3
- data/lib/ffi/clang/lib/utils.rb +29 -0
- data/lib/ffi/clang/source_location.rb +2 -2
- data/lib/ffi/clang/translation_unit.rb +3 -2
- data/lib/ffi/clang/type.rb +40 -3
- data/lib/ffi/clang/utils.rb +58 -0
- data/lib/ffi/clang/version.rb +1 -1
- data/spec/clang/comment_spec.rb +28 -15
- data/spec/clang/cursor_spec.rb +263 -9
- data/spec/clang/index_spec.rb +4 -0
- data/spec/clang/type_spec.rb +63 -1
- data/spec/clang/utils_spec.rb +61 -0
- data/spec/fixtures/canonical.c +5 -0
- data/spec/fixtures/test.cxx +26 -0
- data/spec/spec_helper.rb +40 -7
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0711385ae78d16e56e06a6bb827a08951c1128dd
|
4
|
+
data.tar.gz: 5eb03fd538e2949c1063a07c071ab778e000b7cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95fe823fc29639734c09302303b96c92a50060c0a5ac09adc9936f3d7b37ade0d90a6bf878eaf4bf4415f5a22f20807e086de7b0e8a242bd00cfa2f12edbde73
|
7
|
+
data.tar.gz: 54e2bfa618b2eeff3b0920ea731f9e3391179c761fce11c1a86ede8f1b40894d0770a3ece965942680ab4f0985e61501b1bb9d903a08d761d46eda0de010aece
|
data/.travis.yml
CHANGED
@@ -1,8 +1,18 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
3
|
- "2.0"
|
4
|
+
- "2.1"
|
5
|
+
env:
|
6
|
+
- LLVM_VERSION=3.2
|
7
|
+
- LLVM_VERSION=3.3
|
8
|
+
- LLVM_VERSION=3.4
|
9
|
+
- LLVM_VERSION=3.5
|
4
10
|
install:
|
5
11
|
- sudo add-apt-repository --yes ppa:h-rayflood/llvm
|
12
|
+
- sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
|
13
|
+
- sudo add-apt-repository --yes 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main'
|
14
|
+
- wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
|
6
15
|
- sudo apt-get -qq update
|
7
|
-
- sudo apt-get -qq install libclang-
|
8
|
-
-
|
16
|
+
- sudo apt-get -qq install libclang-${LLVM_VERSION}-dev
|
17
|
+
- export LD_LIBRARY_PATH=/usr/lib/llvm-${LLVM_VERSION}/lib/
|
18
|
+
- bundle install
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# FFI::Clang
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf
|
3
|
+
A light weight wrapper for Ruby exposing libclang.
|
6
4
|
|
7
5
|
[](http://travis-ci.org/ioquatix/ffi-clang)
|
8
6
|
[](https://codeclimate.com/github/ioquatix/ffi-clang)
|
@@ -11,19 +9,34 @@ http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf
|
|
11
9
|
|
12
10
|
Add this line to your application's Gemfile:
|
13
11
|
|
14
|
-
|
12
|
+
gem 'ffi-clang'
|
15
13
|
|
16
14
|
And then execute:
|
17
15
|
|
18
|
-
|
16
|
+
$ bundle
|
19
17
|
|
20
18
|
Or install it yourself as:
|
21
19
|
|
22
|
-
|
20
|
+
$ gem install ffi-clang
|
23
21
|
|
24
22
|
## Usage
|
25
23
|
|
26
|
-
|
24
|
+
Traverse the AST in the given file:
|
25
|
+
|
26
|
+
index = Index.new
|
27
|
+
translation_unit = index.parse_translation_unit("list.c")
|
28
|
+
cursor = translation_unit.cursor
|
29
|
+
cursor.visit_children do |cursor, parent|
|
30
|
+
puts "#{cursor.kind} #{cursor.spelling.inspect}"
|
31
|
+
|
32
|
+
next :recurse
|
33
|
+
end
|
34
|
+
|
35
|
+
### Library Version
|
36
|
+
|
37
|
+
Due to issues figuring out which library to use, we require you to manually specify it. For example, to run the tests, with MacPorts llvm/clang 3.4, use the following:
|
38
|
+
|
39
|
+
LLVM_CONFIG=llvm-config-mp-3.4 rake
|
27
40
|
|
28
41
|
## Contributing
|
29
42
|
|
@@ -35,9 +48,10 @@ TODO: Write usage instructions here
|
|
35
48
|
|
36
49
|
## License
|
37
50
|
|
38
|
-
Copyright, 2010-2012 by Jari Bakken.
|
39
|
-
Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
40
|
-
Copyright, 2013, by Garry C. Marshall. <http://www.meaningfulname.net>
|
51
|
+
Copyright, 2010-2012, by Jari Bakken.
|
52
|
+
Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
53
|
+
Copyright, 2013, by Garry C. Marshall. <http://www.meaningfulname.net>
|
54
|
+
Copyright, 2014, by Masahiro Sano.
|
41
55
|
|
42
56
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
43
57
|
of this software and associated documentation files (the "Software"), to deal
|
data/ext/rakefile.rb
ADDED
data/ext/teapot.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of the "Teapot" project, and is released under the MIT license.
|
3
|
+
#
|
4
|
+
|
5
|
+
teapot_version "0.8.0"
|
6
|
+
|
7
|
+
define_target "ffi-clang" do |target|
|
8
|
+
target.depends "Library/clang"
|
9
|
+
target.provides "Dependencies/ffi-clang"
|
10
|
+
end
|
11
|
+
|
12
|
+
define_configuration "ffi-clang" do |configuration|
|
13
|
+
configuration[:source] = "https://github.com/dream-framework/"
|
14
|
+
|
15
|
+
configuration.require "clang"
|
16
|
+
end
|
data/lib/ffi/clang.rb
CHANGED
@@ -31,7 +31,7 @@ module FFI::Clang
|
|
31
31
|
|
32
32
|
case os
|
33
33
|
when /darwin/
|
34
|
-
:
|
34
|
+
:darwin
|
35
35
|
when /linux/
|
36
36
|
:linux
|
37
37
|
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
@@ -42,6 +42,7 @@ module FFI::Clang
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
require 'ffi/clang/utils'
|
45
46
|
require 'ffi/clang/lib'
|
46
47
|
require 'ffi/clang/index'
|
47
48
|
require 'ffi/clang/translation_unit'
|
data/lib/ffi/clang/cursor.rb
CHANGED
@@ -27,12 +27,16 @@ require 'ffi/clang/type'
|
|
27
27
|
module FFI
|
28
28
|
module Clang
|
29
29
|
class Cursor
|
30
|
+
attr_reader :cursor
|
31
|
+
attr_reader :translation_unit
|
32
|
+
|
30
33
|
def self.null_cursor
|
31
|
-
Cursor.new Lib.get_null_cursor
|
34
|
+
Cursor.new Lib.get_null_cursor, nil
|
32
35
|
end
|
33
36
|
|
34
|
-
def initialize(
|
37
|
+
def initialize(cxcursor, translation_unit)
|
35
38
|
@cursor = cxcursor
|
39
|
+
@translation_unit = translation_unit
|
36
40
|
end
|
37
41
|
|
38
42
|
def null?
|
@@ -67,6 +71,18 @@ module FFI
|
|
67
71
|
Lib.is_attribute(kind) != 0
|
68
72
|
end
|
69
73
|
|
74
|
+
def public?
|
75
|
+
Lib.cxx_get_access_specifier(@cursor) == :public
|
76
|
+
end
|
77
|
+
|
78
|
+
def private?
|
79
|
+
Lib.cxx_get_access_specifier(@cursor) == :private
|
80
|
+
end
|
81
|
+
|
82
|
+
def protected?
|
83
|
+
Lib.cxx_get_access_specifier(@cursor) == :protected
|
84
|
+
end
|
85
|
+
|
70
86
|
def invalid?
|
71
87
|
Lib.is_invalid(kind) != 0
|
72
88
|
end
|
@@ -99,26 +115,129 @@ module FFI
|
|
99
115
|
Lib.extract_string Lib.get_cursor_spelling(@cursor)
|
100
116
|
end
|
101
117
|
|
118
|
+
def usr
|
119
|
+
Lib.extract_string Lib.get_cursor_usr(@cursor)
|
120
|
+
end
|
121
|
+
|
102
122
|
def kind
|
103
123
|
@cursor[:kind]
|
104
124
|
end
|
105
125
|
|
106
126
|
def type
|
107
|
-
Type.new Lib.get_cursor_type(@cursor)
|
127
|
+
Type.new Lib.get_cursor_type(@cursor), @translation_unit
|
108
128
|
end
|
109
129
|
|
110
130
|
def result_type
|
111
|
-
Type.new Lib.get_cursor_result_type(@cursor)
|
131
|
+
Type.new Lib.get_cursor_result_type(@cursor), @translation_unit
|
132
|
+
end
|
133
|
+
|
134
|
+
def underlying_type
|
135
|
+
Type.new Lib.get_typedef_decl_underlying_type(@cursor), @translation_unit
|
136
|
+
end
|
137
|
+
|
138
|
+
def enum_decl_integer_type
|
139
|
+
Type.new Lib.get_decl_integer_type(@cursor), @translation_unit
|
140
|
+
end
|
141
|
+
|
142
|
+
def virtual_base?
|
143
|
+
Lib.is_virtual_base(@cursor) != 0
|
144
|
+
end
|
145
|
+
|
146
|
+
def dynamic_call?
|
147
|
+
Lib.is_dynamic_call(@cursor) != 0
|
148
|
+
end
|
149
|
+
|
150
|
+
def variadic?
|
151
|
+
Lib.is_variadic(@cursor) != 0
|
152
|
+
end
|
153
|
+
|
154
|
+
def definition?
|
155
|
+
Lib.is_definition(@cursor) != 0
|
156
|
+
end
|
157
|
+
|
158
|
+
def static?
|
159
|
+
Lib.cxx_method_is_static(@cursor) != 0
|
160
|
+
end
|
161
|
+
|
162
|
+
def virtual?
|
163
|
+
Lib.cxx_method_is_virtual(@cursor) != 0
|
164
|
+
end
|
165
|
+
|
166
|
+
def pure_virtual?
|
167
|
+
Lib.cxx_method_is_pure_virtual(@cursor) != 0
|
168
|
+
end
|
169
|
+
|
170
|
+
def enum_value
|
171
|
+
Lib.get_enum_value @cursor
|
172
|
+
end
|
173
|
+
|
174
|
+
def specialized_template
|
175
|
+
Cursor.new Lib.get_specialized_cursor_template(@cursor), @translation_unit
|
176
|
+
end
|
177
|
+
|
178
|
+
def canonical
|
179
|
+
Cursor.new Lib.get_canonical_cursor(@cursor), @translation_unit
|
180
|
+
end
|
181
|
+
|
182
|
+
def definition
|
183
|
+
Cursor.new Lib.get_cursor_definition(@cursor), @translation_unit
|
184
|
+
end
|
185
|
+
|
186
|
+
def referenced
|
187
|
+
Cursor.new Lib.get_cursor_referenced(@cursor), @translation_unit
|
188
|
+
end
|
189
|
+
|
190
|
+
def semantic_parent
|
191
|
+
Cursor.new Lib.get_cursor_semantic_parent(@cursor), @translation_unit
|
192
|
+
end
|
193
|
+
|
194
|
+
def lexical_parent
|
195
|
+
Cursor.new Lib.get_cursor_lexical_parent(@cursor), @translation_unit
|
196
|
+
end
|
197
|
+
|
198
|
+
def template_kind
|
199
|
+
Lib.get_template_cursor_kind @cursor
|
200
|
+
end
|
201
|
+
|
202
|
+
def access_specifier
|
203
|
+
Lib.get_cxx_access_specifier @cursor
|
204
|
+
end
|
205
|
+
|
206
|
+
def language
|
207
|
+
Lib.get_language @cursor
|
112
208
|
end
|
113
209
|
|
114
210
|
def visit_children(&block)
|
115
|
-
adapter = Proc.new do |
|
116
|
-
block.call Cursor.new(cxcursor), Cursor.new(parent_cursor)
|
211
|
+
adapter = Proc.new do |cxcursor, parent_cursor, unused|
|
212
|
+
block.call Cursor.new(cxcursor, @translation_unit), Cursor.new(parent_cursor, @translation_unit)
|
117
213
|
end
|
214
|
+
|
118
215
|
Lib.visit_children(@cursor, adapter, nil)
|
119
216
|
end
|
120
217
|
|
121
|
-
|
218
|
+
def linkage
|
219
|
+
Lib.get_cursor_linkage(@cursor)
|
220
|
+
end
|
221
|
+
|
222
|
+
def availability
|
223
|
+
Lib.get_cursor_availability(@cursor)
|
224
|
+
end
|
225
|
+
|
226
|
+
def included_file
|
227
|
+
raise NotImplementedError
|
228
|
+
end
|
229
|
+
|
230
|
+
def platform_availability
|
231
|
+
raise NotImplementedError
|
232
|
+
end
|
233
|
+
|
234
|
+
def get_overridden_cursors
|
235
|
+
raise NotImplementedError
|
236
|
+
end
|
237
|
+
|
238
|
+
def hash
|
239
|
+
Lib.get_cursor_hash(@cursor)
|
240
|
+
end
|
122
241
|
|
123
242
|
def ==(other)
|
124
243
|
Lib.are_equal(@cursor, other.cursor) != 0
|
data/lib/ffi/clang/index.rb
CHANGED
@@ -38,21 +38,21 @@ module FFI
|
|
38
38
|
|
39
39
|
translation_unit_pointer = Lib.parse_translation_unit(self, source_file, args_pointer_from(command_line_args), command_line_args.size, unsaved_files, unsaved.length, options_bitmask_from(opts))
|
40
40
|
|
41
|
-
raise Error, "error parsing #{source_file.inspect}"
|
41
|
+
raise Error, "error parsing #{source_file.inspect}" if translation_unit_pointer.null?
|
42
42
|
|
43
|
-
TranslationUnit.new translation_unit_pointer
|
43
|
+
TranslationUnit.new translation_unit_pointer, self
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
47
47
|
|
48
48
|
def args_pointer_from(command_line_args)
|
49
|
-
args_pointer = MemoryPointer.new(:pointer)
|
49
|
+
args_pointer = MemoryPointer.new(:pointer, command_line_args.length)
|
50
50
|
|
51
51
|
strings = command_line_args.map do |arg|
|
52
52
|
MemoryPointer.from_string(arg.to_s)
|
53
53
|
end
|
54
54
|
|
55
|
-
args_pointer.put_array_of_pointer(strings) unless strings.empty?
|
55
|
+
args_pointer.put_array_of_pointer(0, strings) unless strings.empty?
|
56
56
|
args_pointer
|
57
57
|
end
|
58
58
|
|
data/lib/ffi/clang/lib.rb
CHANGED
@@ -26,11 +26,10 @@ module FFI
|
|
26
26
|
|
27
27
|
libs = ["clang"]
|
28
28
|
|
29
|
-
if
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
]
|
29
|
+
if ENV['LLVM_CONFIG']
|
30
|
+
llvm_library_dir = `#{ENV['LLVM_CONFIG']} --libdir`.chomp
|
31
|
+
|
32
|
+
libs << llvm_library_dir + '/libclang.dylib'
|
34
33
|
end
|
35
34
|
|
36
35
|
ffi_lib libs
|
data/lib/ffi/clang/lib/cursor.rb
CHANGED
@@ -28,14 +28,178 @@ require 'ffi/clang/lib/type'
|
|
28
28
|
module FFI
|
29
29
|
module Clang
|
30
30
|
module Lib
|
31
|
-
enum :kind, [
|
31
|
+
enum :kind, [
|
32
|
+
:cursor_unexposed_decl, 1,
|
33
|
+
:cursor_struct, 2,
|
34
|
+
:cursor_union, 3,
|
35
|
+
:cursor_class_decl, 4,
|
32
36
|
:cursor_enum_decl, 5,
|
37
|
+
:cursor_field_decl, 6,
|
33
38
|
:cursor_enum_constant_decl, 7,
|
34
39
|
:cursor_function, 8,
|
40
|
+
:cursor_variable, 9,
|
35
41
|
:cursor_parm_decl, 10,
|
42
|
+
:cursor_obj_c_interface_decl, 11,
|
43
|
+
:cursor_obj_c_category_decl, 12,
|
44
|
+
:cursor_obj_c_protocol_decl, 13,
|
45
|
+
:cursor_obj_c_property_decl, 14,
|
46
|
+
:cursor_obj_c_instance_var_decl, 15,
|
47
|
+
:cursor_obj_c_instance_method_decl, 16,
|
48
|
+
:cursor_obj_c_class_method_decl, 17,
|
49
|
+
:cursor_obj_c_implementation_decl, 18,
|
50
|
+
:cursor_obj_c_category_impl_decl, 19,
|
36
51
|
:cursor_typedef_decl, 20,
|
52
|
+
:cursor_cxx_method, 21,
|
53
|
+
:cursor_namespace, 22,
|
54
|
+
:cursor_linkage_spec, 23,
|
55
|
+
:cursor_constructor, 24,
|
56
|
+
:cursor_destructor, 25,
|
57
|
+
:cursor_conversion_function, 26,
|
58
|
+
:cursor_template_type_parameter, 27,
|
59
|
+
:cursor_non_type_template_parameter, 28,
|
60
|
+
:cursor_template_template_parameter, 29,
|
61
|
+
:cursor_function_template, 30,
|
62
|
+
:cursor_class_template, 31,
|
63
|
+
:cursor_class_template_partial_specialization, 32,
|
64
|
+
:cursor_namespace_alias, 33,
|
65
|
+
:cursor_using_directive, 34,
|
66
|
+
:cursor_using_declaration, 35,
|
67
|
+
:cursor_type_alias_decl, 36,
|
68
|
+
:cursor_obj_c_synthesize_decl, 37,
|
69
|
+
:cursor_obj_c_dynamic_decl, 38,
|
70
|
+
:cursor_cxx_access_specifier, 39,
|
71
|
+
:cursor_obj_c_super_class_ref, 40,
|
72
|
+
:cursor_obj_c_protocol_ref, 41,
|
73
|
+
:cursor_obj_c_class_ref, 42,
|
74
|
+
:cursor_type_ref, 43,
|
75
|
+
:cursor_cxx_base_specifier, 44,
|
76
|
+
:cursor_template_ref, 45,
|
77
|
+
:cursor_namespace_ref, 46,
|
78
|
+
:cursor_member_ref, 47,
|
79
|
+
:cursor_label_ref, 48,
|
80
|
+
:cursor_overloaded_decl_ref, 49,
|
81
|
+
:cursor_variable_ref, 50,
|
37
82
|
:cursor_invalid_file, 70,
|
38
|
-
:
|
83
|
+
:cursor_no_decl_found, 71,
|
84
|
+
:cursor_not_implemented, 72,
|
85
|
+
:cursor_invalid_code, 73,
|
86
|
+
:cursor_first_expr, 100,
|
87
|
+
:cursor_decl_ref_expr, 101,
|
88
|
+
:cursor_member_ref_expr, 102,
|
89
|
+
:cursor_call_expr, 103,
|
90
|
+
:cursor_obj_c_message_expr, 104,
|
91
|
+
:cursor_block_expr, 105,
|
92
|
+
:cursor_integer_literal, 106,
|
93
|
+
:cursor_floating_literal, 107,
|
94
|
+
:cursor_imaginary_literal, 108,
|
95
|
+
:cursor_string_literal, 109,
|
96
|
+
:cursor_character_literal, 110,
|
97
|
+
:cursor_paren_expr, 111,
|
98
|
+
:cursor_unary_operator, 112,
|
99
|
+
:cursor_array_subscript_expr, 113,
|
100
|
+
:cursor_binary_operator, 114,
|
101
|
+
:cursor_compound_assign_operator, 115,
|
102
|
+
:cursor_conditional_operator, 116,
|
103
|
+
:cursor_c_style_cast_expr, 117,
|
104
|
+
:cursor_compound_literal_expr, 118,
|
105
|
+
:cursor_init_list_expr, 119,
|
106
|
+
:cursor_addr_label_expr, 120,
|
107
|
+
:cursor_stmt_expr, 121,
|
108
|
+
:cursor_generic_selection_expr, 122,
|
109
|
+
:cursor_gnu_null_expr, 123,
|
110
|
+
:cursor_cxx_static_cast_expr, 124,
|
111
|
+
:cursor_cxx_dynamic_cast_expr, 125,
|
112
|
+
:cursor_cxx_reinterpret_cast_expr, 126,
|
113
|
+
:cursor_cxx_const_cast_expr, 127,
|
114
|
+
:cursor_cxx_functional_cast_expr, 128,
|
115
|
+
:cursor_cxx_typeid_expr, 129,
|
116
|
+
:cursor_cxx_bool_literal_expr, 130,
|
117
|
+
:cursor_cxx_null_ptr_literal_expr, 131,
|
118
|
+
:cursor_cxx_this_expr, 132,
|
119
|
+
:cursor_cxx_throw_expr, 133,
|
120
|
+
:cursor_cxx_new_expr, 134,
|
121
|
+
:cursor_cxx_delete_expr, 135,
|
122
|
+
:cursor_unary_expr, 136,
|
123
|
+
:cursor_obj_c_string_literal, 137,
|
124
|
+
:cursor_obj_c_encode_expr, 138,
|
125
|
+
:cursor_obj_c_selector_expr, 139,
|
126
|
+
:cursor_obj_c_protocol_expr, 140,
|
127
|
+
:cursor_obj_c_bridged_cast_expr, 141,
|
128
|
+
:cursor_pack_expansion_expr, 142,
|
129
|
+
:cursor_size_of_pack_expr, 143,
|
130
|
+
:cursor_lambda_expr, 144,
|
131
|
+
:cursor_obj_c_bool_literal_expr, 145,
|
132
|
+
:cursor_obj_c_self_expr, 146,
|
133
|
+
:cursor_unexposed_stmt, 200,
|
134
|
+
:cursor_label_stmt, 201,
|
135
|
+
:cursor_compound_stmt, 202,
|
136
|
+
:cursor_case_stmt, 203,
|
137
|
+
:cursor_default_stmt, 204,
|
138
|
+
:cursor_if_stmt, 205,
|
139
|
+
:cursor_switch_stmt, 206,
|
140
|
+
:cursor_while_stmt, 207,
|
141
|
+
:cursor_do_stmt, 208,
|
142
|
+
:cursor_for_stmt, 209,
|
143
|
+
:cursor_goto_stmt, 210,
|
144
|
+
:cursor_indirect_goto_stmt, 211,
|
145
|
+
:cursor_continue_stmt, 212,
|
146
|
+
:cursor_break_stmt, 213,
|
147
|
+
:cursor_return_stmt, 214,
|
148
|
+
:cursor_gcc_asm_stmt, 215,
|
149
|
+
:cursor_obj_c_at_try_stmt, 216,
|
150
|
+
:cursor_obj_c_at_catch_stmt, 217,
|
151
|
+
:cursor_obj_c_at_finally_stmt, 218,
|
152
|
+
:cursor_obj_c_at_throw_stmt, 219,
|
153
|
+
:cursor_obj_c_at_synchronized_stmt, 220,
|
154
|
+
:cursor_obj_c_autorelease_pool_stmt, 221,
|
155
|
+
:cursor_obj_c_for_collection_stmt, 222,
|
156
|
+
:cursor_cxx_catch_stmt, 223,
|
157
|
+
:cursor_cxx_try_stmt, 224,
|
158
|
+
:cursor_cxx_for_range_stmt, 225,
|
159
|
+
:cursor_seh_try_stmt, 226,
|
160
|
+
:cursor_seh_except_stmt, 227,
|
161
|
+
:cursor_seh_finally_stmt, 228,
|
162
|
+
:cursor_ms_asm_stmt, 229,
|
163
|
+
:cursor_null_stmt, 230,
|
164
|
+
:cursor_decl_stmt, 231,
|
165
|
+
:cursor_omp_parallel_directive, 232,
|
166
|
+
:cursor_translation_unit, 300,
|
167
|
+
:cursor_unexposed_attr, 400,
|
168
|
+
:cursor_ibaction_attr, 401,
|
169
|
+
:cursor_iboutlet_attr, 402,
|
170
|
+
:cursor_iboutlet_collection_attr, 403,
|
171
|
+
:cursor_cxx_final_attr, 404,
|
172
|
+
:cursor_cxx_override_attr, 405,
|
173
|
+
:cursor_annotate_attr, 406,
|
174
|
+
:cursor_asm_label_attr, 407,
|
175
|
+
:cursor_packed_attr, 408,
|
176
|
+
:cursor_preprocessing_directive, 500,
|
177
|
+
:cursor_macro_definition, 501,
|
178
|
+
:cursor_macro_expansion, 502,
|
179
|
+
:cursor_inclusion_directive, 503,
|
180
|
+
:cursor_module_import_decl, 600,
|
181
|
+
]
|
182
|
+
|
183
|
+
enum :access_specifier, [
|
184
|
+
:invalid, 0,
|
185
|
+
:public, 1,
|
186
|
+
:protected, 2,
|
187
|
+
:private, 3
|
188
|
+
]
|
189
|
+
|
190
|
+
enum :availability, [
|
191
|
+
:available, 0,
|
192
|
+
:deprecated, 1,
|
193
|
+
:not_available, 2,
|
194
|
+
:not_accesible, 3
|
195
|
+
]
|
196
|
+
|
197
|
+
enum :linkage_kind, [
|
198
|
+
:invalid, 0,
|
199
|
+
:no_linkage, 1,
|
200
|
+
:internal, 2,
|
201
|
+
:unique_external, 3,
|
202
|
+
:external, 4,
|
39
203
|
]
|
40
204
|
|
41
205
|
class CXCursor < FFI::Struct
|
@@ -46,7 +210,34 @@ module FFI
|
|
46
210
|
)
|
47
211
|
end
|
48
212
|
|
213
|
+
enum :cxx_access_specifier, [:invalid, :public, :protected, :private]
|
214
|
+
attach_function :get_cxx_access_specifier, :clang_getCXXAccessSpecifier, [CXCursor.by_value], :cxx_access_specifier
|
215
|
+
|
216
|
+
attach_function :get_enum_value, :clang_getEnumConstantDeclValue, [CXCursor.by_value], :long_long
|
217
|
+
|
218
|
+
attach_function :is_virtual_base, :clang_isVirtualBase, [CXCursor.by_value], :uint
|
219
|
+
attach_function :is_dynamic_call, :clang_Cursor_isDynamicCall, [CXCursor.by_value], :uint
|
220
|
+
if FFI::Clang::Utils.satisfy_version?('3.3')
|
221
|
+
attach_function :is_variadic, :clang_Cursor_isVariadic, [CXCursor.by_value], :uint
|
222
|
+
end
|
223
|
+
attach_function :is_definition, :clang_isCursorDefinition, [CXCursor.by_value], :uint
|
224
|
+
attach_function :cxx_method_is_static, :clang_CXXMethod_isStatic, [CXCursor.by_value], :uint
|
225
|
+
attach_function :cxx_method_is_virtual, :clang_CXXMethod_isVirtual, [CXCursor.by_value], :uint
|
226
|
+
if FFI::Clang::Utils.satisfy_version?('3.4')
|
227
|
+
attach_function :cxx_method_is_pure_virtual, :clang_CXXMethod_isPureVirtual, [CXCursor.by_value], :uint
|
228
|
+
end
|
229
|
+
attach_function :cxx_get_access_specifier, :clang_getCXXAccessSpecifier, [CXCursor.by_value], :access_specifier
|
230
|
+
|
231
|
+
enum :language_kind, [:invalid, :c, :obj_c, :c_plus_plus]
|
232
|
+
attach_function :get_language, :clang_getCursorLanguage, [CXCursor.by_value], :language_kind
|
233
|
+
|
234
|
+
attach_function :get_canonical_cursor, :clang_getCanonicalCursor, [CXCursor.by_value], CXCursor.by_value
|
235
|
+
attach_function :get_cursor_definition, :clang_getCursorDefinition, [CXCursor.by_value], CXCursor.by_value
|
236
|
+
attach_function :get_specialized_cursor_template, :clang_getSpecializedCursorTemplate, [CXCursor.by_value], CXCursor.by_value
|
237
|
+
attach_function :get_template_cursor_kind, :clang_getTemplateCursorKind, [CXCursor.by_value], :kind
|
238
|
+
|
49
239
|
attach_function :get_translation_unit_cursor, :clang_getTranslationUnitCursor, [:CXTranslationUnit], CXCursor.by_value
|
240
|
+
attach_function :cursor_get_translation_unit, :clang_Cursor_getTranslationUnit, [CXCursor.by_value], :CXTranslationUnit
|
50
241
|
|
51
242
|
attach_function :get_null_cursor, :clang_getNullCursor, [], CXCursor.by_value
|
52
243
|
|
@@ -55,11 +246,13 @@ module FFI
|
|
55
246
|
attach_function :cursor_get_raw_comment_text, :clang_Cursor_getRawCommentText, [CXCursor.by_value], CXString.by_value
|
56
247
|
attach_function :cursor_get_parsed_comment, :clang_Cursor_getParsedComment, [CXCursor.by_value], CXComment.by_value
|
57
248
|
|
249
|
+
attach_function :get_cursor, :clang_getCursor, [:CXTranslationUnit, CXSourceLocation.by_value], CXCursor.by_value
|
58
250
|
attach_function :get_cursor_location, :clang_getCursorLocation, [CXCursor.by_value], CXSourceLocation.by_value
|
59
251
|
attach_function :get_cursor_extent, :clang_getCursorExtent, [CXCursor.by_value], CXSourceRange.by_value
|
60
252
|
attach_function :get_cursor_display_name, :clang_getCursorDisplayName, [CXCursor.by_value], CXString.by_value
|
61
253
|
attach_function :get_cursor_spelling, :clang_getCursorSpelling, [CXCursor.by_value], CXString.by_value
|
62
|
-
|
254
|
+
attach_function :get_cursor_usr, :clang_getCursorUSR, [CXCursor.by_value], CXString.by_value
|
255
|
+
|
63
256
|
attach_function :are_equal, :clang_equalCursors, [CXCursor.by_value, CXCursor.by_value], :uint
|
64
257
|
|
65
258
|
attach_function :is_declaration, :clang_isDeclaration, [:kind], :uint
|
@@ -79,8 +272,18 @@ module FFI
|
|
79
272
|
|
80
273
|
attach_function :get_cursor_type, :clang_getCursorType, [CXCursor.by_value], CXType.by_value
|
81
274
|
attach_function :get_cursor_result_type, :clang_getCursorResultType, [CXCursor.by_value], CXType.by_value
|
275
|
+
attach_function :get_typedef_decl_underlying_type, :clang_getTypedefDeclUnderlyingType, [CXCursor.by_value], CXType.by_value
|
276
|
+
attach_function :get_enum_decl_integer_type, :clang_getEnumDeclIntegerType, [CXCursor.by_value], CXType.by_value
|
277
|
+
attach_function :get_type_declaration, :clang_getTypeDeclaration, [CXType.by_value], FFI::Clang::Lib::CXCursor.by_value
|
82
278
|
|
279
|
+
attach_function :get_cursor_referenced, :clang_getCursorReferenced, [CXCursor.by_value], CXCursor.by_value
|
280
|
+
attach_function :get_cursor_semantic_parent, :clang_getCursorSemanticParent, [CXCursor.by_value], CXCursor.by_value
|
281
|
+
attach_function :get_cursor_lexical_parent, :clang_getCursorLexicalParent, [CXCursor.by_value], CXCursor.by_value
|
282
|
+
|
283
|
+
attach_function :get_cursor_availability, :clang_getCursorAvailability, [CXCursor.by_value], :availability
|
284
|
+
attach_function :get_cursor_linkage, :clang_getCursorLinkage, [CXCursor.by_value], :linkage_kind
|
285
|
+
# attach_function :get_included_file, :clang_getIncludedFile, [CXCursor.by_value], :CXFile
|
286
|
+
attach_function :get_cursor_hash, :clang_hashCursor, [CXCursor.by_value], :uint
|
83
287
|
end
|
84
288
|
end
|
85
289
|
end
|
86
|
-
|