rbgccxml 0.9 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|