ffi-clang 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +3 -4
- data/lib/ffi/clang/clang_version.rb +2 -1
- data/lib/ffi/clang/code_completion.rb +5 -3
- data/lib/ffi/clang/cursor.rb +48 -11
- data/lib/ffi/clang/diagnostic.rb +4 -3
- data/lib/ffi/clang/index.rb +11 -4
- data/lib/ffi/clang/lib/code_completion.rb +9 -8
- data/lib/ffi/clang/lib/cursor.rb +87 -24
- data/lib/ffi/clang/lib/diagnostic.rb +2 -2
- data/lib/ffi/clang/lib/file.rb +3 -1
- data/lib/ffi/clang/lib/index.rb +19 -0
- data/lib/ffi/clang/lib/printing_policy.rb +47 -0
- data/lib/ffi/clang/lib/string.rb +1 -3
- data/lib/ffi/clang/lib/translation_unit.rb +14 -2
- data/lib/ffi/clang/lib/type.rb +80 -3
- data/lib/ffi/clang/lib.rb +11 -10
- data/lib/ffi/clang/printing_policy.rb +36 -0
- data/lib/ffi/clang/source_location.rb +35 -18
- data/lib/ffi/clang/type.rb +46 -7
- data/lib/ffi/clang/version.rb +2 -2
- data/license.md +3 -2
- data/readme.md +15 -5
- data.tar.gz.sig +0 -0
- metadata +9 -61
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7bac4481c13b37b86189208dd7e0589bd96a42059319828c22ae623025ccc75
|
4
|
+
data.tar.gz: 3d6cc4ebca61f93b710b5a8fcc80d6fa51eeb8aac466246775c5ba80d8274c32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 816df5fbe722de3c3bc513598455a076bc64a32ee0d4d1697bc51dca767d06b9645be1c6dba444bc50d9d3f073fc02b2d13c6afbce355617df03368dc416930c
|
7
|
+
data.tar.gz: ec3be8892d6710742e173e54cb6c4f498b28a5178ca7c15ad9c08aae66f67824a039820f7ddff0a21c8aa50221c286dbeef9a2132e140bebb8c5f65fc69928c9
|
checksums.yaml.gz.sig
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
�Z�4?IcE
|
1
|
+
���%%�Cƕ��j�.� 7��8�#Hx���m�ԭT7�Z@���@Ŏ��,��56�t��x �S[��|�ux9,� !�(�z�V����}��V?c+���{�K�J���a�p����"��P�$�V�)�HN�խ��c� m+���S+"U9���0��ErK���
|
2
|
+
�jļ���(Ȑ0�B�^uط�r�h q��T���
|
3
|
+
�prab}���ّ7w�����Ji��u�YU�7��?��{(���bU�X�7<�`u>�,���(J#xk_*��l�t�^NC>�+9𡵅R`������0"���}�4�
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2014, by Masahiro Sano.
|
5
|
-
# Copyright, 2014-
|
5
|
+
# Copyright, 2014-2024, by Samuel Williams.
|
6
|
+
# Copyright, 2023-2024, by Charlie Savage.
|
6
7
|
|
7
8
|
require_relative 'lib/code_completion'
|
8
9
|
|
@@ -10,7 +11,7 @@ module FFI
|
|
10
11
|
module Clang
|
11
12
|
class CodeCompletion
|
12
13
|
def self.default_code_completion_options
|
13
|
-
Lib.opts_from
|
14
|
+
Lib.opts_from(Lib::CodeCompleteFlags, Lib.default_code_completion_options)
|
14
15
|
end
|
15
16
|
|
16
17
|
class Results < FFI::AutoPointer
|
@@ -27,7 +28,8 @@ module FFI
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def self.release(pointer)
|
30
|
-
|
31
|
+
results = Lib::CXCodeCompleteResults.new(pointer)
|
32
|
+
Lib.dispose_code_complete_results(results)
|
31
33
|
end
|
32
34
|
|
33
35
|
def each(&block)
|
data/lib/ffi/clang/cursor.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2013, by Garry Marshall.
|
5
|
-
# Copyright, 2013-
|
5
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
6
6
|
# Copyright, 2013, by Carlos Martín Nieto.
|
7
7
|
# Copyright, 2013, by Dave Wilkinson.
|
8
8
|
# Copyright, 2013, by Takeshi Watanabe.
|
@@ -11,10 +11,12 @@
|
|
11
11
|
# Copyright, 2014, by Niklas Therning.
|
12
12
|
# Copyright, 2019, by Michael Metivier.
|
13
13
|
# Copyright, 2022, by Motonori Iwamuro.
|
14
|
+
# Copyright, 2023-2024, by Charlie Savage.
|
14
15
|
|
15
16
|
require_relative 'lib/cursor'
|
16
17
|
require_relative 'lib/code_completion'
|
17
18
|
|
19
|
+
require_relative 'printing_policy'
|
18
20
|
require_relative 'source_location'
|
19
21
|
require_relative 'source_range'
|
20
22
|
require_relative 'comment'
|
@@ -108,9 +110,22 @@ module FFI
|
|
108
110
|
Lib.is_unexposed(kind) != 0
|
109
111
|
end
|
110
112
|
|
111
|
-
def
|
113
|
+
def expansion_location
|
112
114
|
ExpansionLocation.new(Lib.get_cursor_location(@cursor))
|
113
115
|
end
|
116
|
+
alias :location :expansion_location
|
117
|
+
|
118
|
+
def presumed_location
|
119
|
+
PresumedLocation.new(Lib.get_cursor_location(@cursor))
|
120
|
+
end
|
121
|
+
|
122
|
+
def spelling_location
|
123
|
+
SpellingLocation.new(Lib.get_cursor_location(@cursor))
|
124
|
+
end
|
125
|
+
|
126
|
+
def file_location
|
127
|
+
FileLocation.new(Lib.get_cursor_location(@cursor))
|
128
|
+
end
|
114
129
|
|
115
130
|
def extent
|
116
131
|
SourceRange.new(Lib.get_cursor_extent(@cursor))
|
@@ -120,10 +135,21 @@ module FFI
|
|
120
135
|
Lib.extract_string Lib.get_cursor_display_name(@cursor)
|
121
136
|
end
|
122
137
|
|
138
|
+
def qualified_name
|
139
|
+
if self.kind != :cursor_translation_unit
|
140
|
+
result = self.semantic_parent.qualified_name
|
141
|
+
result ? "#{result}::#{self.spelling}" : self.spelling
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
123
145
|
def spelling
|
124
146
|
Lib.extract_string Lib.get_cursor_spelling(@cursor)
|
125
147
|
end
|
126
148
|
|
149
|
+
def printing_policy
|
150
|
+
PrintingPolicy.new(cursor)
|
151
|
+
end
|
152
|
+
|
127
153
|
def usr
|
128
154
|
Lib.extract_string Lib.get_cursor_usr(@cursor)
|
129
155
|
end
|
@@ -148,14 +174,6 @@ module FFI
|
|
148
174
|
Type.new Lib.get_typedef_decl_underlying_type(@cursor), @translation_unit
|
149
175
|
end
|
150
176
|
|
151
|
-
def enum_decl_integer_type
|
152
|
-
Type.new Lib.get_enum_decl_integer_type(@cursor), @translation_unit
|
153
|
-
end
|
154
|
-
|
155
|
-
def typedef_type
|
156
|
-
Type.new Lib.get_typedef_decl_unerlying_type(@cursor), @translation_unit
|
157
|
-
end
|
158
|
-
|
159
177
|
def virtual_base?
|
160
178
|
Lib.is_virtual_base(@cursor) != 0
|
161
179
|
end
|
@@ -193,7 +211,7 @@ module FFI
|
|
193
211
|
end
|
194
212
|
|
195
213
|
def enum_type
|
196
|
-
Type.new Lib.
|
214
|
+
Type.new Lib.get_enum_decl_integer_type(@cursor), @translation_unit
|
197
215
|
end
|
198
216
|
|
199
217
|
def specialized_template
|
@@ -208,6 +226,21 @@ module FFI
|
|
208
226
|
Cursor.new Lib.get_cursor_definition(@cursor), @translation_unit
|
209
227
|
end
|
210
228
|
|
229
|
+
def opaque_declaration?
|
230
|
+
# Is this a declaration that does not have a definition in the translation unit
|
231
|
+
self.declaration? && !self.definition? && self.definition.invalid?
|
232
|
+
end
|
233
|
+
|
234
|
+
def forward_declaration?
|
235
|
+
# Is this a forward declaration for a definition contained in the same translation_unit?
|
236
|
+
# https://joshpeterson.github.io/identifying-a-forward-declaration-with-libclang
|
237
|
+
#
|
238
|
+
# Possible alternate implementations?
|
239
|
+
# self.declaration? && !self.definition? && self.definition
|
240
|
+
# !self.definition? && self.definition
|
241
|
+
self.declaration? && !self.eql?(self.definition) && !self.definition.invalid?
|
242
|
+
end
|
243
|
+
|
211
244
|
def referenced
|
212
245
|
Cursor.new Lib.get_cursor_referenced(@cursor), @translation_unit
|
213
246
|
end
|
@@ -383,6 +416,10 @@ module FFI
|
|
383
416
|
end
|
384
417
|
end
|
385
418
|
|
419
|
+
def to_s
|
420
|
+
"Cursor <#{self.kind.to_s.gsub(/^cursor_/, '')}: #{self.spelling}>"
|
421
|
+
end
|
422
|
+
|
386
423
|
def to_a
|
387
424
|
filter.collect{|child, parent| child}
|
388
425
|
end
|
data/lib/ffi/clang/diagnostic.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2010, by Jari Bakken.
|
5
5
|
# Copyright, 2012, by Hal Brodigan.
|
6
|
-
# Copyright, 2013-
|
6
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
7
7
|
# Copyright, 2013, by Garry Marshall.
|
8
8
|
# Copyright, 2014, by Masahiro Sano.
|
9
|
+
# Copyright, 2023, by Charlie Savage.
|
9
10
|
|
10
11
|
require_relative 'lib/diagnostic'
|
11
12
|
require_relative 'source_range'
|
@@ -14,7 +15,7 @@ module FFI
|
|
14
15
|
module Clang
|
15
16
|
class Diagnostic < AutoPointer
|
16
17
|
def self.default_display_opts
|
17
|
-
Lib.opts_from
|
18
|
+
Lib.opts_from(Lib::DiagnosticDisplayOptions, Lib.default_diagnostic_display_options)
|
18
19
|
end
|
19
20
|
|
20
21
|
def initialize(translation_unit, pointer)
|
@@ -96,7 +97,7 @@ module FFI
|
|
96
97
|
if opts.empty?
|
97
98
|
Lib.default_diagnostic_display_options
|
98
99
|
else
|
99
|
-
Lib.bitmask_from
|
100
|
+
Lib.bitmask_from(Lib::DiagnosticDisplayOptions, opts)
|
100
101
|
end
|
101
102
|
end
|
102
103
|
end
|
data/lib/ffi/clang/index.rb
CHANGED
@@ -3,11 +3,12 @@
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2010, by Jari Bakken.
|
5
5
|
# Copyright, 2012, by Hal Brodigan.
|
6
|
-
# Copyright, 2013-
|
6
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
7
7
|
# Copyright, 2013, by Carlos Martín Nieto.
|
8
8
|
# Copyright, 2013, by Dave Wilkinson.
|
9
9
|
# Copyright, 2013, by Takeshi Watanabe.
|
10
10
|
# Copyright, 2014, by Masahiro Sano.
|
11
|
+
# Copyright, 2023, by Charlie Savage.
|
11
12
|
|
12
13
|
require_relative 'lib/index'
|
13
14
|
|
@@ -26,10 +27,16 @@ module FFI
|
|
26
27
|
command_line_args = Array(command_line_args)
|
27
28
|
unsaved_files = UnsavedFile.unsaved_pointer_from(unsaved)
|
28
29
|
|
29
|
-
|
30
|
+
translation_unit_pointer_out = FFI::MemoryPointer.new(:pointer)
|
30
31
|
|
31
|
-
|
32
|
+
error_code = Lib.parse_translation_unit2(self, source_file, args_pointer_from(command_line_args), command_line_args.size, unsaved_files, unsaved.length, options_bitmask_from(opts), translation_unit_pointer_out)
|
33
|
+
if error_code != :cx_error_success
|
34
|
+
error_name = Lib::ErrorCodes.from_native(error_code, nil)
|
35
|
+
message = "Error parsing file. Code: #{error_name}. File: #{source_file.inspect}"
|
36
|
+
raise(Error, message)
|
37
|
+
end
|
32
38
|
|
39
|
+
translation_unit_pointer = translation_unit_pointer_out.read_pointer
|
33
40
|
TranslationUnit.new translation_unit_pointer, self
|
34
41
|
end
|
35
42
|
|
@@ -53,7 +60,7 @@ module FFI
|
|
53
60
|
end
|
54
61
|
|
55
62
|
def options_bitmask_from(opts)
|
56
|
-
Lib.bitmask_from
|
63
|
+
Lib.bitmask_from(Lib::TranslationUnitFlags, opts)
|
57
64
|
end
|
58
65
|
end
|
59
66
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2014, by Masahiro Sano.
|
5
5
|
# Copyright, 2014-2022, by Samuel Williams.
|
6
|
+
# Copyright, 2024, by Charlie Savage.
|
6
7
|
|
7
8
|
require_relative 'cursor'
|
8
9
|
require_relative 'diagnostic'
|
@@ -96,16 +97,16 @@ module FFI
|
|
96
97
|
attach_function :get_completion_brief_comment, :clang_getCompletionBriefComment, [:CXCompletionString], CXString.by_value
|
97
98
|
|
98
99
|
# CXCodeCompleteResults functions
|
99
|
-
attach_function :get_code_complete_get_num_diagnostics, :clang_codeCompleteGetNumDiagnostics, [CXCodeCompleteResults.
|
100
|
-
attach_function :get_code_complete_get_diagnostic, :clang_codeCompleteGetDiagnostic, [CXCodeCompleteResults.
|
101
|
-
attach_function :get_code_complete_get_contexts, :clang_codeCompleteGetContexts, [CXCodeCompleteResults.
|
102
|
-
attach_function :get_code_complete_get_container_kind, :clang_codeCompleteGetContainerKind, [CXCodeCompleteResults.
|
103
|
-
attach_function :get_code_complete_get_container_usr, :clang_codeCompleteGetContainerUSR, [CXCodeCompleteResults.
|
104
|
-
attach_function :get_code_complete_get_objc_selector, :clang_codeCompleteGetObjCSelector, [CXCodeCompleteResults.
|
100
|
+
attach_function :get_code_complete_get_num_diagnostics, :clang_codeCompleteGetNumDiagnostics, [CXCodeCompleteResults.by_ref], :uint
|
101
|
+
attach_function :get_code_complete_get_diagnostic, :clang_codeCompleteGetDiagnostic, [CXCodeCompleteResults.by_ref, :uint], :CXDiagnostic
|
102
|
+
attach_function :get_code_complete_get_contexts, :clang_codeCompleteGetContexts, [CXCodeCompleteResults.by_ref], :ulong_long
|
103
|
+
attach_function :get_code_complete_get_container_kind, :clang_codeCompleteGetContainerKind, [CXCodeCompleteResults.by_ref, :pointer], :cursor_kind
|
104
|
+
attach_function :get_code_complete_get_container_usr, :clang_codeCompleteGetContainerUSR, [CXCodeCompleteResults.by_ref], CXString.by_value
|
105
|
+
attach_function :get_code_complete_get_objc_selector, :clang_codeCompleteGetObjCSelector, [CXCodeCompleteResults.by_ref], CXString.by_value
|
105
106
|
|
106
107
|
# Other functions
|
107
|
-
attach_function :code_complete_at, :clang_codeCompleteAt, [:CXTranslationUnit, :string, :uint, :uint, :pointer, :uint, :uint], CXCodeCompleteResults.
|
108
|
-
attach_function :dispose_code_complete_results, :clang_disposeCodeCompleteResults, [CXCodeCompleteResults.
|
108
|
+
attach_function :code_complete_at, :clang_codeCompleteAt, [:CXTranslationUnit, :string, :uint, :uint, :pointer, :uint, :uint], CXCodeCompleteResults.by_ref
|
109
|
+
attach_function :dispose_code_complete_results, :clang_disposeCodeCompleteResults, [CXCodeCompleteResults.by_ref], :void
|
109
110
|
attach_function :get_cursor_completion_string, :clang_getCursorCompletionString, [CXCursor.by_value], :CXCompletionString
|
110
111
|
attach_function :default_code_completion_options, :clang_defaultCodeCompleteOptions, [], :uint
|
111
112
|
attach_function :sort_code_completion_results, :clang_sortCodeCompletionResults, [:pointer, :uint], :void
|
data/lib/ffi/clang/lib/cursor.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2013, by Garry Marshall.
|
5
|
-
# Copyright, 2013-
|
5
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
6
6
|
# Copyright, 2013, by Carlos Martín Nieto.
|
7
7
|
# Copyright, 2013, by Dave Wilkinson.
|
8
8
|
# Copyright, 2013, by Takeshi Watanabe.
|
@@ -10,7 +10,8 @@
|
|
10
10
|
# Copyright, 2014, by George Pimm.
|
11
11
|
# Copyright, 2014, by Niklas Therning.
|
12
12
|
# Copyright, 2019, by Michael Metivier.
|
13
|
-
# Copyright, 2020, by
|
13
|
+
# Copyright, 2020, by Zete Lui.
|
14
|
+
# Copyright, 2023-2024, by Charlie Savage.
|
14
15
|
|
15
16
|
require_relative 'translation_unit'
|
16
17
|
require_relative 'diagnostic'
|
@@ -26,9 +27,9 @@ module FFI
|
|
26
27
|
enum :cursor_kind, [
|
27
28
|
:cursor_unexposed_decl, 1,
|
28
29
|
:cursor_struct, 2,
|
29
|
-
# :
|
30
|
+
# :cursor_struct_decl, :cursor_struct
|
30
31
|
:cursor_union, 3,
|
31
|
-
# :
|
32
|
+
# :cursor_union_decl, :cursor_union
|
32
33
|
:cursor_class_decl, 4,
|
33
34
|
:cursor_enum_decl, 5,
|
34
35
|
:cursor_field_decl, 6,
|
@@ -471,28 +472,90 @@ module FFI
|
|
471
472
|
attach_function :get_overridden_cursors, :clang_getOverriddenCursors, [CXCursor.by_value, :pointer, :pointer], :void
|
472
473
|
attach_function :dispose_overridden_cursors, :clang_disposeOverriddenCursors, [:pointer], :void
|
473
474
|
|
474
|
-
attach_function :get_typedef_decl_unerlying_type, :clang_getTypedefDeclUnderlyingType, [CXCursor.by_value], CXType.by_value
|
475
|
-
|
476
|
-
attach_function :get_enum_type, :clang_getEnumDeclIntegerType, [CXCursor.by_value], CXType.by_value
|
477
|
-
|
478
475
|
attach_function :get_num_args, :clang_Cursor_getNumArguments, [CXCursor.by_value], :int
|
479
476
|
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
477
|
+
attach_function :is_converting_constructor, :clang_CXXConstructor_isConvertingConstructor, [CXCursor.by_value], :uint
|
478
|
+
attach_function :is_copy_constructor, :clang_CXXConstructor_isCopyConstructor, [CXCursor.by_value], :uint
|
479
|
+
attach_function :is_default_constructor, :clang_CXXConstructor_isDefaultConstructor, [CXCursor.by_value], :uint
|
480
|
+
attach_function :is_move_constructor, :clang_CXXConstructor_isMoveConstructor, [CXCursor.by_value], :uint
|
481
|
+
attach_function :is_mutable, :clang_CXXField_isMutable, [CXCursor.by_value], :uint
|
482
|
+
attach_function :is_defaulted, :clang_CXXMethod_isDefaulted, [CXCursor.by_value], :uint
|
483
|
+
attach_function :is_abstract, :clang_CXXRecord_isAbstract, [CXCursor.by_value], :uint
|
484
|
+
attach_function :is_enum_scoped, :clang_EnumDecl_isScoped, [CXCursor.by_value], :uint
|
485
|
+
attach_function :is_const, :clang_CXXMethod_isConst, [CXCursor.by_value], :uint
|
486
|
+
|
487
|
+
if Clang.clang_version >= Gem::Version.new('16.0.0')
|
488
|
+
attach_function :get_unqualified_type, :clang_getUnqualifiedType, [CXType.by_value], CXType.by_value
|
489
|
+
attach_function :get_non_reference_type, :clang_getNonReferenceType, [CXType.by_value], CXType.by_value
|
490
|
+
attach_function :is_deleted, :clang_CXXMethod_isDeleted, [CXCursor.by_value], :uint
|
491
|
+
attach_function :is_copy_assignment_operator, :clang_CXXMethod_isCopyAssignmentOperator, [CXCursor.by_value], :uint
|
492
|
+
attach_function :is_move_assignment_operator, :clang_CXXMethod_isMoveAssignmentOperator, [CXCursor.by_value], :uint
|
493
|
+
end
|
494
|
+
|
495
|
+
if Clang.clang_version >= Gem::Version.new('17.0.0')
|
496
|
+
attach_function :is_explicit, :clang_CXXMethod_isExplicit, [CXCursor.by_value], :uint
|
497
|
+
|
498
|
+
enum :binary_operator_kind, [
|
499
|
+
:binary_operator_invalid,
|
500
|
+
:binary_operator_ptr_mem_d,
|
501
|
+
:binary_operator_ptr_mem_i,
|
502
|
+
:binary_operator_mul,
|
503
|
+
:binary_operator_div,
|
504
|
+
:binary_operator_rem,
|
505
|
+
:binary_operator_add,
|
506
|
+
:binary_operator_sub,
|
507
|
+
:binary_operator_shl,
|
508
|
+
:binary_operator_shr,
|
509
|
+
:binary_operator_cmp,
|
510
|
+
:binary_operator_lt,
|
511
|
+
:binary_operator_gt,
|
512
|
+
:binary_operator_le,
|
513
|
+
:binary_operator_ge,
|
514
|
+
:binary_operator_eq,
|
515
|
+
:binary_operator_ne,
|
516
|
+
:binary_operator_and,
|
517
|
+
:binary_operator_xor,
|
518
|
+
:binary_operator_or,
|
519
|
+
:binary_operator_l_and,
|
520
|
+
:binary_operator_l_or,
|
521
|
+
:binary_operator_assign,
|
522
|
+
:binary_operator_mul_assign,
|
523
|
+
:binary_operator_div_assign,
|
524
|
+
:binary_operator_rem_assign,
|
525
|
+
:binary_operator_add_assign,
|
526
|
+
:binary_operator_sub_assign,
|
527
|
+
:binary_operator_shl_assign,
|
528
|
+
:binary_operator_shr_assign,
|
529
|
+
:binary_operator_and_assign,
|
530
|
+
:binary_operator_xor_assign,
|
531
|
+
:binary_operator_or_assign,
|
532
|
+
:binary_operator_comma
|
533
|
+
]
|
534
|
+
|
535
|
+
attach_function :get_binary_operator_kind_spelling, :clang_getBinaryOperatorKindSpelling, [:binary_operator_kind], CXString.by_value
|
536
|
+
attach_function :get_cursor_binary_operator_kind, :clang_getCursorBinaryOperatorKind, [CXCursor.by_value], :binary_operator_kind
|
537
|
+
|
538
|
+
enum :unary_operator_kind, [
|
539
|
+
:unary_operator_Invalid,
|
540
|
+
:unary_operator_PostInc,
|
541
|
+
:unary_operator_PostDec,
|
542
|
+
:unary_operator_PreInc,
|
543
|
+
:unary_operator_PreDec,
|
544
|
+
:unary_operator_AddrOf,
|
545
|
+
:unary_operator_Deref,
|
546
|
+
:unary_operator_Plus,
|
547
|
+
:unary_operator_Minus,
|
548
|
+
:unary_operator_Not,
|
549
|
+
:unary_operator_LNot,
|
550
|
+
:unary_operator_Real,
|
551
|
+
:unary_operator_Imag,
|
552
|
+
:unary_operator_Extension,
|
553
|
+
:unary_operator_Coawait
|
554
|
+
]
|
555
|
+
|
556
|
+
attach_function :get_unary_operator_kind_spelling, :clang_getUnaryOperatorKindSpelling, [:unary_operator_kind], CXString.by_value
|
557
|
+
attach_function :get_cursor_unary_operator_kind, :clang_getCursorUnaryOperatorKind, [CXCursor.by_value], :unary_operator_kind
|
558
|
+
end
|
496
559
|
end
|
497
560
|
end
|
498
561
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
|
-
# Copyright, 2013-
|
4
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
5
5
|
# Copyright, 2013, by Garry Marshall.
|
6
6
|
# Copyright, 2014, by Masahiro Sano.
|
7
|
-
# Copyright, 2020, by
|
7
|
+
# Copyright, 2020, by Zete Lui.
|
8
8
|
|
9
9
|
require_relative 'translation_unit'
|
10
10
|
require_relative 'source_location'
|
data/lib/ffi/clang/lib/file.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
|
-
# Copyright,
|
4
|
+
# Copyright, 2010, by Jari Bakken.
|
5
|
+
# Copyright, 2012, by Hal Brodigan.
|
6
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
5
7
|
# Copyright, 2013, by Carlos Martín Nieto.
|
6
8
|
# Copyright, 2014, by Masahiro Sano.
|
7
9
|
|
data/lib/ffi/clang/lib/index.rb
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
# Copyright, 2010, by Jari Bakken.
|
5
5
|
# Copyright, 2012, by Hal Brodigan.
|
6
6
|
# Copyright, 2013-2022, by Samuel Williams.
|
7
|
+
# Copyright, 2024, by Charlie Savage.
|
7
8
|
|
8
9
|
module FFI
|
9
10
|
module Clang
|
@@ -13,6 +14,24 @@ module FFI
|
|
13
14
|
# Source code index:
|
14
15
|
attach_function :create_index, :clang_createIndex, [:int, :int], :CXIndex
|
15
16
|
attach_function :dispose_index, :clang_disposeIndex, [:CXIndex], :void
|
17
|
+
|
18
|
+
if Clang.clang_version >= Gem::Version.new('17.0.0')
|
19
|
+
class CXIndexOptions < FFI::Struct
|
20
|
+
layout(
|
21
|
+
:size, :uint,
|
22
|
+
:thread_background_priority_for_indexing, :uchar,
|
23
|
+
:thread_background_priority_for_editing, :uchar,
|
24
|
+
:exclude_declarations_from_pch, :uint,
|
25
|
+
:display_diagnostics, :uint,
|
26
|
+
:store_preambles_in_memory, :uint,
|
27
|
+
:reserved, :uint,
|
28
|
+
:preamble_storage_path, :string,
|
29
|
+
:invocation_emission_path, :string
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
attach_function :create_index_with_options, :clang_createIndexWithOptions, [CXIndexOptions.by_ref], :CXIndex
|
34
|
+
end
|
16
35
|
end
|
17
36
|
end
|
18
37
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2024, by Charlie Savage.
|
5
|
+
# Copyright, 2024, by Samuel Williams.
|
6
|
+
|
7
|
+
module FFI
|
8
|
+
module Clang
|
9
|
+
module Lib
|
10
|
+
typedef :pointer, :CXPrintingPolicy
|
11
|
+
|
12
|
+
PrintingPolicyProperty = enum [:printing_policy_indentation,
|
13
|
+
:printing_policy_suppress_specifiers,
|
14
|
+
:printing_policy_suppress_tag_keyword,
|
15
|
+
:printing_policy_include_tag_definition,
|
16
|
+
:printing_policy_suppress_scope,
|
17
|
+
:printing_policy_suppress_unwritten_scope,
|
18
|
+
:printing_policy_suppress_initializers,
|
19
|
+
:printing_policy_constant_array_aize_as_written,
|
20
|
+
:printing_policy_anonymous_tag_locations,
|
21
|
+
:printing_policy_suppress_strong_lifetime,
|
22
|
+
:printing_policy_suppress_lifetime_qualifiers,
|
23
|
+
:printing_policy_suppress_template_args_in_cxx_constructors,
|
24
|
+
:printing_policy_bool,
|
25
|
+
:printing_policy_restrict,
|
26
|
+
:printing_policy_alignof,
|
27
|
+
:printing_policy_underscore_alignof,
|
28
|
+
:printing_policy_use_void_for_zero_params,
|
29
|
+
:printing_policy_terse_output,
|
30
|
+
:printing_policy_polish_for_declaration,
|
31
|
+
:printing_policy_half,
|
32
|
+
:printing_policy_msw_char,
|
33
|
+
:printing_policy_include_new_lines,
|
34
|
+
:printing_policy_msvc_formatting,
|
35
|
+
:printing_policy_constants_as_written,
|
36
|
+
:printing_policy_suppress_implicit_base,
|
37
|
+
:printing_policy_fully_qualified_name,
|
38
|
+
:printing_policy_last_property]
|
39
|
+
|
40
|
+
attach_function :printing_policy_get_property, :clang_PrintingPolicy_getProperty, [:CXPrintingPolicy, PrintingPolicyProperty], :uint
|
41
|
+
attach_function :printing_policy_set_property, :clang_PrintingPolicy_setProperty, [:CXPrintingPolicy, PrintingPolicyProperty, :uint], :void
|
42
|
+
attach_function :get_printing_policy, :clang_getCursorPrintingPolicy, [CXCursor.by_value], :CXPrintingPolicy
|
43
|
+
attach_function :dispose_printing_policy, :clang_PrintingPolicy_dispose, [:CXPrintingPolicy], :void
|
44
|
+
attach_function :pretty_print, :clang_getCursorPrettyPrinted, [CXCursor.by_value, :CXPrintingPolicy], CXString.by_value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/ffi/clang/lib/string.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
|
-
# Copyright,
|
5
|
-
# Copyright, 2012, by Hal Brodigan.
|
6
|
-
# Copyright, 2013-2022, by Samuel Williams.
|
4
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
7
5
|
|
8
6
|
module FFI
|
9
7
|
module Clang
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
|
-
# Copyright, 2013-
|
4
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
5
5
|
# Copyright, 2014, by Masahiro Sano.
|
6
6
|
# Copyright, 2019, by Hayden Purdy.
|
7
7
|
# Copyright, 2022, by Motonori Iwamuro.
|
8
|
+
# Copyright, 2023, by Charlie Savage.
|
8
9
|
|
9
10
|
require_relative 'index'
|
10
11
|
|
@@ -28,7 +29,9 @@ module FFI
|
|
28
29
|
:single_file_parse, 0x400,
|
29
30
|
:limit_skip_function_bodies_to_preamble, 0x800,
|
30
31
|
:include_attributed_type, 0x1000,
|
31
|
-
:visit_implicit_attributes, 0x2000
|
32
|
+
:visit_implicit_attributes, 0x2000,
|
33
|
+
:ignore_non_errors_from_included_files, 0x4000,
|
34
|
+
:retain_excluded_conditional_blocks, 0x8000,
|
32
35
|
]
|
33
36
|
|
34
37
|
SaveTranslationUnitFlags = enum [
|
@@ -63,6 +66,14 @@ module FFI
|
|
63
66
|
:preprocessor_header_search, 14,
|
64
67
|
]
|
65
68
|
|
69
|
+
ErrorCodes = enum [
|
70
|
+
:cx_error_success, 0,
|
71
|
+
:cx_error_failure, 1,
|
72
|
+
:cx_error_crashed, 2,
|
73
|
+
:cx_error_invalid_arguments, 3,
|
74
|
+
:cx_error_ast_read_error, 4,
|
75
|
+
]
|
76
|
+
|
66
77
|
class CXTUResourceUsage < FFI::Struct
|
67
78
|
layout(
|
68
79
|
:data, :pointer,
|
@@ -80,6 +91,7 @@ module FFI
|
|
80
91
|
|
81
92
|
# Source code translation units:
|
82
93
|
attach_function :parse_translation_unit, :clang_parseTranslationUnit, [:CXIndex, :string, :pointer, :int, :pointer, :uint, :uint], :CXTranslationUnit
|
94
|
+
attach_function :parse_translation_unit2, :clang_parseTranslationUnit2, [:CXIndex, :string, :pointer, :int, :pointer, :uint, :uint, :pointer], ErrorCodes
|
83
95
|
attach_function :create_translation_unit, :clang_createTranslationUnit, [:CXIndex, :string], :CXTranslationUnit
|
84
96
|
attach_function :dispose_translation_unit, :clang_disposeTranslationUnit, [:CXTranslationUnit], :void
|
85
97
|
attach_function :get_translation_unit_spelling, :clang_getTranslationUnitSpelling, [:CXTranslationUnit], CXString.by_value
|
data/lib/ffi/clang/lib/type.rb
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2013, by Carlos Martín Nieto.
|
5
|
-
# Copyright, 2013-
|
5
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
6
6
|
# Copyright, 2013, by Takeshi Watanabe.
|
7
7
|
# Copyright, 2013-2014, by Masahiro Sano.
|
8
8
|
# Copyright, 2014, by Niklas Therning.
|
9
|
+
# Copyright, 2024, by Charlie Savage.
|
9
10
|
|
10
11
|
module FFI
|
11
12
|
module Clang
|
@@ -59,6 +60,71 @@ module FFI
|
|
59
60
|
:type_variable_array, 115,
|
60
61
|
:type_dependent_sized_array, 116,
|
61
62
|
:type_member_pointer, 117,
|
63
|
+
:type_auto, 118,
|
64
|
+
:type_elaborated, 119,
|
65
|
+
:type_pipe, 120,
|
66
|
+
:type_ocl_image_1d_ro, 121,
|
67
|
+
:type_ocl_image_1d_array_ro, 122,
|
68
|
+
:type_ocl_image_1d_buffer_ro, 123,
|
69
|
+
:type_ocl_image_2d_ro, 124,
|
70
|
+
:type_ocl_image_2d_array_ro, 125,
|
71
|
+
:type_ocl_image_2d_depth_ro, 126,
|
72
|
+
:type_ocl_image_2d_array_depth_ro, 127,
|
73
|
+
:type_ocl_image_2d_msaa_ro, 128,
|
74
|
+
:type_ocl_image_2d_array_msaa_ro, 129,
|
75
|
+
:type_ocl_image_2d_msaa_depth_ro, 130,
|
76
|
+
:type_ocl_image_2d_array_msaa_depth_ro, 131,
|
77
|
+
:type_ocl_image_3d_ro, 132,
|
78
|
+
:type_ocl_image_1d_wo, 133,
|
79
|
+
:type_ocl_image_1d_array_wo, 134,
|
80
|
+
:type_ocl_image_1d_buffer_wo, 135,
|
81
|
+
:type_ocl_image_2d_wo, 136,
|
82
|
+
:type_ocl_image_2d_array_wo, 137,
|
83
|
+
:type_ocl_image_2d_depth_wo, 138,
|
84
|
+
:type_ocl_image_2d_arraydepth_wo, 139,
|
85
|
+
:type_ocl_image_2d_msaa_wo, 140,
|
86
|
+
:type_ocl_image_2d_array_msaa_wo, 141,
|
87
|
+
:type_ocl_image_2d_msaa_depth_wo, 142,
|
88
|
+
:type_ocl_image_2d_array_msaa_depth_wo, 143,
|
89
|
+
:type_ocl_image_3d_wo, 144,
|
90
|
+
:type_ocl_image_1d_rw, 145,
|
91
|
+
:type_ocl_image_1d_array_rw, 146,
|
92
|
+
:type_ocl_image_1d_buffer_rw, 147,
|
93
|
+
:type_ocl_image_2d_rw, 148,
|
94
|
+
:type_ocl_image_2d_array_rw, 149,
|
95
|
+
:type_ocl_image_2d_depth_rw, 150,
|
96
|
+
:type_ocl_image_2d_arraydepth_rw, 151,
|
97
|
+
:type_ocl_image_2d_msaa_rw, 152,
|
98
|
+
:type_ocl_image_2d_array_msaa_rw, 153,
|
99
|
+
:type_ocl_image_2d_msaa_depth_rw, 154,
|
100
|
+
:type_ocl_image_2d_array_msaa_depth_rw, 155,
|
101
|
+
:type_ocl_image_3d_rw, 156,
|
102
|
+
:type_ocl_sampler, 157,
|
103
|
+
:type_ocl_event, 158,
|
104
|
+
:type_ocl_queue, 159,
|
105
|
+
:type_ocl_reserve_id, 160,
|
106
|
+
:type_objc_object, 161,
|
107
|
+
:type_objc_type_param, 162,
|
108
|
+
:type_attributed, 163,
|
109
|
+
:type_ocl_intel_subgroup_avc_mce_payload, 164,
|
110
|
+
:type_ocl_intel_subgroup_avc_ime_payload, 165,
|
111
|
+
:type_ocl_intel_subgroup_avc_ref_payload, 166,
|
112
|
+
:type_ocl_intel_subgroup_avc_sic_payload, 167,
|
113
|
+
:type_ocl_intel_subgroup_avc_mce_result, 168,
|
114
|
+
:type_ocl_intel_subgroup_avc_ime_result, 169,
|
115
|
+
:type_ocl_intel_subgroup_avc_ref_result, 170,
|
116
|
+
:type_ocl_intel_subgroup_avc_sic_result, 171,
|
117
|
+
:type_ocl_intel_subgroup_avc_ime_result_single_reference_streamout, 172,
|
118
|
+
:type_ocl_intel_subgroup_avc_ime_result_dual_reference_streamout, 173,
|
119
|
+
:type_ocl_intel_subgroup_avc_ime_single_reference_streamin, 174,
|
120
|
+
:type_ocl_intel_subgroup_avc_ime_dual_reference_streamin, 175,
|
121
|
+
:type_ocl_intel_subgroup_avc_ime_result_single_ref_streamout, 172,
|
122
|
+
:type_ocl_intel_subgroup_avc_ime_result_dual_ref_streamout, 173,
|
123
|
+
:type_ocl_intel_subgroup_avc_ime_single_ref_streamin, 174,
|
124
|
+
:type_ocl_intel_subgroup_avc_ime_dual_ref_streamin, 175,
|
125
|
+
:type_ext_vector, 176,
|
126
|
+
:type_atomic, 177,
|
127
|
+
:type_btf_tag_attributed, 178
|
62
128
|
]
|
63
129
|
|
64
130
|
enum :calling_conv, [
|
@@ -74,6 +140,16 @@ module FFI
|
|
74
140
|
:calling_conv_intel_ocl_bicc, 9,
|
75
141
|
:calling_conv_x86_64_win64, 10,
|
76
142
|
:calling_conv_x86_64_sysv, 11,
|
143
|
+
:calling_conv_x86_vector_call, 12,
|
144
|
+
:calling_conv_swift, 13,
|
145
|
+
:calling_conv_preserve_most, 14,
|
146
|
+
:calling_conv_preserve_all, 15,
|
147
|
+
:calling_conv_aarch64_vector_call, 16,
|
148
|
+
:calling_conv_swift_async, 17,
|
149
|
+
:calling_conv_aarch64_sve_pcs, 18,
|
150
|
+
:calling_conv_m68k_rtd, 19,
|
151
|
+
:calling_conv_preserve_none, 20,
|
152
|
+
:calling_conv_riscv_vector_call, 21,
|
77
153
|
:calling_conv_invalid, 100,
|
78
154
|
:calling_conv_unexposed, 200
|
79
155
|
]
|
@@ -90,6 +166,7 @@ module FFI
|
|
90
166
|
:layout_error_dependent, -3,
|
91
167
|
:layout_error_not_constant_size, -4,
|
92
168
|
:layout_error_invalid_field_name, -5,
|
169
|
+
:layout_error_undeduced, -6
|
93
170
|
]
|
94
171
|
|
95
172
|
class CXType < FFI::Struct
|
@@ -108,7 +185,7 @@ module FFI
|
|
108
185
|
attach_function :get_pointee_type, :clang_getPointeeType, [CXType.by_value], CXType.by_value
|
109
186
|
attach_function :get_result_type, :clang_getResultType, [CXType.by_value], CXType.by_value
|
110
187
|
attach_function :get_canonical_type, :clang_getCanonicalType, [CXType.by_value], CXType.by_value
|
111
|
-
|
188
|
+
|
112
189
|
attach_function :type_get_class_type, :clang_Type_getClassType, [CXType.by_value], CXType.by_value
|
113
190
|
|
114
191
|
attach_function :is_const_qualified_type, :clang_isConstQualifiedType, [CXType.by_value], :uint
|
@@ -127,7 +204,7 @@ module FFI
|
|
127
204
|
attach_function :type_get_offset_of, :clang_Type_getOffsetOf, [CXType.by_value, :string], :long_long
|
128
205
|
|
129
206
|
attach_function :type_get_cxx_ref_qualifier, :clang_Type_getCXXRefQualifier, [CXType.by_value], :ref_qualifier_kind
|
130
|
-
|
207
|
+
|
131
208
|
attach_function :get_fuction_type_calling_conv, :clang_getFunctionTypeCallingConv, [CXType.by_value], :calling_conv
|
132
209
|
|
133
210
|
attach_function :equal_types, :clang_equalTypes, [CXType.by_value, CXType.by_value], :uint
|
data/lib/ffi/clang/lib.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2010-2012, by Jari Bakken.
|
5
5
|
# Copyright, 2012, by Hal Brodigan.
|
6
|
-
# Copyright, 2013-
|
6
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
7
7
|
# Copyright, 2013-2014, by Carlos Martín Nieto.
|
8
8
|
# Copyright, 2013, by Takeshi Watanabe.
|
9
9
|
# Copyright, 2014, by Masahiro Sano.
|
@@ -12,7 +12,8 @@
|
|
12
12
|
# Copyright, 2016, by Mike Dalessio.
|
13
13
|
# Copyright, 2019, by Hayden Purdy.
|
14
14
|
# Copyright, 2019, by Dominic Sisnero.
|
15
|
-
# Copyright, 2020, by
|
15
|
+
# Copyright, 2020, by Zete Lui.
|
16
|
+
# Copyright, 2023, by Charlie Savage.
|
16
17
|
|
17
18
|
require 'mkmf'
|
18
19
|
|
@@ -69,11 +70,11 @@ module FFI
|
|
69
70
|
def self.bitmask_from(enum, opts)
|
70
71
|
bitmask = 0
|
71
72
|
|
72
|
-
opts.each do |
|
73
|
-
if int = enum[
|
73
|
+
opts.each do |symbol|
|
74
|
+
if int = enum[symbol]
|
74
75
|
bitmask |= int
|
75
76
|
else
|
76
|
-
|
77
|
+
raise Error, "unknown option: #{symbol}, expected one of #{enum.symbols}"
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
@@ -82,19 +83,19 @@ module FFI
|
|
82
83
|
|
83
84
|
def self.opts_from(enum, bitmask)
|
84
85
|
bit = 1
|
85
|
-
|
86
|
+
result = []
|
86
87
|
while bitmask != 0
|
87
88
|
if bitmask & 1
|
88
|
-
if
|
89
|
-
|
89
|
+
if symbol = enum[bit]
|
90
|
+
result << symbol
|
90
91
|
else
|
91
|
-
raise
|
92
|
+
raise(Error, "unknown values: #{bit}, expected one of #{enum.symbols}")
|
92
93
|
end
|
93
94
|
end
|
94
95
|
bitmask >>= 1
|
95
96
|
bit <<= 1
|
96
97
|
end
|
97
|
-
|
98
|
+
result
|
98
99
|
end
|
99
100
|
end
|
100
101
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2024, by Charlie Savage.
|
5
|
+
# Copyright, 2024, by Samuel Williams.
|
6
|
+
|
7
|
+
require_relative 'lib/printing_policy'
|
8
|
+
|
9
|
+
module FFI
|
10
|
+
module Clang
|
11
|
+
class PrintingPolicy < AutoPointer
|
12
|
+
def initialize(cursor)
|
13
|
+
policy = Lib.get_printing_policy(cursor)
|
14
|
+
super(policy)
|
15
|
+
@cursor = cursor
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.release(pointer)
|
19
|
+
Lib.dispose_printing_policy(pointer)
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_property(property)
|
23
|
+
result = Lib.printing_policy_get_property(self, property)
|
24
|
+
result == 0 ? false : true
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_property(property, value)
|
28
|
+
Lib.printing_policy_set_property(self, property, value ? 1 : 0)
|
29
|
+
end
|
30
|
+
|
31
|
+
def pretty_print
|
32
|
+
Lib.extract_string Lib.pretty_print(@cursor, self)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -6,6 +6,7 @@
|
|
6
6
|
# Copyright, 2013-2022, by Samuel Williams.
|
7
7
|
# Copyright, 2013, by Garry Marshall.
|
8
8
|
# Copyright, 2014, by Masahiro Sano.
|
9
|
+
# Copyright, 2024, by Charlie Savage.
|
9
10
|
|
10
11
|
require_relative 'lib/source_location'
|
11
12
|
require_relative 'lib/file'
|
@@ -30,22 +31,6 @@ module FFI
|
|
30
31
|
Lib.location_is_from_main_file(@location) != 0
|
31
32
|
end
|
32
33
|
|
33
|
-
def expansion_location
|
34
|
-
ExpansionLocation.new(@location)
|
35
|
-
end
|
36
|
-
|
37
|
-
def presumed_location
|
38
|
-
PresumedLocation.new(@location)
|
39
|
-
end
|
40
|
-
|
41
|
-
def spelling_location
|
42
|
-
SpellingLocation.new(@location)
|
43
|
-
end
|
44
|
-
|
45
|
-
def file_location
|
46
|
-
FileLocation.new(@location)
|
47
|
-
end
|
48
|
-
|
49
34
|
def null?
|
50
35
|
Lib.equal_locations(@location, Lib.get_null_location) != 0
|
51
36
|
end
|
@@ -73,6 +58,14 @@ module FFI
|
|
73
58
|
@column = column.get_uint(0)
|
74
59
|
@offset = offset.get_uint(0)
|
75
60
|
end
|
61
|
+
|
62
|
+
def as_string
|
63
|
+
"#{@file}:#{@line}:#{@column}:#{@offset}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s
|
67
|
+
"ExpansionLocation <#{self.as_string}>"
|
68
|
+
end
|
76
69
|
end
|
77
70
|
|
78
71
|
class PresumedLocation < SourceLocation
|
@@ -82,8 +75,8 @@ module FFI
|
|
82
75
|
super(location)
|
83
76
|
|
84
77
|
cxstring = MemoryPointer.new Lib::CXString
|
85
|
-
line
|
86
|
-
column
|
78
|
+
line = MemoryPointer.new :uint
|
79
|
+
column = MemoryPointer.new :uint
|
87
80
|
|
88
81
|
Lib::get_presumed_location(@location, cxstring, line, column)
|
89
82
|
|
@@ -91,6 +84,14 @@ module FFI
|
|
91
84
|
@line = line.get_uint(0)
|
92
85
|
@column = column.get_uint(0)
|
93
86
|
end
|
87
|
+
|
88
|
+
def as_string
|
89
|
+
"#{@filename}:#{@line}:#{@column}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def to_s
|
93
|
+
"PresumedLocation <#{self.as_string}>"
|
94
|
+
end
|
94
95
|
end
|
95
96
|
|
96
97
|
class SpellingLocation < SourceLocation
|
@@ -111,6 +112,14 @@ module FFI
|
|
111
112
|
@column = column.get_uint(0)
|
112
113
|
@offset = offset.get_uint(0)
|
113
114
|
end
|
115
|
+
|
116
|
+
def as_string
|
117
|
+
"#{@file}:#{@line}:#{@column}:#{@offset}"
|
118
|
+
end
|
119
|
+
|
120
|
+
def to_s
|
121
|
+
"SpellingLocation <#{self.as_string}>"
|
122
|
+
end
|
114
123
|
end
|
115
124
|
|
116
125
|
class FileLocation < SourceLocation
|
@@ -131,6 +140,14 @@ module FFI
|
|
131
140
|
@column = column.get_uint(0)
|
132
141
|
@offset = offset.get_uint(0)
|
133
142
|
end
|
143
|
+
|
144
|
+
def as_string
|
145
|
+
"#{@file}:#{@line}:#{@column}:#{@offset}"
|
146
|
+
end
|
147
|
+
|
148
|
+
def to_s
|
149
|
+
"FileLocation <#{self.as_string}>"
|
150
|
+
end
|
134
151
|
end
|
135
152
|
end
|
136
153
|
end
|
data/lib/ffi/clang/type.rb
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2013, by Carlos Martín Nieto.
|
5
|
-
# Copyright, 2013-
|
5
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
6
6
|
# Copyright, 2013, by Takeshi Watanabe.
|
7
7
|
# Copyright, 2014, by Masahiro Sano.
|
8
8
|
# Copyright, 2014, by Niklas Therning.
|
9
|
+
# Copyright, 2024, by Charlie Savage.
|
9
10
|
|
10
11
|
module FFI
|
11
12
|
module Clang
|
@@ -41,8 +42,17 @@ module FFI
|
|
41
42
|
Lib.get_num_arg_types(@type)
|
42
43
|
end
|
43
44
|
|
45
|
+
def pointer?
|
46
|
+
[:type_pointer, :type_block_pointer, :type_obj_c_object_pointer, :type_member_pointer].
|
47
|
+
include?(self.kind)
|
48
|
+
end
|
49
|
+
|
44
50
|
def pointee
|
45
|
-
|
51
|
+
if self.pointer?
|
52
|
+
Type.new Lib.get_pointee_type(@type), @translation_unit
|
53
|
+
else
|
54
|
+
nil
|
55
|
+
end
|
46
56
|
end
|
47
57
|
|
48
58
|
def canonical
|
@@ -50,7 +60,11 @@ module FFI
|
|
50
60
|
end
|
51
61
|
|
52
62
|
def class_type
|
53
|
-
|
63
|
+
if self.kind == :type_member_pointer
|
64
|
+
Type.new Lib.type_get_class_type(@type), @translation_unit
|
65
|
+
else
|
66
|
+
nil
|
67
|
+
end
|
54
68
|
end
|
55
69
|
|
56
70
|
def const_qualified?
|
@@ -65,24 +79,49 @@ module FFI
|
|
65
79
|
Lib.is_restrict_qualified_type(@type) != 0
|
66
80
|
end
|
67
81
|
|
82
|
+
def function?
|
83
|
+
[:type_function_no_proto, :type_function_proto].include?(self.kind)
|
84
|
+
end
|
85
|
+
|
68
86
|
def arg_type(i)
|
69
|
-
|
87
|
+
if self.function?
|
88
|
+
Type.new Lib.get_arg_type(@type, i), @translation_unit
|
89
|
+
else
|
90
|
+
nil
|
91
|
+
end
|
70
92
|
end
|
71
93
|
|
72
94
|
def result_type
|
73
|
-
|
95
|
+
if self.function?
|
96
|
+
Type.new Lib.get_result_type(@type), @translation_unit
|
97
|
+
else
|
98
|
+
nil
|
99
|
+
end
|
74
100
|
end
|
75
101
|
|
76
102
|
def element_type
|
77
|
-
|
103
|
+
if self.array? || [:type_vector, :type_complex].include?(self.kind)
|
104
|
+
Type.new Lib.get_element_type(@type), @translation_unit
|
105
|
+
else
|
106
|
+
nil
|
107
|
+
end
|
78
108
|
end
|
79
109
|
|
80
110
|
def num_elements
|
81
111
|
Lib.get_num_elements(@type)
|
82
112
|
end
|
83
113
|
|
114
|
+
def array?
|
115
|
+
[:type_constant_array, :type_incomplete_array, :type_variable_array, :type_dependent_sized_array].
|
116
|
+
include?(self.kind)
|
117
|
+
end
|
118
|
+
|
84
119
|
def array_element_type
|
85
|
-
|
120
|
+
if self.array?
|
121
|
+
Type.new Lib.get_array_element_type(@type), @translation_unit
|
122
|
+
else
|
123
|
+
nil
|
124
|
+
end
|
86
125
|
end
|
87
126
|
|
88
127
|
def array_size
|
data/lib/ffi/clang/version.rb
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2010, by Jari Bakken.
|
5
5
|
# Copyright, 2012, by Hal Brodigan.
|
6
|
-
# Copyright, 2013-
|
6
|
+
# Copyright, 2013-2024, by Samuel Williams.
|
7
7
|
|
8
8
|
module FFI
|
9
9
|
module Clang
|
10
|
-
VERSION = "0.
|
10
|
+
VERSION = "0.9.0"
|
11
11
|
end
|
12
12
|
end
|
data/license.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Copyright, 2010-2012, by Jari Bakken.
|
4
4
|
Copyright, 2012, by Hal Brodigan.
|
5
|
-
Copyright, 2013-
|
5
|
+
Copyright, 2013-2024, by Samuel Williams.
|
6
6
|
Copyright, 2013, by Garry Marshall.
|
7
7
|
Copyright, 2013-2014, by Carlos Martín Nieto.
|
8
8
|
Copyright, 2013, by Dave Wilkinson.
|
@@ -16,8 +16,9 @@ Copyright, 2017, by Cameron Dutro.
|
|
16
16
|
Copyright, 2019, by Hayden Purdy.
|
17
17
|
Copyright, 2019, by Michael Metivier.
|
18
18
|
Copyright, 2019, by Dominic Sisnero.
|
19
|
-
Copyright, 2020, by
|
19
|
+
Copyright, 2020, by Zete Lui.
|
20
20
|
Copyright, 2022, by Motonori Iwamuro.
|
21
|
+
Copyright, 2023-2024, by Charlie Savage.
|
21
22
|
|
22
23
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
23
24
|
of this software and associated documentation files (the "Software"), to deal
|
data/readme.md
CHANGED
@@ -39,8 +39,18 @@ Due to issues figuring out which library to use, we require you to manually spec
|
|
39
39
|
|
40
40
|
## Contributing
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
We welcome contributions to this project.
|
43
|
+
|
44
|
+
1. Fork it.
|
45
|
+
2. Create your feature branch (`git checkout -b my-new-feature`).
|
46
|
+
3. Commit your changes (`git commit -am 'Add some feature'`).
|
47
|
+
4. Push to the branch (`git push origin my-new-feature`).
|
48
|
+
5. Create new Pull Request.
|
49
|
+
|
50
|
+
### Developer Certificate of Origin
|
51
|
+
|
52
|
+
This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
|
53
|
+
|
54
|
+
### Contributor Covenant
|
55
|
+
|
56
|
+
This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-clang
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
- Masahiro Sano
|
9
9
|
- Carlos Martín Nieto
|
10
|
+
- Charlie Savage
|
10
11
|
- Jari Bakken
|
11
12
|
- Takeshi Watanabe
|
12
13
|
- Garry Marshall
|
13
14
|
- George Pimm
|
15
|
+
- Zete Lui
|
14
16
|
- Greg Hazel
|
15
|
-
- Luikore
|
16
17
|
- Michael Metivier
|
17
18
|
- Dave Wilkinson
|
18
19
|
- Hayden Purdy
|
@@ -54,7 +55,7 @@ cert_chain:
|
|
54
55
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
55
56
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
56
57
|
-----END CERTIFICATE-----
|
57
|
-
date:
|
58
|
+
date: 2024-04-07 00:00:00.000000000 Z
|
58
59
|
dependencies:
|
59
60
|
- !ruby/object:Gem::Dependency
|
60
61
|
name: ffi
|
@@ -70,62 +71,6 @@ dependencies:
|
|
70
71
|
- - ">="
|
71
72
|
- !ruby/object:Gem::Version
|
72
73
|
version: '0'
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: bake-test
|
75
|
-
requirement: !ruby/object:Gem::Requirement
|
76
|
-
requirements:
|
77
|
-
- - ">="
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: '0'
|
80
|
-
type: :development
|
81
|
-
prerelease: false
|
82
|
-
version_requirements: !ruby/object:Gem::Requirement
|
83
|
-
requirements:
|
84
|
-
- - ">="
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: '0'
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: bundler
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - ">="
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '1.3'
|
94
|
-
type: :development
|
95
|
-
prerelease: false
|
96
|
-
version_requirements: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '1.3'
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: rspec
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
-
requirements:
|
105
|
-
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: 3.4.0
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: 3.4.0
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: rake
|
117
|
-
requirement: !ruby/object:Gem::Requirement
|
118
|
-
requirements:
|
119
|
-
- - ">="
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: '0'
|
122
|
-
type: :development
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: !ruby/object:Gem::Requirement
|
125
|
-
requirements:
|
126
|
-
- - ">="
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: '0'
|
129
74
|
description:
|
130
75
|
email:
|
131
76
|
executables: []
|
@@ -153,12 +98,14 @@ files:
|
|
153
98
|
- lib/ffi/clang/lib/file.rb
|
154
99
|
- lib/ffi/clang/lib/inclusions.rb
|
155
100
|
- lib/ffi/clang/lib/index.rb
|
101
|
+
- lib/ffi/clang/lib/printing_policy.rb
|
156
102
|
- lib/ffi/clang/lib/source_location.rb
|
157
103
|
- lib/ffi/clang/lib/source_range.rb
|
158
104
|
- lib/ffi/clang/lib/string.rb
|
159
105
|
- lib/ffi/clang/lib/token.rb
|
160
106
|
- lib/ffi/clang/lib/translation_unit.rb
|
161
107
|
- lib/ffi/clang/lib/type.rb
|
108
|
+
- lib/ffi/clang/printing_policy.rb
|
162
109
|
- lib/ffi/clang/source_location.rb
|
163
110
|
- lib/ffi/clang/source_range.rb
|
164
111
|
- lib/ffi/clang/token.rb
|
@@ -173,6 +120,7 @@ licenses:
|
|
173
120
|
- MIT
|
174
121
|
metadata:
|
175
122
|
funding_uri: https://github.com/sponsors/ioquatix/
|
123
|
+
source_code_uri: https://github.com/ioquatix/ffi-clang.git
|
176
124
|
post_install_message:
|
177
125
|
rdoc_options: []
|
178
126
|
require_paths:
|
@@ -181,14 +129,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
129
|
requirements:
|
182
130
|
- - ">="
|
183
131
|
- !ruby/object:Gem::Version
|
184
|
-
version: '
|
132
|
+
version: '3.1'
|
185
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
134
|
requirements:
|
187
135
|
- - ">="
|
188
136
|
- !ruby/object:Gem::Version
|
189
137
|
version: '0'
|
190
138
|
requirements: []
|
191
|
-
rubygems_version: 3.
|
139
|
+
rubygems_version: 3.5.3
|
192
140
|
signing_key:
|
193
141
|
specification_version: 4
|
194
142
|
summary: Ruby FFI bindings for libclang C interface.
|
metadata.gz.sig
CHANGED
Binary file
|