ffi-clang 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDE1NGQxNDVlMTM4Mjk5YTMyOGM5MmI2MjY1YWI4ODQ0NTc1YjZmYw==
5
- data.tar.gz: !binary |-
6
- NjYwNTIxYTcwYjc0M2I1NjE5NTU3YWRkYTAwMmQxMTg5N2NiZmE0Nw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MGVjMjcwMTg2NDU5MGRmYjgxMzNiYzU5MjY5NzY4OTI1ZDBkZTU0ZDBlNmEx
10
- N2RjYzg5NjdjM2E1YWRhNTdiMzk1ZTAzNTAzOTU4MTc3YmRhYmM3YzUwMWFm
11
- ZTA2OWQ4ODU3Y2JlMzdmNzQ1ZmM4NWRiNmIwNzIwNDE5Y2NkYjU=
12
- data.tar.gz: !binary |-
13
- MzlhMDM1OGViZmZmOGRkNTMzODA5ZjM2OTdlZDBlMmMyNjQyOTg2NGE0MWRj
14
- MjY1ZDQyMTBjMzM0YjA3OTg3Yjg5OTdmNzdiODg5YmFkMDExOWY0MGU1M2Vh
15
- NGRiNGFhY2QwNTE3NDlmZjM1MDQ4MGU3NWM0MWQ4YzliNWIzMDc=
2
+ SHA1:
3
+ metadata.gz: 9dcbefd7f0ba372cb4d7b1f7cdc0486840d8dd22
4
+ data.tar.gz: b00aec280bd1ae965af5dbe99336bc65a94499f6
5
+ SHA512:
6
+ metadata.gz: c668b1273d5650d12de4a757629a2b02cf398288dc148b5e10a8fef34020d1ff354357c60381baa8597538b871e360d0e188cb6ec7a51420f2d202a5c4c726f3
7
+ data.tar.gz: b2fadb72c282ee775c8aedc146870d95e12872ee14b1ae182731116b05a2353ce9855554f305004ef0cac5310d252085c10e7a7466daa1ef38a8bc407557331a
data/.travis.yml CHANGED
@@ -2,8 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - "2.0"
4
4
  install:
5
- # libclang-3.2-dev
6
5
  - sudo add-apt-repository --yes ppa:h-rayflood/llvm
7
6
  - sudo apt-get -qq update
8
- - sudo apt-get -qq install libclang-3.2-dev
7
+ - sudo apt-get -qq install libclang-3.3-dev
9
8
  - bundle install
@@ -22,6 +22,7 @@
22
22
  require 'ffi/clang/lib/cursor'
23
23
  require 'ffi/clang/source_location'
24
24
  require 'ffi/clang/comment'
25
+ require 'ffi/clang/type'
25
26
 
26
27
  module FFI
27
28
  module Clang
@@ -90,7 +91,7 @@ module FFI
90
91
  SourceRange.new(Lib.get_cursor_extent(@cursor))
91
92
  end
92
93
 
93
- def displayName
94
+ def display_name
94
95
  Lib.extract_string Lib.get_cursor_display_name(@cursor)
95
96
  end
96
97
 
@@ -102,6 +103,14 @@ module FFI
102
103
  @cursor[:kind]
103
104
  end
104
105
 
106
+ def type
107
+ Type.new Lib.get_cursor_type(@cursor)
108
+ end
109
+
110
+ def result_type
111
+ Type.new Lib.get_cursor_result_type(@cursor)
112
+ end
113
+
105
114
  def visit_children(&block)
106
115
  adapter = Proc.new do | cxcursor, parent_cursor, unused |
107
116
  block.call Cursor.new(cxcursor), Cursor.new(parent_cursor)
data/lib/ffi/clang/lib.rb CHANGED
@@ -28,8 +28,8 @@ module FFI
28
28
 
29
29
  if Clang.platform == :linux
30
30
  libs += [
31
- "/usr/lib/llvm-3.2/lib/libclang.so",
32
- "/usr/lib64/llvm-3.2/lib/libclang.so"
31
+ "/usr/lib/llvm-3.3/lib/libclang.so",
32
+ "/usr/lib64/llvm-3.3/lib/libclang.so"
33
33
  ]
34
34
  end
35
35
 
@@ -23,6 +23,7 @@
23
23
  require 'ffi/clang/lib/translation_unit'
24
24
  require 'ffi/clang/lib/diagnostic'
25
25
  require 'ffi/clang/lib/comment'
26
+ require 'ffi/clang/lib/type'
26
27
 
27
28
  module FFI
28
29
  module Clang
@@ -34,7 +35,8 @@ module FFI
34
35
  :cursor_parm_decl, 10,
35
36
  :cursor_typedef_decl, 20,
36
37
  :cursor_invalid_file, 70,
37
- :cursor_translation_unit, 300]
38
+ :cursor_translation_unit, 300
39
+ ]
38
40
 
39
41
  class CXCursor < FFI::Struct
40
42
  layout(
@@ -74,6 +76,10 @@ module FFI
74
76
 
75
77
  callback :visit_children_function, [CXCursor.by_value, CXCursor.by_value, :pointer], :child_visit_result
76
78
  attach_function :visit_children, :clang_visitChildren, [CXCursor.by_value, :visit_children_function, :pointer], :uint
79
+
80
+ attach_function :get_cursor_type, :clang_getCursorType, [CXCursor.by_value], CXType.by_value
81
+ attach_function :get_cursor_result_type, :clang_getCursorResultType, [CXCursor.by_value], CXType.by_value
82
+
77
83
  end
78
84
  end
79
85
  end
@@ -0,0 +1,28 @@
1
+ module FFI
2
+ module Clang
3
+ module Lib
4
+ enum :kind, [
5
+ :type_invalid, 0,
6
+ :type_unexposed, 1,
7
+ :type_void, 2,
8
+ :type_pointer, 101,
9
+ :type_function_proto, 111
10
+ ]
11
+
12
+ class CXType < FFI::Struct
13
+ layout(
14
+ :kind, :kind,
15
+ :data, [:pointer, 2]
16
+ )
17
+ end
18
+
19
+ attach_function :get_type_spelling, :clang_getTypeSpelling, [CXType.by_value], CXString.by_value
20
+ attach_function :is_function_type_variadic, :clang_isFunctionTypeVariadic, [CXType.by_value], :uint
21
+ attach_function :is_pod_type, :clang_isPODType, [CXType.by_value], :uint
22
+ attach_function :get_num_arg_types, :clang_getNumArgTypes, [CXType.by_value], :int
23
+ attach_function :get_arg_type, :clang_getArgType, [CXType.by_value, :uint], CXType.by_value
24
+ attach_function :get_result_type, :clang_getResultType, [CXType.by_value], CXType.by_value
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ module FFI
2
+ module Clang
3
+ class Type
4
+ def initialize(type)
5
+ @type = type
6
+ end
7
+
8
+ def kind
9
+ @type[:kind]
10
+ end
11
+
12
+ def spelling
13
+ Lib.extract_string Lib.get_type_spelling(@type)
14
+ end
15
+
16
+ def variadic?
17
+ Lib.is_function_type_variadic(@type) != 0
18
+ end
19
+
20
+ def pod?
21
+ Lib.is_pod_type(@type) != 0
22
+ end
23
+
24
+ def num_arg_types
25
+ Lib.get_num_arg_types(@type)
26
+ end
27
+
28
+ def arg_type(i)
29
+ Type.new Lib.get_arg_type(@type, i)
30
+ end
31
+
32
+ def result_type
33
+ Type.new Lib.get_result_type(@type)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -21,6 +21,6 @@
21
21
 
22
22
  module FFI
23
23
  module Clang
24
- VERSION = "0.1.2"
24
+ VERSION = "0.1.3"
25
25
  end
26
26
  end
@@ -49,7 +49,7 @@ describe Cursor do
49
49
  end
50
50
 
51
51
  it "returns the path of the translation unit for the translation unit cursor" do
52
- cursor.displayName.should eq(fixture_path("list.c"))
52
+ cursor.display_name.should eq(fixture_path("list.c"))
53
53
  cursor.spelling.should eq(fixture_path("list.c"))
54
54
  end
55
55
 
@@ -105,7 +105,7 @@ describe Cursor do
105
105
 
106
106
  it "returns the name of the function" do
107
107
  func.spelling.should eq("sum")
108
- func.displayName.should eq("sum(union List *)")
108
+ func.display_name.should eq("sum(union List *)")
109
109
  end
110
110
  end
111
111
 
@@ -124,7 +124,7 @@ describe Cursor do
124
124
 
125
125
  it "returns the name of the struct" do
126
126
  struct.spelling.should eq("List")
127
- struct.displayName.should eq("List")
127
+ struct.display_name.should eq("List")
128
128
  end
129
129
 
130
130
  end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright, 2013, by Carlos Martín Nieto <cmn@dwim.me>
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 'spec_helper'
23
+
24
+ describe Type do
25
+ let(:cursor) { Index.new.parse_translation_unit(fixture_path("a.c")).cursor }
26
+ let(:type) { find_first(cursor, :cursor_function).type }
27
+
28
+ it "can tell us about the main function" do
29
+ type.variadic?.should equal(false)
30
+
31
+ type.num_arg_types.should equal(2)
32
+ type.arg_type(0).spelling.should eq("int")
33
+ type.arg_type(1).spelling.should eq("const char *")
34
+ type.result_type.spelling.should eq("int")
35
+ end
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-clang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jari Bakken
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-29 00:00:00.000000000 Z
12
+ date: 2013-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
@@ -43,28 +43,28 @@ dependencies:
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ! '>='
46
+ - - '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ! '>='
60
+ - - '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ! '>='
67
+ - - '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  description: Ruby FFI bindings for libclang C interface.
@@ -97,9 +97,11 @@ files:
97
97
  - lib/ffi/clang/lib/source_range.rb
98
98
  - lib/ffi/clang/lib/string.rb
99
99
  - lib/ffi/clang/lib/translation_unit.rb
100
+ - lib/ffi/clang/lib/type.rb
100
101
  - lib/ffi/clang/source_location.rb
101
102
  - lib/ffi/clang/source_range.rb
102
103
  - lib/ffi/clang/translation_unit.rb
104
+ - lib/ffi/clang/type.rb
103
105
  - lib/ffi/clang/unsaved_file.rb
104
106
  - lib/ffi/clang/version.rb
105
107
  - spec/clang/comment_spec.rb
@@ -108,6 +110,7 @@ files:
108
110
  - spec/clang/index_spec.rb
109
111
  - spec/clang/source_location_spec.rb
110
112
  - spec/clang/translation_unit_spec.rb
113
+ - spec/clang/type_spec.rb
111
114
  - spec/fixtures/a.c
112
115
  - spec/fixtures/docs.h
113
116
  - spec/fixtures/list.c
@@ -122,17 +125,17 @@ require_paths:
122
125
  - lib
123
126
  required_ruby_version: !ruby/object:Gem::Requirement
124
127
  requirements:
125
- - - ! '>='
128
+ - - '>='
126
129
  - !ruby/object:Gem::Version
127
130
  version: '0'
128
131
  required_rubygems_version: !ruby/object:Gem::Requirement
129
132
  requirements:
130
- - - ! '>='
133
+ - - '>='
131
134
  - !ruby/object:Gem::Version
132
135
  version: '0'
133
136
  requirements: []
134
137
  rubyforge_project:
135
- rubygems_version: 2.0.2
138
+ rubygems_version: 2.0.6
136
139
  signing_key:
137
140
  specification_version: 4
138
141
  summary: Ruby FFI bindings for libclang C interface.
@@ -143,6 +146,7 @@ test_files:
143
146
  - spec/clang/index_spec.rb
144
147
  - spec/clang/source_location_spec.rb
145
148
  - spec/clang/translation_unit_spec.rb
149
+ - spec/clang/type_spec.rb
146
150
  - spec/fixtures/a.c
147
151
  - spec/fixtures/docs.h
148
152
  - spec/fixtures/list.c