ghazel-ffi-clang 0.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/.travis.yml +21 -0
- data/Gemfile +4 -0
- data/README.md +74 -0
- data/Rakefile +12 -0
- data/ext/rakefile.rb +12 -0
- data/ext/teapot.rb +16 -0
- data/ffi-clang.gemspec +26 -0
- data/lib/ffi/clang.rb +54 -0
- data/lib/ffi/clang/comment.rb +278 -0
- data/lib/ffi/clang/cursor.rb +378 -0
- data/lib/ffi/clang/diagnostic.rb +113 -0
- data/lib/ffi/clang/file.rb +69 -0
- data/lib/ffi/clang/index.rb +71 -0
- data/lib/ffi/clang/lib.rb +73 -0
- data/lib/ffi/clang/lib/comment.rb +117 -0
- data/lib/ffi/clang/lib/cursor.rb +353 -0
- data/lib/ffi/clang/lib/diagnostic.rb +87 -0
- data/lib/ffi/clang/lib/file.rb +57 -0
- data/lib/ffi/clang/lib/index.rb +34 -0
- data/lib/ffi/clang/lib/source_location.rb +53 -0
- data/lib/ffi/clang/lib/source_range.rb +46 -0
- data/lib/ffi/clang/lib/string.rb +45 -0
- data/lib/ffi/clang/lib/token.rb +58 -0
- data/lib/ffi/clang/lib/translation_unit.rb +106 -0
- data/lib/ffi/clang/lib/type.rb +154 -0
- data/lib/ffi/clang/lib/utils.rb +29 -0
- data/lib/ffi/clang/source_location.rb +149 -0
- data/lib/ffi/clang/source_range.rb +61 -0
- data/lib/ffi/clang/token.rb +95 -0
- data/lib/ffi/clang/translation_unit.rb +142 -0
- data/lib/ffi/clang/type.rb +135 -0
- data/lib/ffi/clang/unsaved_file.rb +49 -0
- data/lib/ffi/clang/utils.rb +58 -0
- data/lib/ffi/clang/version.rb +26 -0
- data/spec/clang/comment_spec.rb +470 -0
- data/spec/clang/cursor_spec.rb +709 -0
- data/spec/clang/diagnostic_spec.rb +89 -0
- data/spec/clang/file_spec.rb +84 -0
- data/spec/clang/index_spec.rb +70 -0
- data/spec/clang/source_location_spec.rb +140 -0
- data/spec/clang/source_range_spec.rb +76 -0
- data/spec/clang/token_spec.rb +83 -0
- data/spec/clang/translation_unit_spec.rb +214 -0
- data/spec/clang/type_spec.rb +289 -0
- data/spec/clang/utils_spec.rb +61 -0
- data/spec/fixtures/a.c +7 -0
- data/spec/fixtures/canonical.c +5 -0
- data/spec/fixtures/docs.c +1 -0
- data/spec/fixtures/docs.cc +1 -0
- data/spec/fixtures/docs.h +54 -0
- data/spec/fixtures/list.c +11 -0
- data/spec/fixtures/location1.c +7 -0
- data/spec/fixtures/simple.c +3 -0
- data/spec/fixtures/test.cxx +62 -0
- data/spec/spec_helper.rb +64 -0
- metadata +180 -0
@@ -0,0 +1,87 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'ffi/clang/lib/translation_unit'
|
23
|
+
require 'ffi/clang/lib/source_location'
|
24
|
+
require 'ffi/clang/lib/string'
|
25
|
+
|
26
|
+
module FFI
|
27
|
+
module Clang
|
28
|
+
module Lib
|
29
|
+
class CXSourceRange < FFI::Struct
|
30
|
+
layout(
|
31
|
+
:ptr_data, [:pointer, 2],
|
32
|
+
:begin_int_data, :uint,
|
33
|
+
:end_int_data, :uint
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
typedef :pointer, :CXDiagnostic
|
38
|
+
typedef :pointer, :CXDiagnosticSet
|
39
|
+
|
40
|
+
DiagnosticDisplayOptions = enum [
|
41
|
+
:source_location, 0x01,
|
42
|
+
:column, 0x02,
|
43
|
+
:source_ranges, 0x04,
|
44
|
+
:option, 0x08,
|
45
|
+
:category_id, 0x10,
|
46
|
+
:category_name , 0x20,
|
47
|
+
]
|
48
|
+
|
49
|
+
enum :diagnostic_severity, [:ignored, :note, :warning, :error, :fatal]
|
50
|
+
|
51
|
+
# Source code diagnostics:
|
52
|
+
attach_function :get_num_diagnostics, :clang_getNumDiagnostics, [:CXTranslationUnit], :uint
|
53
|
+
attach_function :get_diagnostic, :clang_getDiagnostic, [:CXTranslationUnit, :uint], :CXDiagnostic
|
54
|
+
attach_function :dispose_diagnostic, :clang_disposeDiagnostic, [:CXDiagnostic], :void
|
55
|
+
|
56
|
+
# DiagnosticSet (not used yet)
|
57
|
+
# attach_function :get_diagnostic_set_from_tu, :clang_getDiagnosticSetFromTU, [:CXTranslationUnit], :CXDiagnosticSet
|
58
|
+
# attach_function :dispose_diagnostic_set, :clang_disposeDiagnosticSet, [:CXDiagnosticSet], :void
|
59
|
+
# attach_function :load_diagnostics, :clang_loadDiagnostics, [:string, :pointer, :pointer], :CXDiagnosticSet
|
60
|
+
|
61
|
+
# Diagnostic details and string representations:
|
62
|
+
attach_function :get_diagnostic_spelling, :clang_getDiagnosticSpelling, [:CXDiagnostic], CXString.by_value
|
63
|
+
attach_function :default_diagnostic_display_options, :clang_defaultDiagnosticDisplayOptions, [], :uint
|
64
|
+
attach_function :format_diagnostic, :clang_formatDiagnostic, [:CXDiagnostic, :uint], CXString.by_value
|
65
|
+
attach_function :get_diagnostic_severity, :clang_getDiagnosticSeverity, [:CXDiagnostic], :diagnostic_severity
|
66
|
+
attach_function :get_diagnostic_option, :clang_getDiagnosticOption, [:CXDiagnostic, :pointer], CXString.by_value
|
67
|
+
|
68
|
+
# Diagnostic source location and source ranges:
|
69
|
+
attach_function :get_diagnostic_location, :clang_getDiagnosticLocation, [:CXDiagnostic], CXSourceLocation.by_value
|
70
|
+
attach_function :get_diagnostic_num_ranges, :clang_getDiagnosticNumRanges, [:CXDiagnostic], :uint
|
71
|
+
attach_function :get_diagnostic_range, :clang_getDiagnosticRange, [:CXDiagnostic, :uint], CXSourceRange.by_value
|
72
|
+
|
73
|
+
# Child Diagnostics:
|
74
|
+
attach_function :get_child_diagnostics, :clang_getChildDiagnostics, [:CXDiagnostic], :CXDiagnosticSet
|
75
|
+
attach_function :get_num_diagnostics_in_set, :clang_getNumDiagnosticsInSet, [:CXDiagnosticSet], :uint
|
76
|
+
attach_function :get_diagnostic_in_set, :clang_getDiagnosticInSet, [:CXDiagnosticSet, :uint], :CXDiagnostic
|
77
|
+
|
78
|
+
# Category:
|
79
|
+
attach_function :get_diagnostic_category, :clang_getDiagnosticCategory, [:CXDiagnostic], :uint
|
80
|
+
attach_function :get_diagnostic_category_text, :clang_getDiagnosticCategoryText, [:CXDiagnostic], CXString.by_value
|
81
|
+
|
82
|
+
# Fixit:
|
83
|
+
attach_function :get_diagnostic_num_fix_its, :clang_getDiagnosticNumFixIts, [:CXDiagnostic], :uint
|
84
|
+
attach_function :get_diagnostic_fix_it, :clang_getDiagnosticFixIt, [:CXDiagnostic, :uint, :pointer], CXString.by_value
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
# Copyright, 2014, by Masahiro Sano.
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require 'ffi/clang/lib/string'
|
24
|
+
require 'ffi/clang/lib/translation_unit'
|
25
|
+
require 'ffi/clang/utils'
|
26
|
+
|
27
|
+
module FFI
|
28
|
+
module Clang
|
29
|
+
module Lib
|
30
|
+
class CXUnsavedFile < FFI::Struct
|
31
|
+
layout(
|
32
|
+
:filename, :pointer,
|
33
|
+
:contents, :pointer,
|
34
|
+
:length, :ulong
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
class CXFileUniqueID < FFI::Struct
|
39
|
+
layout(
|
40
|
+
:device, :ulong_long,
|
41
|
+
:inode, :ulong_long,
|
42
|
+
:modification, :ulong_long
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
typedef :pointer, :CXFile
|
47
|
+
|
48
|
+
attach_function :get_file, :clang_getFile, [:CXTranslationUnit, :string], :CXFile
|
49
|
+
attach_function :get_file_name, :clang_getFileName, [:CXFile], CXString.by_value
|
50
|
+
attach_function :get_file_time, :clang_getFileTime, [:CXFile], :time_t
|
51
|
+
attach_function :is_file_multiple_include_guarded, :clang_isFileMultipleIncludeGuarded, [:CXTranslationUnit, :CXFile], :int
|
52
|
+
if FFI::Clang::Utils.satisfy_version?('3.3')
|
53
|
+
attach_function :get_file_unique_id, :clang_getFileUniqueID, [:CXFile, :pointer], :int
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'ffi/clang/lib'
|
23
|
+
|
24
|
+
module FFI
|
25
|
+
module Clang
|
26
|
+
module Lib
|
27
|
+
typedef :pointer, :CXIndex
|
28
|
+
|
29
|
+
# Source code index:
|
30
|
+
attach_function :create_index, :clang_createIndex, [:int, :int], :CXIndex
|
31
|
+
attach_function :dispose_index, :clang_disposeIndex, [:CXIndex], :void
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
# Copyright, 2014, by Masahiro Sano.
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require 'ffi/clang/lib/file'
|
24
|
+
|
25
|
+
module FFI
|
26
|
+
module Clang
|
27
|
+
module Lib
|
28
|
+
class CXSourceLocation < FFI::Struct
|
29
|
+
layout(
|
30
|
+
:ptr_data, [:pointer, 2],
|
31
|
+
:int_data, :uint
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
attach_function :get_null_location, :clang_getNullLocation, [], CXSourceLocation.by_value
|
36
|
+
attach_function :equal_locations, :clang_equalLocations, [CXSourceLocation.by_value, CXSourceLocation.by_value], :int
|
37
|
+
|
38
|
+
attach_function :get_location, :clang_getLocation, [:CXTranslationUnit, :CXFile, :uint, :uint], CXSourceLocation.by_value
|
39
|
+
attach_function :get_location_offset, :clang_getLocationForOffset, [:CXTranslationUnit, :CXFile, :uint], CXSourceLocation.by_value
|
40
|
+
attach_function :get_expansion_location, :clang_getExpansionLocation, [CXSourceLocation.by_value, :pointer, :pointer, :pointer, :pointer], :void
|
41
|
+
attach_function :get_presumed_location, :clang_getPresumedLocation, [CXSourceLocation.by_value, :pointer, :pointer, :pointer], :void
|
42
|
+
if FFI::Clang::Utils.satisfy_version?('3.3')
|
43
|
+
attach_function :get_file_location, :clang_getFileLocation, [CXSourceLocation.by_value, :pointer, :pointer, :pointer, :pointer], :void
|
44
|
+
end
|
45
|
+
attach_function :get_spelling_location, :clang_getSpellingLocation, [CXSourceLocation.by_value, :pointer, :pointer, :pointer, :pointer], :void
|
46
|
+
|
47
|
+
if FFI::Clang::Utils.satisfy_version?('3.4')
|
48
|
+
attach_function :location_in_system_header, :clang_Location_isInSystemHeader, [CXSourceLocation.by_value], :int
|
49
|
+
attach_function :location_is_from_main_file, :clang_Location_isFromMainFile, [CXSourceLocation.by_value], :int
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
3
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
+
# Copyright, 2013, by Garry C. Marshall. <http://www.meaningfulname.net>
|
5
|
+
# Copyright, 2014, by Masahiro Sano.
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
# of this software and associated documentation files (the "Software"), to deal
|
9
|
+
# in the Software without restriction, including without limitation the rights
|
10
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
# copies of the Software, and to permit persons to whom the Software is
|
12
|
+
# furnished to do so, subject to the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included in
|
15
|
+
# all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
# THE SOFTWARE.
|
24
|
+
|
25
|
+
require 'ffi/clang/lib/source_location'
|
26
|
+
|
27
|
+
module FFI
|
28
|
+
module Clang
|
29
|
+
module Lib
|
30
|
+
class CXSourceRange < FFI::Struct
|
31
|
+
layout(
|
32
|
+
:ptr_data, [:pointer, 2],
|
33
|
+
:begin_int_data, :uint,
|
34
|
+
:end_int_data, :uint
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
attach_function :get_null_range, :clang_getNullRange, [], CXSourceLocation.by_value
|
39
|
+
attach_function :get_range, :clang_getRange, [CXSourceLocation.by_value, CXSourceLocation.by_value], CXSourceRange.by_value
|
40
|
+
attach_function :get_range_start, :clang_getRangeStart, [CXSourceRange.by_value], CXSourceLocation.by_value
|
41
|
+
attach_function :get_range_end, :clang_getRangeEnd, [CXSourceRange.by_value], CXSourceLocation.by_value
|
42
|
+
attach_function :range_is_null, :clang_Range_isNull, [CXSourceRange.by_value], :int
|
43
|
+
attach_function :equal_range, :clang_equalRanges, [CXSourceRange.by_value, CXSourceRange.by_value], :uint
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
# of this software and associated documentation files (the "Software"), to deal
|
6
|
+
# in the Software without restriction, including without limitation the rights
|
7
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
# copies of the Software, and to permit persons to whom the Software is
|
9
|
+
# furnished to do so, subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be included in
|
12
|
+
# all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
|
+
# THE SOFTWARE.
|
21
|
+
|
22
|
+
require 'ffi/clang/lib'
|
23
|
+
|
24
|
+
module FFI
|
25
|
+
module Clang
|
26
|
+
module Lib
|
27
|
+
class CXString < FFI::Struct
|
28
|
+
layout(
|
29
|
+
:data, :pointer,
|
30
|
+
:private_flags, :uint
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
attach_function :get_string, :clang_getCString, [CXString.by_value], :string
|
35
|
+
attach_function :dispose_string, :clang_disposeString, [CXString.by_value], :void
|
36
|
+
|
37
|
+
def self.extract_string(cxstring)
|
38
|
+
result = get_string(cxstring)
|
39
|
+
dispose_string cxstring
|
40
|
+
|
41
|
+
return result
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Copyright, 2014, by Masahiro Sano.
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
module FFI
|
22
|
+
module Clang
|
23
|
+
module Lib
|
24
|
+
class CXToken < FFI::Struct
|
25
|
+
layout(
|
26
|
+
:int_data, [:uint, 4],
|
27
|
+
:ptr_data, :pointer,
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
class TokensPointer < FFI::Pointer
|
32
|
+
attr_reader :token_size
|
33
|
+
attr_reader :translation_unit
|
34
|
+
def initialize(ptr, token_size, translation_unit)
|
35
|
+
super ptr
|
36
|
+
@token_size = token_size
|
37
|
+
@translation_unit = translation_unit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
enum :token_kind, [
|
42
|
+
:punctuation,
|
43
|
+
:keyword,
|
44
|
+
:identifier,
|
45
|
+
:literal,
|
46
|
+
:comment,
|
47
|
+
]
|
48
|
+
|
49
|
+
attach_function :get_token_kind, :clang_getTokenKind, [CXToken.by_value], :token_kind
|
50
|
+
attach_function :get_token_spelliing, :clang_getTokenSpelling, [:CXTranslationUnit, CXToken.by_value], CXString.by_value
|
51
|
+
attach_function :get_token_location, :clang_getTokenLocation, [:CXTranslationUnit, CXToken.by_value], CXSourceLocation.by_value
|
52
|
+
attach_function :get_token_extent, :clang_getTokenExtent, [:CXTranslationUnit, CXToken.by_value], CXSourceRange.by_value
|
53
|
+
attach_function :tokenize, :clang_tokenize, [:CXTranslationUnit, CXSourceRange.by_value, :pointer, :pointer], :void
|
54
|
+
attach_function :annotate_tokens, :clang_annotateTokens, [:CXTranslationUnit, :pointer, :uint, :pointer], :void
|
55
|
+
attach_function :dispose_tokens, :clang_disposeTokens, [:CXTranslationUnit, :pointer, :uint], :void
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# Copyright, 2010-2012 by Jari Bakken.
|
2
|
+
# Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
3
|
+
# Copyright, 2014, by Masahiro Sano.
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
require 'ffi/clang/lib/index'
|
24
|
+
|
25
|
+
module FFI
|
26
|
+
module Clang
|
27
|
+
module Lib
|
28
|
+
typedef :pointer, :CXTranslationUnit
|
29
|
+
|
30
|
+
TranslationUnitFlags = enum [
|
31
|
+
:none, 0x0,
|
32
|
+
:detailed_preprocessing_record, 0x01,
|
33
|
+
:incomplete, 0x02,
|
34
|
+
:precompiled_preamble, 0x04,
|
35
|
+
:cache_completion_results, 0x08,
|
36
|
+
:for_serialization, 0x10,
|
37
|
+
:cxx_chained_pch, 0x20,
|
38
|
+
:skip_function_bodies, 0x40,
|
39
|
+
:include_brief_comments_in_code_completion, 0x80,
|
40
|
+
]
|
41
|
+
|
42
|
+
SaveTranslationUnitFlags = enum [
|
43
|
+
:save_translation_unit_none, 0x0,
|
44
|
+
]
|
45
|
+
|
46
|
+
SaveError = enum [
|
47
|
+
:none, 0,
|
48
|
+
:unknown, 1,
|
49
|
+
:translation_errors, 2,
|
50
|
+
:invalid_tu, 3
|
51
|
+
]
|
52
|
+
|
53
|
+
ReparseFlags = enum [
|
54
|
+
:none, 0x0,
|
55
|
+
]
|
56
|
+
|
57
|
+
enum :resource_usage_kind, [
|
58
|
+
:ast, 1,
|
59
|
+
:identifiers, 2,
|
60
|
+
:selectors, 3,
|
61
|
+
:global_completion_results, 4,
|
62
|
+
:source_manager_content_cache, 5,
|
63
|
+
:ast_side_tables, 6,
|
64
|
+
:source_manager_membuffer_malloc, 7,
|
65
|
+
:source_manager_membuffer_mmap, 8,
|
66
|
+
:external_ast_source_membuffer_malloc, 9,
|
67
|
+
:external_ast_source_membuffer_mmap, 10,
|
68
|
+
:preprocessor, 11,
|
69
|
+
:preprocessing_record, 12,
|
70
|
+
:sourcemanager_data_structures, 13,
|
71
|
+
:preprocessor_header_search, 14,
|
72
|
+
]
|
73
|
+
|
74
|
+
class CXTUResourceUsage < FFI::Struct
|
75
|
+
layout(
|
76
|
+
:data, :pointer,
|
77
|
+
:numEntries, :uint,
|
78
|
+
:entries, :pointer
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
class CXTUResourceUsageEntry < FFI::Struct
|
83
|
+
layout(
|
84
|
+
:kind, :resource_usage_kind,
|
85
|
+
:amount, :ulong,
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Source code translation units:
|
90
|
+
attach_function :parse_translation_unit, :clang_parseTranslationUnit, [:CXIndex, :string, :pointer, :int, :pointer, :uint, :uint], :CXTranslationUnit
|
91
|
+
attach_function :create_translation_unit, :clang_createTranslationUnit, [:CXIndex, :string], :CXTranslationUnit
|
92
|
+
attach_function :dispose_translation_unit, :clang_disposeTranslationUnit, [:CXTranslationUnit], :void
|
93
|
+
attach_function :get_translation_unit_spelling, :clang_getTranslationUnitSpelling, [:CXTranslationUnit], :string
|
94
|
+
|
95
|
+
attach_function :default_editing_translation_unit_options, :clang_defaultEditingTranslationUnitOptions, [], :uint
|
96
|
+
attach_function :default_save_options, :clang_defaultSaveOptions, [:CXTranslationUnit], :uint
|
97
|
+
attach_function :save_translation_unit, :clang_saveTranslationUnit, [:CXTranslationUnit, :string, :uint], :int
|
98
|
+
attach_function :default_reparse_options, :clang_defaultReparseOptions, [:CXTranslationUnit], :uint
|
99
|
+
attach_function :reparse_translation_unit, :clang_reparseTranslationUnit, [:CXTranslationUnit, :uint, :pointer, :uint], :int
|
100
|
+
|
101
|
+
attach_function :resource_usage, :clang_getCXTUResourceUsage, [:CXTranslationUnit], CXTUResourceUsage.by_value
|
102
|
+
attach_function :dispose_resource_usage, :clang_disposeCXTUResourceUsage, [CXTUResourceUsage.by_value], :void
|
103
|
+
attach_function :resource_usage_name, :clang_getTUResourceUsageName, [:resource_usage_kind], :string
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|