rbgccxml 0.8 → 0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +5 -5
- data/lib/rbgccxml/node.rb +75 -73
- data/lib/rbgccxml/nodes/argument.rb +13 -2
- data/lib/rbgccxml/nodes/base.rb +14 -0
- data/lib/rbgccxml/nodes/class.rb +46 -8
- data/lib/rbgccxml/nodes/constructor.rb +8 -1
- data/lib/rbgccxml/nodes/destructor.rb +7 -0
- data/lib/rbgccxml/nodes/enum_value.rb +6 -4
- data/lib/rbgccxml/nodes/enumeration.rb +21 -2
- data/lib/rbgccxml/nodes/field.rb +18 -0
- data/lib/rbgccxml/nodes/file.rb +4 -1
- data/lib/rbgccxml/nodes/function.rb +6 -4
- data/lib/rbgccxml/nodes/function_type.rb +7 -0
- data/lib/rbgccxml/nodes/method.rb +6 -4
- data/lib/rbgccxml/nodes/struct.rb +3 -2
- data/lib/rbgccxml/nodes/type.rb +5 -3
- data/lib/rbgccxml/nodes/types/array_type.rb +29 -0
- data/lib/rbgccxml/nodes/types/cv_qualified_type.rb +9 -5
- data/lib/rbgccxml/nodes/types/fundamental_type.rb +3 -2
- data/lib/rbgccxml/nodes/types/pointer_type.rb +6 -3
- data/lib/rbgccxml/nodes/types/reference_type.rb +6 -3
- data/lib/rbgccxml/nodes/types/typedef.rb +2 -2
- data/lib/rbgccxml/nodes/variable.rb +7 -0
- data/lib/rbgccxml/parser.rb +47 -32
- data/lib/rbgccxml/query_result.rb +62 -25
- data/lib/rbgccxml/rbgccxml.rb +13 -16
- data/lib/rbgccxml/xml_parsing.rb +65 -97
- data/lib/rbgccxml.rb +26 -22
- data/test/arguments_test.rb +29 -0
- data/test/classes_test.rb +164 -26
- data/test/enumerations_test.rb +27 -19
- data/test/function_pointers_test.rb +18 -0
- data/test/functions_test.rb +7 -2
- data/test/methods_test.rb +3 -3
- data/test/namespaces_test.rb +1 -1
- data/test/node_test.rb +11 -31
- data/test/parser_test.rb +1 -1
- data/test/query_results_test.rb +15 -14
- data/test/structs_test.rb +10 -12
- data/test/test_helper.rb +10 -2
- data/test/types_test.rb +63 -38
- data/test/variables_test.rb +26 -0
- metadata +46 -31
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
+
|
5
|
+
begin
|
6
|
+
# 1.9 needs this for test/spec to work
|
7
|
+
gem 'test-unit'
|
8
|
+
rescue LoadError
|
9
|
+
# Probably 1.8.x, we're ok
|
10
|
+
end
|
11
|
+
|
4
12
|
require 'test/spec'
|
5
13
|
require 'rbgccxml'
|
6
14
|
|
@@ -13,6 +21,6 @@ class Test::Unit::TestCase
|
|
13
21
|
def teardown
|
14
22
|
RbGCCXML::XMLParsing.clear_cache
|
15
23
|
end
|
16
|
-
|
24
|
+
|
17
25
|
end
|
18
26
|
|
data/test/types_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
3
|
context "Proper Type handling" do
|
4
4
|
|
@@ -7,59 +7,67 @@ context "Proper Type handling" do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
specify "fundamental types" do
|
10
|
-
|
11
|
-
|
10
|
+
@@types_source.functions.find(:returns => "int").length.should.equal 2
|
11
|
+
@@types_source.functions.find(:returns => "float").name.should.equal "returnsFloat"
|
12
12
|
end
|
13
13
|
|
14
14
|
xspecify "unsigned fundamental types" do
|
15
15
|
end
|
16
16
|
|
17
17
|
specify "typedefs" do
|
18
|
-
|
19
|
-
|
18
|
+
@@types_source.functions.find(:returns => "myLongType").name.should.equal "returnsLongType"
|
19
|
+
@@types_source.functions.find(:returns => "myShortType").name.should.equal "returnsShortType"
|
20
20
|
end
|
21
21
|
|
22
22
|
specify "user defined types (classes / structs)" do
|
23
|
-
|
24
|
-
|
23
|
+
@@types_source.functions.find(:returns => "user_type").name.should.equal "returnsUserType"
|
24
|
+
@@types_source.functions.find(:returns => "struct_type").length.should.equal 2
|
25
25
|
end
|
26
26
|
|
27
|
-
# Are these three necessary or can it be just one?
|
28
27
|
specify "pointers to user defined types" do
|
29
|
-
|
30
|
-
|
28
|
+
@@types_source.functions.find(:returns => "user_type*").name.should.equal "returnsUserTypePointer"
|
29
|
+
@@types_source.functions.find(:returns => "struct_type*").name.should.equal "returnsStructTypePointer"
|
31
30
|
end
|
32
31
|
|
33
32
|
specify "pointers to fundamental types" do
|
34
|
-
|
33
|
+
@@types_source.functions.find(:returns => "int*").length.should.equal 2
|
35
34
|
end
|
36
35
|
|
37
36
|
specify "pointers to typedefs" do
|
38
|
-
|
37
|
+
@@types_source.functions.find(:returns => "myLongType*").name.should.equal "returnsLongTypePointer"
|
39
38
|
end
|
40
39
|
|
41
40
|
specify "reference types" do
|
42
|
-
|
41
|
+
@@types_source.functions.find(:returns => "struct_type&").name.should.equal "returnStructReference"
|
43
42
|
end
|
44
43
|
|
45
44
|
specify "const definitions (fundamental types)" do
|
46
|
-
|
45
|
+
@@types_source.functions.find(:returns => "const int").name.should.equal "returnConstInt"
|
47
46
|
end
|
48
47
|
|
49
48
|
specify "const definitions (defined types)" do
|
50
|
-
|
49
|
+
@@types_source.functions.find(:returns => "const struct_type").name.should.equal "returnConstStruct"
|
51
50
|
end
|
52
51
|
|
53
52
|
specify "const references" do
|
54
|
-
|
53
|
+
@@types_source.functions.find(:returns => "const user_type&").name.should.equal "returnConstUserTypeRef"
|
55
54
|
end
|
56
55
|
|
57
56
|
specify "const pointers" do
|
58
|
-
|
57
|
+
@@types_source.functions.find(:returns => "const int*").name.should.equal "returnConstIntPointer"
|
59
58
|
end
|
60
59
|
|
61
60
|
specify "enumerations" do
|
62
|
-
|
61
|
+
@@types_source.functions.find(:returns => "myEnum").name.should.equal "returnMyEnum"
|
62
|
+
end
|
63
|
+
|
64
|
+
specify "arrays" do
|
65
|
+
@@types_source.functions.find(:arguments => ["int[4]*"]).name.should.equal "usesIntArray"
|
66
|
+
end
|
67
|
+
|
68
|
+
specify "function pointers" do
|
69
|
+
@@types_source.functions.find(:arguments => ["Callback"]).name.should.equal "takesCallback"
|
70
|
+
@@types_source.functions.find(:arguments => ["CallbackWithReturn"]).name.should.equal "takesCallbackWithReturn"
|
63
71
|
end
|
64
72
|
|
65
73
|
end
|
@@ -71,49 +79,66 @@ context "Printing types" do
|
|
71
79
|
end
|
72
80
|
|
73
81
|
specify "types should print back properly into string format" do
|
74
|
-
@@types_source.functions
|
75
|
-
@@types_source.functions
|
82
|
+
@@types_source.functions("returnsInt").return_type.name.should == "int"
|
83
|
+
@@types_source.functions("returnsInt").return_type.to_cpp.should == "int"
|
76
84
|
|
77
|
-
@@types_source.functions
|
85
|
+
@@types_source.functions("returnsFloat").return_type.name.should == "float"
|
78
86
|
|
79
87
|
# pointers
|
80
|
-
@@types_source.functions
|
88
|
+
@@types_source.functions("returnsIntPointer").return_type.to_cpp.should == "int*"
|
81
89
|
|
82
90
|
# references
|
83
|
-
@@types_source.functions
|
84
|
-
@@types_source.functions
|
91
|
+
@@types_source.functions("returnStructReference").return_type.to_cpp.should == "types::struct_type&"
|
92
|
+
@@types_source.functions("returnStructReference").return_type.to_cpp(false).should == "struct_type&"
|
85
93
|
|
86
94
|
# printout full from the global namespace
|
87
|
-
@@types_source.functions
|
95
|
+
@@types_source.functions("returnsString").return_type.to_cpp.should == "others::string"
|
96
|
+
@@types_source.functions("returnsString").return_type.to_cpp(false).should == "string"
|
88
97
|
|
89
98
|
# const
|
90
|
-
@@types_source.functions
|
99
|
+
@@types_source.functions("returnConstInt").return_type.to_cpp.should == "const int"
|
91
100
|
|
92
101
|
# const pointers
|
93
|
-
@@types_source.functions
|
102
|
+
@@types_source.functions("returnConstIntPointer").return_type.to_cpp.should == "const int*"
|
94
103
|
|
95
104
|
# const references
|
96
|
-
@@types_source.functions
|
97
|
-
@@types_source.functions
|
105
|
+
@@types_source.functions("returnConstUserTypeRef").return_type.to_cpp.should == "const types::user_type&"
|
106
|
+
@@types_source.functions("returnConstUserTypeRef").return_type.to_cpp(false).should == "const user_type&"
|
98
107
|
|
99
108
|
# Enumerations
|
100
|
-
@@types_source.functions
|
101
|
-
@@types_source.functions
|
109
|
+
@@types_source.functions("returnMyEnum").return_type.name.should == "myEnum"
|
110
|
+
@@types_source.functions("returnMyEnum").return_type.to_cpp.should == "types::myEnum"
|
111
|
+
|
112
|
+
# Array Types
|
113
|
+
@@types_source.functions("usesIntArray").arguments[0].name.should == "input"
|
114
|
+
@@types_source.functions("usesIntArray").arguments[0].to_cpp.should == "int[4]* input"
|
102
115
|
end
|
103
116
|
|
104
117
|
specify "can get to the base C++ construct of given types" do
|
105
|
-
@@types_source.functions.find(:returns => "const user_type&").return_type.base_type.
|
106
|
-
@@types_source.functions.find(:returns => "const int*").return_type.base_type.
|
118
|
+
@@types_source.functions.find(:returns => "const user_type&").return_type.base_type.name.should == "user_type"
|
119
|
+
@@types_source.functions.find(:returns => "const int*").return_type.base_type.name.should == "int"
|
120
|
+
end
|
121
|
+
|
122
|
+
specify "can get types of class ivars" do
|
123
|
+
@@types_source.classes("user_type").variables("var1").cpp_type.name.should == "int"
|
124
|
+
@@types_source.classes("user_type").variables("var2").cpp_type.name.should == "float"
|
125
|
+
|
126
|
+
@@types_source.structs("struct_type").variables("myType").cpp_type.to_cpp.should == "types::user_type"
|
107
127
|
end
|
108
128
|
|
109
129
|
end
|
110
130
|
|
111
131
|
context "Type comparitors" do
|
132
|
+
setup do
|
133
|
+
@@types_source ||= RbGCCXML.parse(full_dir("headers/types.h")).namespaces("types")
|
134
|
+
end
|
135
|
+
|
112
136
|
specify "can tell of a given type is a const" do
|
113
|
-
assert @@types_source.functions
|
114
|
-
assert @@types_source.functions
|
115
|
-
assert !@@types_source.functions
|
116
|
-
|
117
|
-
assert !@@types_source.functions
|
137
|
+
assert @@types_source.functions("returnConstUserTypeRef").return_type.const?
|
138
|
+
assert @@types_source.functions("returnConstIntPointer").return_type.const?
|
139
|
+
assert !@@types_source.functions("returnsUserType").return_type.const?
|
140
|
+
|
141
|
+
assert !@@types_source.functions("returnsString").return_type.const?
|
142
|
+
assert !@@types_source.functions("returnsInt").return_type.const?
|
118
143
|
end
|
119
144
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
context "Querying for variables" do
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@@variables_source ||= RbGCCXML.parse(full_dir("headers/classes.h")).namespaces("classes")
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "find global variables and constants" do
|
10
|
+
@@variables_source.variables.length.should.equal 2
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "find class variables" do
|
14
|
+
test1 = @@variables_source.classes("Test1")
|
15
|
+
test1.variables.length.should.equal 4
|
16
|
+
test1.variables.find(:access => :public).length.should.equal 2
|
17
|
+
assert test1.variables("publicVariable")
|
18
|
+
assert test1.variables("publicVariable2")
|
19
|
+
end
|
20
|
+
|
21
|
+
specify "can also find constants" do
|
22
|
+
test1 = @@variables_source.classes("Test1")
|
23
|
+
test1.constants.length.should.equal 1
|
24
|
+
assert test1.constants("CONST")
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbgccxml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.9"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Roelofs
|
@@ -9,18 +9,18 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-10-22 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: libxml-ruby
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: "
|
23
|
+
version: "1.1"
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: gccxml_gem
|
@@ -28,11 +28,15 @@ dependencies:
|
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.9
|
33
|
+
version: "0.9"
|
34
34
|
version:
|
35
|
-
description:
|
35
|
+
description: |
|
36
|
+
Rbgccxml is a library that parses out GCCXML (http://www.gccxml.org) output
|
37
|
+
and provides a simple but very powerful querying API for finding exactly
|
38
|
+
what you want out of the C++ source code
|
39
|
+
|
36
40
|
email: jameskilton@gmail.com
|
37
41
|
executables: []
|
38
42
|
|
@@ -43,31 +47,39 @@ extra_rdoc_files: []
|
|
43
47
|
files:
|
44
48
|
- TODO
|
45
49
|
- Rakefile
|
50
|
+
- lib/rbgccxml.rb
|
51
|
+
- lib/jamis.rb
|
52
|
+
- lib/rbgccxml/rbgccxml.rb
|
46
53
|
- lib/rbgccxml/parser.rb
|
54
|
+
- lib/rbgccxml/query_result.rb
|
55
|
+
- lib/rbgccxml/node.rb
|
56
|
+
- lib/rbgccxml/xml_parsing.rb
|
57
|
+
- lib/rbgccxml/nodes/function_type.rb
|
58
|
+
- lib/rbgccxml/nodes/field.rb
|
59
|
+
- lib/rbgccxml/nodes/file.rb
|
60
|
+
- lib/rbgccxml/nodes/base.rb
|
47
61
|
- lib/rbgccxml/nodes/types/reference_type.rb
|
62
|
+
- lib/rbgccxml/nodes/types/array_type.rb
|
63
|
+
- lib/rbgccxml/nodes/types/typedef.rb
|
48
64
|
- lib/rbgccxml/nodes/types/cv_qualified_type.rb
|
49
|
-
- lib/rbgccxml/nodes/types/fundamental_type.rb
|
50
65
|
- lib/rbgccxml/nodes/types/pointer_type.rb
|
51
|
-
- lib/rbgccxml/nodes/types/
|
52
|
-
- lib/rbgccxml/nodes/
|
53
|
-
- lib/rbgccxml/nodes/function.rb
|
54
|
-
- lib/rbgccxml/nodes/file.rb
|
66
|
+
- lib/rbgccxml/nodes/types/fundamental_type.rb
|
67
|
+
- lib/rbgccxml/nodes/argument.rb
|
55
68
|
- lib/rbgccxml/nodes/enumeration.rb
|
69
|
+
- lib/rbgccxml/nodes/function.rb
|
70
|
+
- lib/rbgccxml/nodes/enum_value.rb
|
71
|
+
- lib/rbgccxml/nodes/variable.rb
|
56
72
|
- lib/rbgccxml/nodes/namespace.rb
|
57
|
-
- lib/rbgccxml/nodes/
|
58
|
-
- lib/rbgccxml/nodes/
|
73
|
+
- lib/rbgccxml/nodes/destructor.rb
|
74
|
+
- lib/rbgccxml/nodes/struct.rb
|
59
75
|
- lib/rbgccxml/nodes/constructor.rb
|
60
76
|
- lib/rbgccxml/nodes/method.rb
|
77
|
+
- lib/rbgccxml/nodes/type.rb
|
61
78
|
- lib/rbgccxml/nodes/class.rb
|
62
|
-
|
63
|
-
- lib/rbgccxml/query_result.rb
|
64
|
-
- lib/rbgccxml/xml_parsing.rb
|
65
|
-
- lib/rbgccxml/node.rb
|
66
|
-
- lib/rbgccxml/rbgccxml.rb
|
67
|
-
- lib/jamis.rb
|
68
|
-
- lib/rbgccxml.rb
|
69
|
-
has_rdoc: false
|
79
|
+
has_rdoc: true
|
70
80
|
homepage: http://rbplusplus.rubyforge.org/rbgccxml
|
81
|
+
licenses: []
|
82
|
+
|
71
83
|
post_install_message:
|
72
84
|
rdoc_options: []
|
73
85
|
|
@@ -88,19 +100,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
100
|
requirements: []
|
89
101
|
|
90
102
|
rubyforge_project: rbplusplus
|
91
|
-
rubygems_version: 1.
|
103
|
+
rubygems_version: 1.3.5
|
92
104
|
signing_key:
|
93
|
-
specification_version:
|
105
|
+
specification_version: 3
|
94
106
|
summary: Ruby interface to GCCXML
|
95
107
|
test_files:
|
96
|
-
- test/
|
97
|
-
- test/
|
108
|
+
- test/enumerations_test.rb
|
109
|
+
- test/query_results_test.rb
|
98
110
|
- test/methods_test.rb
|
99
|
-
- test/
|
111
|
+
- test/namespaces_test.rb
|
100
112
|
- test/parser_test.rb
|
101
|
-
- test/
|
113
|
+
- test/variables_test.rb
|
114
|
+
- test/arguments_test.rb
|
102
115
|
- test/functions_test.rb
|
103
116
|
- test/test_helper.rb
|
117
|
+
- test/node_test.rb
|
118
|
+
- test/structs_test.rb
|
104
119
|
- test/types_test.rb
|
105
|
-
- test/
|
106
|
-
- test/
|
120
|
+
- test/classes_test.rb
|
121
|
+
- test/function_pointers_test.rb
|