rbgccxml 0.9 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +6 -5
- data/lib/rbgccxml/node.rb +18 -13
- data/lib/rbgccxml/nodes/argument.rb +1 -1
- data/lib/rbgccxml/nodes/class.rb +1 -1
- data/lib/rbgccxml/nodes/enum_value.rb +1 -1
- data/lib/rbgccxml/nodes/method.rb +3 -3
- data/lib/rbgccxml/nodes/types/array_type.rb +1 -1
- data/lib/rbgccxml/nodes/types/cv_qualified_type.rb +1 -1
- data/lib/rbgccxml/nodes/union.rb +7 -0
- data/lib/rbgccxml/parser.rb +3 -4
- data/lib/rbgccxml/query_result.rb +1 -1
- data/lib/rbgccxml/xml_parsing.rb +6 -6
- data/lib/rbgccxml.rb +2 -0
- metadata +25 -4
data/Rakefile
CHANGED
@@ -4,7 +4,7 @@ require 'rake/contrib/sshpublisher'
|
|
4
4
|
require 'rake/gempackagetask'
|
5
5
|
|
6
6
|
PROJECT_NAME = "rbgccxml"
|
7
|
-
RBGCCXML_VERSION = "0.9"
|
7
|
+
RBGCCXML_VERSION = "0.9.1"
|
8
8
|
|
9
9
|
task :default => :test
|
10
10
|
|
@@ -55,8 +55,11 @@ spec = Gem::Specification.new do |s|
|
|
55
55
|
s.author = 'Jason Roelofs'
|
56
56
|
s.email = 'jameskilton@gmail.com'
|
57
57
|
|
58
|
-
s.add_dependency "
|
59
|
-
s.add_dependency "gccxml_gem", "~>0.9"
|
58
|
+
s.add_dependency "nokogiri", "~> 1.4.0"
|
59
|
+
s.add_dependency "gccxml_gem", "~> 0.9"
|
60
|
+
|
61
|
+
s.add_development_dependency "test-unit", "1.2.3"
|
62
|
+
s.add_development_dependency "mocha", "~> 0.9"
|
60
63
|
|
61
64
|
s.description = <<-END
|
62
65
|
Rbgccxml is a library that parses out GCCXML (http://www.gccxml.org) output
|
@@ -78,6 +81,4 @@ what you want out of the C++ source code
|
|
78
81
|
end
|
79
82
|
|
80
83
|
Rake::GemPackageTask.new(spec) do |pkg|
|
81
|
-
pkg.need_zip = true
|
82
|
-
pkg.need_tar = true
|
83
84
|
end
|
data/lib/rbgccxml/node.rb
CHANGED
@@ -13,7 +13,7 @@ module RbGCCXML
|
|
13
13
|
# attempt to will throw a NotQueryableException.
|
14
14
|
class Node
|
15
15
|
|
16
|
-
# The underlying
|
16
|
+
# The underlying xml node for this Node.
|
17
17
|
attr_reader :node
|
18
18
|
|
19
19
|
# Initialize this node according to the XML element passed in
|
@@ -26,15 +26,15 @@ module RbGCCXML
|
|
26
26
|
|
27
27
|
# Get the C++ name of this node
|
28
28
|
def name
|
29
|
-
@node
|
29
|
+
@node['name']
|
30
30
|
end
|
31
31
|
|
32
32
|
# Get the fully qualified (demangled) C++ name of this node.
|
33
33
|
def qualified_name
|
34
|
-
if @node
|
34
|
+
if @node["demangled"]
|
35
35
|
# The 'demangled' attribute of the node for methods / functions is the
|
36
36
|
# full signature, so cut that part out.
|
37
|
-
@node
|
37
|
+
@node["demangled"].split(/\(/)[0]
|
38
38
|
else
|
39
39
|
parent ? "#{parent.qualified_name}::#{name}" : name
|
40
40
|
end
|
@@ -42,27 +42,32 @@ module RbGCCXML
|
|
42
42
|
|
43
43
|
# Is this node const qualified?
|
44
44
|
def const?
|
45
|
-
@node
|
45
|
+
@node["const"] ? @node["const"] == "1" : false
|
46
46
|
end
|
47
47
|
|
48
48
|
# Does this node have public access?
|
49
49
|
def public?
|
50
|
-
@node
|
50
|
+
@node["access"] ? @node["access"] == "public" : true
|
51
51
|
end
|
52
52
|
|
53
53
|
# Does this node have protected access?
|
54
54
|
def protected?
|
55
|
-
@node
|
55
|
+
@node["access"] ? @node["access"] == "protected" : false
|
56
56
|
end
|
57
57
|
|
58
58
|
# Does this node have private access?
|
59
59
|
def private?
|
60
|
-
@node
|
60
|
+
@node["access"] ? @node["access"] == "private" : false
|
61
61
|
end
|
62
62
|
|
63
|
-
# Access to the underlying
|
63
|
+
# Access to the underlying xml node's attributes.
|
64
64
|
def attributes
|
65
|
-
@node
|
65
|
+
@node
|
66
|
+
end
|
67
|
+
|
68
|
+
# Access indivitual attributes directly
|
69
|
+
def [](val)
|
70
|
+
@node[val]
|
66
71
|
end
|
67
72
|
|
68
73
|
# Some C++ nodes are actually wrappers around other nodes. For example,
|
@@ -78,7 +83,7 @@ module RbGCCXML
|
|
78
83
|
# Returns the full path to the file this node is found in.
|
79
84
|
# Returns nil if no File node is found for this node
|
80
85
|
def file
|
81
|
-
file_id = @node
|
86
|
+
file_id = @node["file"]
|
82
87
|
file_node = XMLParsing.find(:node_type => "File", :id => file_id) if file_id
|
83
88
|
file_node ? file_node.attributes["name"] : nil
|
84
89
|
end
|
@@ -86,8 +91,8 @@ module RbGCCXML
|
|
86
91
|
# Returns the parent node of this node. e.g. function.parent will get the class
|
87
92
|
# the function is contained in.
|
88
93
|
def parent
|
89
|
-
return nil if @node
|
90
|
-
XMLParsing.find(:id => @node
|
94
|
+
return nil if @node["context"].nil? || @node["context"] == "_1"
|
95
|
+
XMLParsing.find(:id => @node["context"])
|
91
96
|
end
|
92
97
|
|
93
98
|
# This is a unified search routine for finding nested nodes. It
|
data/lib/rbgccxml/nodes/class.rb
CHANGED
@@ -5,17 +5,17 @@ module RbGCCXML
|
|
5
5
|
|
6
6
|
# Is this method static?
|
7
7
|
def static?
|
8
|
-
@node
|
8
|
+
@node["static"] == "1"
|
9
9
|
end
|
10
10
|
|
11
11
|
# Is this a virtual method?
|
12
12
|
def virtual?
|
13
|
-
@node
|
13
|
+
@node["virtual"] == "1"
|
14
14
|
end
|
15
15
|
|
16
16
|
# Is this a pure virtual method? A purely virtual method has no body.
|
17
17
|
def purely_virtual?
|
18
|
-
@node
|
18
|
+
@node["pure_virtual"] == "1"
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -21,7 +21,7 @@ module RbGCCXML
|
|
21
21
|
# See Node#to_cpp
|
22
22
|
def to_cpp(qualified = true)
|
23
23
|
type = XMLParsing.find_type_of(self.node, "type")
|
24
|
-
"#{type.to_cpp(qualified)}[#{self.node
|
24
|
+
"#{type.to_cpp(qualified)}[#{self.node["max"].gsub(/[^\d]/, '').to_i + 1}]"
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
data/lib/rbgccxml/parser.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'nokogiri'
|
2
2
|
|
3
3
|
module RbGCCXML
|
4
4
|
|
@@ -58,10 +58,9 @@ module RbGCCXML
|
|
58
58
|
xml_file = @xml_file
|
59
59
|
end
|
60
60
|
|
61
|
-
document =
|
62
|
-
root = document.root
|
61
|
+
document = Nokogiri::XML(::File.read(xml_file))
|
63
62
|
# Everything starts at the :: Namespace
|
64
|
-
global_ns =
|
63
|
+
global_ns = document.search("//Namespace[@name='::']")[0]
|
65
64
|
XMLParsing.doc_root = document
|
66
65
|
Namespace.new global_ns
|
67
66
|
end
|
data/lib/rbgccxml/xml_parsing.rb
CHANGED
@@ -40,7 +40,7 @@ module RbGCCXML
|
|
40
40
|
attrs = options.map {|key, value| "[@#{key}='#{value}']"}.join
|
41
41
|
xpath = "//#{type || '*'}#{attrs}"
|
42
42
|
|
43
|
-
got = @@doc_root.
|
43
|
+
got = @@doc_root.search(xpath).first
|
44
44
|
|
45
45
|
if got
|
46
46
|
result = build_type(type || got.name, got)
|
@@ -73,9 +73,9 @@ module RbGCCXML
|
|
73
73
|
type = options.delete(:node_type)
|
74
74
|
attrs = options.map {|key, value| "[@#{key}='#{value}']"}.join
|
75
75
|
|
76
|
-
xpath = "//#{type}#{attrs}"
|
76
|
+
xpath = "//#{type || "*"}#{attrs}"
|
77
77
|
|
78
|
-
found = @@doc_root.
|
78
|
+
found = @@doc_root.search(xpath)
|
79
79
|
|
80
80
|
if found
|
81
81
|
found.each do |got|
|
@@ -91,7 +91,7 @@ module RbGCCXML
|
|
91
91
|
#
|
92
92
|
# Returns a QueryResult with the findings.
|
93
93
|
def self.find_nested_nodes_of_type(node, node_type)
|
94
|
-
self.find_all(:node_type => node_type, :context => node
|
94
|
+
self.find_all(:node_type => node_type, :context => node["id"])
|
95
95
|
end
|
96
96
|
|
97
97
|
# Arguments are a special case in gccxml as they are actual children of
|
@@ -107,7 +107,7 @@ module RbGCCXML
|
|
107
107
|
bases = get_children_nodes_of_type(node, "Base")
|
108
108
|
|
109
109
|
if access_type
|
110
|
-
bases = bases.select {|b| b
|
110
|
+
bases = bases.select {|b| b["access"] == access_type.to_s }
|
111
111
|
end
|
112
112
|
|
113
113
|
bases.map {|b| b.cpp_type }
|
@@ -138,7 +138,7 @@ module RbGCCXML
|
|
138
138
|
# +find_type_of(func_node, "returns")+ could return "std::string" node, "int" node, etc
|
139
139
|
#
|
140
140
|
def self.find_type_of(node, attr)
|
141
|
-
self.find(:id => node
|
141
|
+
self.find(:id => node[attr])
|
142
142
|
end
|
143
143
|
|
144
144
|
private
|
data/lib/rbgccxml.rb
CHANGED
@@ -27,6 +27,8 @@ module RbGCCXML
|
|
27
27
|
autoload :Struct, "rbgccxml/nodes/struct"
|
28
28
|
autoload :Variable, "rbgccxml/nodes/variable"
|
29
29
|
|
30
|
+
autoload :Union, "rbgccxml/nodes/union"
|
31
|
+
|
30
32
|
# Type Management
|
31
33
|
autoload :Type, "rbgccxml/nodes/type"
|
32
34
|
autoload :Typedef, "rbgccxml/nodes/types/typedef"
|
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:
|
4
|
+
version: 0.9.1
|
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: 2009-
|
12
|
+
date: 2009-12-14 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: nokogiri
|
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.4.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: gccxml_gem
|
@@ -32,6 +32,26 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: "0.9"
|
34
34
|
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: test-unit
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.2.3
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: mocha
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0.9"
|
54
|
+
version:
|
35
55
|
description: |
|
36
56
|
Rbgccxml is a library that parses out GCCXML (http://www.gccxml.org) output
|
37
57
|
and provides a simple but very powerful querying API for finding exactly
|
@@ -58,6 +78,7 @@ files:
|
|
58
78
|
- lib/rbgccxml/nodes/field.rb
|
59
79
|
- lib/rbgccxml/nodes/file.rb
|
60
80
|
- lib/rbgccxml/nodes/base.rb
|
81
|
+
- lib/rbgccxml/nodes/union.rb
|
61
82
|
- lib/rbgccxml/nodes/types/reference_type.rb
|
62
83
|
- lib/rbgccxml/nodes/types/array_type.rb
|
63
84
|
- lib/rbgccxml/nodes/types/typedef.rb
|