rbplusplus 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 -3
- data/TODO +3 -0
- data/lib/rbplusplus/builders/base.rb +8 -1
- data/lib/rbplusplus/builders/class.rb +4 -11
- data/lib/rbplusplus/builders/director.rb +12 -15
- data/lib/rbplusplus/builders/director_method.rb +1 -1
- data/lib/rbplusplus/builders/extension.rb +1 -0
- data/lib/rbplusplus/builders/instance_variable.rb +2 -2
- data/lib/rbplusplus/builders/method_base.rb +40 -2
- data/lib/rbplusplus/extension.rb +4 -5
- data/lib/rbplusplus/transformers/node.rb +6 -0
- data/lib/rbplusplus/writers/multiple_files_writer.rb +10 -3
- data/lib/rbplusplus/writers/single_file_writer.rb +4 -2
- data/test/allocation_strategies_test.rb +1 -1
- data/test/class_methods_encapsulate_test.rb +1 -1
- data/test/class_methods_test.rb +1 -1
- data/test/classes_test.rb +5 -1
- data/test/compiling_test.rb +1 -1
- data/test/constructors_test.rb +1 -1
- data/test/custom_code_test.rb +1 -1
- data/test/default_arguments_test.rb +19 -1
- data/test/director_test.rb +6 -1
- data/test/enumerations_test.rb +1 -1
- data/test/extension_test.rb +1 -1
- data/test/file_writers_test.rb +1 -1
- data/test/function_pointer_test.rb +1 -1
- data/test/function_pointers_classes_test.rb +1 -1
- data/test/functions_test.rb +1 -1
- data/test/generated/extconf.rb +1 -1
- data/test/headers/Adder.h +2 -0
- data/test/headers/default_arguments.h +37 -4
- data/test/headers/director.h +8 -0
- data/test/headers/overload.h +17 -0
- data/test/modules_test.rb +1 -1
- data/test/nested_test.rb +1 -1
- data/test/overloading_test.rb +12 -5
- data/test/struct_test.rb +1 -1
- data/test/subclass_test.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/test/to_from_ruby_test.rb +1 -1
- data/test/wrap_as_test.rb +1 -1
- metadata +23 -3
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ require 'rake/rdoctask'
|
|
3
3
|
require 'rake/contrib/sshpublisher'
|
4
4
|
|
5
5
|
PROJECT_NAME = "rb++"
|
6
|
-
RBPLUSPLUS_VERSION = "0.9"
|
6
|
+
RBPLUSPLUS_VERSION = "0.9.1"
|
7
7
|
|
8
8
|
task :default => :test
|
9
9
|
|
@@ -22,7 +22,7 @@ task :test do
|
|
22
22
|
# the exact ruby binary that's linked to the ruby running the Rakefile. Just saying
|
23
23
|
# "ruby" will find the system's installed ruby and be worthless
|
24
24
|
ruby = File.join(Config::CONFIG["bindir"], Config::CONFIG["RUBY_INSTALL_NAME"])
|
25
|
-
sh "#{ruby} #{file}"
|
25
|
+
sh "#{ruby} -Itest #{file}"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -74,7 +74,10 @@ make Ruby wrapping extensions easier to write than ever.
|
|
74
74
|
END
|
75
75
|
|
76
76
|
s.add_dependency "rbgccxml", "~> 0.9"
|
77
|
-
s.add_dependency "rice", "~> 1.
|
77
|
+
s.add_dependency "rice", "~> 1.3.0"
|
78
|
+
|
79
|
+
s.add_development_dependency "test-unit", "1.2.3"
|
80
|
+
s.add_development_dependency "mocha", "~> 0.9"
|
78
81
|
|
79
82
|
patterns = [
|
80
83
|
'TODO',
|
data/TODO
CHANGED
@@ -3,6 +3,9 @@ Parts to move into rbgccxml:
|
|
3
3
|
- Class purely_virtual? (check the abstract attribute)
|
4
4
|
- Namespace#methods ?
|
5
5
|
|
6
|
+
Seen in Ogre.rb
|
7
|
+
- method wrapping is finding a reference when should be a pointer (Ogre::ShadowTextureManager::getSingleton)
|
8
|
+
|
6
9
|
Move documentation to YARD?
|
7
10
|
|
8
11
|
Use sdoc?
|
@@ -108,7 +108,10 @@ module RbPlusPlus
|
|
108
108
|
# Should this node be wrapped as it is or has the user
|
109
109
|
# specified something else for this node?
|
110
110
|
def do_not_wrap?(node)
|
111
|
-
node.ignored? ||
|
111
|
+
node.ignored? ||
|
112
|
+
(node.moved_to && node.moved_to != self.code) ||
|
113
|
+
!node.public? ||
|
114
|
+
(node.is_a?(RbGCCXML::Struct) && node.incomplete?)
|
112
115
|
end
|
113
116
|
|
114
117
|
# Given a new node, build it and add it to our nodes list
|
@@ -148,6 +151,10 @@ module RbPlusPlus
|
|
148
151
|
end
|
149
152
|
end
|
150
153
|
|
154
|
+
if node == self.code && last_found != node
|
155
|
+
Logger.debug "Found Typedef #{last_found.qualified_name} for #{node.qualified_name}"
|
156
|
+
end
|
157
|
+
|
151
158
|
last_found
|
152
159
|
end
|
153
160
|
|
@@ -28,17 +28,17 @@ module RbPlusPlus
|
|
28
28
|
|
29
29
|
if supers.length > 1
|
30
30
|
if (@superclass = self.code._get_superclass).nil?
|
31
|
+
@superclass = supers[0]
|
31
32
|
Logger.warn :mutiple_superclasses, "#{@qualified_name} has multiple public superclasses. " +
|
32
|
-
"Will use first superclass, which is #{
|
33
|
+
"Will use first superclass, which is #{@superclass.qualified_name} "
|
33
34
|
"Please use #use_superclass to specify another superclass as needed."
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
38
|
+
@director = nil
|
37
39
|
if self.code.needs_director?
|
38
40
|
@director = DirectorNode.new(self.code, self, @qualified_name, @superclass)
|
39
41
|
add_child @director
|
40
|
-
|
41
|
-
@qualified_name = @director.qualified_name
|
42
42
|
end
|
43
43
|
|
44
44
|
self.rice_variable = "rb_c#{@short_name.as_variable}"
|
@@ -63,16 +63,9 @@ module RbPlusPlus
|
|
63
63
|
def write
|
64
64
|
prefix = "#{rice_variable_type} #{rice_variable} = "
|
65
65
|
ruby_name = @short_name
|
66
|
-
expose_class = @qualified_name
|
67
66
|
superclass = @superclass.qualified_name if @superclass && !do_not_wrap?(@superclass)
|
68
67
|
|
69
|
-
|
70
|
-
@director.write_class_registration
|
71
|
-
expose_class = @director.qualified_name
|
72
|
-
superclass = @class_base_type
|
73
|
-
end
|
74
|
-
|
75
|
-
class_names = [expose_class]
|
68
|
+
class_names = [@qualified_name]
|
76
69
|
class_names << superclass if superclass
|
77
70
|
class_names = class_names.join(",")
|
78
71
|
|
@@ -52,16 +52,6 @@ module RbPlusPlus
|
|
52
52
|
@constructors << constructor
|
53
53
|
end
|
54
54
|
|
55
|
-
def write_class_registration
|
56
|
-
# Need to tell Rice of the base class, while also making sure that if there's a superclass to this class
|
57
|
-
# that we know about it, or attempts to use polymorphism will crash with 'unknown caster for {superclass}
|
58
|
-
class_names = [@class_qualified_name]
|
59
|
-
class_names << @superclass.qualified_name if @superclass && !do_not_wrap?(@superclass)
|
60
|
-
class_names = class_names.join(",")
|
61
|
-
|
62
|
-
self.parent.registrations << "Rice::define_class< #{class_names} >(\"__#{@class_base_name}__\");"
|
63
|
-
end
|
64
|
-
|
65
55
|
def write_constructor(constructor = nil)
|
66
56
|
args = ["Rice::Object self"]
|
67
57
|
types = [@name, "Rice::Object"]
|
@@ -79,6 +69,8 @@ module RbPlusPlus
|
|
79
69
|
end
|
80
70
|
|
81
71
|
declarations << "#{@name}(#{args.join(", ")}) : #{@class_qualified_name}(#{supercall_args.join(", ")}), Rice::Director(self) { }"
|
72
|
+
|
73
|
+
registrations << "#{self.parent.rice_variable}.define_director< #{@name} >();"
|
82
74
|
registrations << "#{self.parent.rice_variable}.define_constructor(Rice::Constructor< #{types.join(", ")} >());"
|
83
75
|
end
|
84
76
|
|
@@ -115,7 +107,7 @@ module RbPlusPlus
|
|
115
107
|
up_or_raise =
|
116
108
|
if method.default_return_value
|
117
109
|
reverse = "!"
|
118
|
-
"return #{method.default_return_value}
|
110
|
+
"return #{method.default_return_value}"
|
119
111
|
else
|
120
112
|
if method.purely_virtual?
|
121
113
|
"raisePureVirtual()"
|
@@ -129,14 +121,19 @@ module RbPlusPlus
|
|
129
121
|
|
130
122
|
const = method.const? ? "const" : ""
|
131
123
|
|
124
|
+
# Write out the virtual method that forwards calls into Ruby
|
132
125
|
declarations << ""
|
133
|
-
declarations << "#{return_type} #{cpp_name}(#{def_arguments}) #{const} {"
|
134
|
-
declarations << "if(#{reverse}callIsFromRuby(\"#{ruby_name}\")) {"
|
135
|
-
declarations << "#{up_or_raise};"
|
136
|
-
declarations << "} else {"
|
126
|
+
declarations << "virtual #{return_type} #{cpp_name}(#{def_arguments}) #{const} {"
|
137
127
|
declarations << "#{call_down};"
|
138
128
|
declarations << "}"
|
129
|
+
|
130
|
+
# Write out the wrapper method that gets exposed to Ruby that handles
|
131
|
+
# going up the inheritance chain
|
132
|
+
declarations << ""
|
133
|
+
declarations << "#{return_type} default_#{cpp_name}(#{def_arguments}) #{const} {"
|
134
|
+
declarations << "#{up_or_raise};"
|
139
135
|
declarations << "}"
|
136
|
+
|
140
137
|
end
|
141
138
|
|
142
139
|
declarations << "};"
|
@@ -14,7 +14,7 @@ module RbPlusPlus
|
|
14
14
|
# Setter, only if it isn't const
|
15
15
|
if !code.cpp_type.const?
|
16
16
|
method_name = "wrap_#{parent_name}_#{code.name}_set"
|
17
|
-
declarations << "void #{method_name}(#{parent.code.qualified_name}* self, #{code.cpp_type.
|
17
|
+
declarations << "void #{method_name}(#{parent.code.qualified_name}* self, #{code.cpp_type.to_cpp} val) {"
|
18
18
|
declarations << "self->#{code.name} = val;"
|
19
19
|
declarations << "}"
|
20
20
|
|
@@ -23,7 +23,7 @@ module RbPlusPlus
|
|
23
23
|
|
24
24
|
# Getter
|
25
25
|
method_name = "wrap_#{parent_name}_#{code.name}_get"
|
26
|
-
declarations << "#{code.cpp_type.
|
26
|
+
declarations << "#{code.cpp_type.to_cpp} #{method_name}(#{parent.code.qualified_name}* self) {"
|
27
27
|
declarations << "return self->#{code.name};"
|
28
28
|
declarations << "}"
|
29
29
|
|
@@ -114,22 +114,60 @@ module RbPlusPlus
|
|
114
114
|
|
115
115
|
self.code.arguments.each do |arg|
|
116
116
|
arguments << arg.to_cpp
|
117
|
-
|
117
|
+
|
118
|
+
default_value =
|
119
|
+
if arg.value
|
120
|
+
if (base_type = arg.cpp_type.base_type).is_a?(RbGCCXML::Enumeration)
|
121
|
+
" = #{fix_enumeration_value(base_type, arg.value)}"
|
122
|
+
elsif base_type.is_a?(RbGCCXML::FundamentalType)
|
123
|
+
" = (#{arg.cpp_type.base_type.to_cpp})(#{arg.value})"
|
124
|
+
else
|
125
|
+
" = (#{arg.value})"
|
126
|
+
end
|
127
|
+
else
|
128
|
+
""
|
129
|
+
end
|
130
|
+
|
131
|
+
default_arguments << "Rice::Arg(\"#{arg.name}\")#{default_value}"
|
118
132
|
end
|
119
133
|
|
120
134
|
return_type = find_typedef_for(self.code.return_type).to_cpp
|
121
135
|
|
122
136
|
def_args = default_arguments.any? ? ", (#{default_arguments.join(", ")})" : ""
|
123
137
|
|
138
|
+
const = self.code.const? ? " const" : ""
|
139
|
+
|
124
140
|
registrations << "{"
|
125
141
|
|
126
|
-
registrations << "typedef #{return_type} ( #{method_ref} )( #{arguments.join(", ")} );"
|
142
|
+
registrations << "typedef #{return_type} ( #{method_ref} )( #{arguments.join(", ")} )#{const};"
|
127
143
|
registrations << "#{self.prefix}#{self.rice_method}(\"#{@ruby_name + self.suffix}\", " +
|
128
144
|
"#{usage_ref}( &#{code_path} )#{def_args});"
|
129
145
|
|
130
146
|
registrations << "}"
|
131
147
|
end
|
132
148
|
|
149
|
+
# See http://www.gccxml.org/Bug/view.php?id=9234
|
150
|
+
#
|
151
|
+
# Basically due to inconsistencies within gcc, GCC-XML parses default arguments
|
152
|
+
# with having enumeration values exactly as they are in the code. This means
|
153
|
+
# that if the C++ doesn't fully namespace the enumeration, extension compilation
|
154
|
+
# will fail because g++ can't find the enumeration.
|
155
|
+
#
|
156
|
+
# We work around this by checking if the argument is an Enumeration (above), then
|
157
|
+
# grabbing the appropriate EnumValue and printing it out.
|
158
|
+
#
|
159
|
+
# Of course, there could be times we don't want to do this and just use the actual
|
160
|
+
# default value. See default_arguments_test and headers/default_arguments.h
|
161
|
+
# for an example.
|
162
|
+
def fix_enumeration_value(enum, default_value)
|
163
|
+
found =
|
164
|
+
enum.values.select do |enum_value|
|
165
|
+
enum_value.name == default_value
|
166
|
+
end.first
|
167
|
+
|
168
|
+
found ? found.qualified_name : default_value
|
169
|
+
end
|
170
|
+
|
133
171
|
end
|
134
172
|
|
135
173
|
end
|
data/lib/rbplusplus/extension.rb
CHANGED
@@ -57,6 +57,8 @@ module RbPlusPlus
|
|
57
57
|
@name = name
|
58
58
|
@modules = []
|
59
59
|
@writer_mode = :multiple
|
60
|
+
@requesting_console = false
|
61
|
+
@force_rebuild = false
|
60
62
|
|
61
63
|
@options = {
|
62
64
|
:include_paths => [],
|
@@ -74,6 +76,7 @@ module RbPlusPlus
|
|
74
76
|
|
75
77
|
if requesting_console?
|
76
78
|
block.call(self) if block
|
79
|
+
start_console
|
77
80
|
elsif block
|
78
81
|
build_working_dir(&block)
|
79
82
|
block.call(self)
|
@@ -154,10 +157,6 @@ module RbPlusPlus
|
|
154
157
|
@sources = Dir.glob dirs
|
155
158
|
Logger.info "Parsing #{@sources.inspect}"
|
156
159
|
@parser = RbGCCXML.parse(dirs, parser_options)
|
157
|
-
|
158
|
-
if requesting_console?
|
159
|
-
start_console
|
160
|
-
end
|
161
160
|
end
|
162
161
|
|
163
162
|
# Set a namespace to be the main namespace used for this extension.
|
@@ -290,7 +289,7 @@ module RbPlusPlus
|
|
290
289
|
# and if it does exist, clean it out
|
291
290
|
def prepare_working_dir
|
292
291
|
FileUtils.mkdir_p @working_dir unless File.directory?(@working_dir)
|
293
|
-
FileUtils.rm_rf Dir["#{@working_dir}/*"] if @force_rebuild
|
292
|
+
FileUtils.rm_rf Dir["#{@working_dir}/*"] if @force_rebuild
|
294
293
|
end
|
295
294
|
|
296
295
|
# Make sure that any files or globs of files in :include_source_files are copied into the working
|
@@ -60,6 +60,12 @@ module RbGCCXML
|
|
60
60
|
!!cache[:disable_typedef_lookup]
|
61
61
|
end
|
62
62
|
|
63
|
+
# Is this node an incomplete node?
|
64
|
+
# TODO Move to rbgccxml
|
65
|
+
def incomplete?
|
66
|
+
self["incomplete"] ? self["incomplete"] == "1" : false
|
67
|
+
end
|
68
|
+
|
63
69
|
protected
|
64
70
|
|
65
71
|
# Get this node's settings cache
|
@@ -128,6 +128,11 @@ module RbPlusPlus
|
|
128
128
|
@node = node
|
129
129
|
@base_name = node.qualified_name.as_variable
|
130
130
|
|
131
|
+
@register_method = nil
|
132
|
+
@register_methods = []
|
133
|
+
@register_includes = []
|
134
|
+
|
135
|
+
|
131
136
|
@header = parent ? "_#{@base_name}.rb.hpp" : nil
|
132
137
|
@source = parent ? "_#{@base_name}.rb.cpp" : "#{@base_name}.rb.cpp"
|
133
138
|
@parent = parent
|
@@ -167,9 +172,6 @@ module RbPlusPlus
|
|
167
172
|
end
|
168
173
|
|
169
174
|
def add_register_method(node_name, header)
|
170
|
-
@register_methods ||= []
|
171
|
-
@register_includes ||= []
|
172
|
-
|
173
175
|
@register_includes << "#include \"#{header}\""
|
174
176
|
@register_methods << "register_#{node_name}(#{has_rice_variable? ? self.rice_variable : ""});"
|
175
177
|
end
|
@@ -263,6 +265,7 @@ module RbPlusPlus
|
|
263
265
|
|
264
266
|
# I really need a better way of handling this
|
265
267
|
if @needs_closing
|
268
|
+
cpp.puts "} RUBY_CATCH" unless @parent
|
266
269
|
cpp.puts "}"
|
267
270
|
end
|
268
271
|
end
|
@@ -280,6 +283,10 @@ module RbPlusPlus
|
|
280
283
|
@needs_closing = false
|
281
284
|
@additional_includes = []
|
282
285
|
@require_custom = true
|
286
|
+
|
287
|
+
@register_method = nil
|
288
|
+
@register_includes = []
|
289
|
+
@register_methods = []
|
283
290
|
end
|
284
291
|
|
285
292
|
def with_includes(includes)
|
@@ -28,8 +28,10 @@ module RbPlusPlus
|
|
28
28
|
cpp.puts @global_hpp.flatten.compact.join("\n")
|
29
29
|
cpp.puts @declarations.flatten.compact.join("\n")
|
30
30
|
cpp.puts @global_cpp.flatten.compact.join("\n")
|
31
|
-
|
32
|
-
cpp.puts "
|
31
|
+
|
32
|
+
cpp.puts @registrations.flatten.compact.join("\n\t")
|
33
|
+
cpp.puts "} RUBY_CATCH"
|
34
|
+
cpp.puts "}"
|
33
35
|
|
34
36
|
end
|
35
37
|
end
|
data/test/class_methods_test.rb
CHANGED
data/test/classes_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
context "Extension with wrapped classes" do
|
4
4
|
|
@@ -108,5 +108,9 @@ context "Extension with wrapped classes" do
|
|
108
108
|
a.add_integers(3, 7).should.equal 21
|
109
109
|
a.add_strings("piz", "owned").should.equal "pizownedwoot"
|
110
110
|
end
|
111
|
+
|
112
|
+
specify "should not wrap incomplete types" do
|
113
|
+
assert !defined?(Forwarder)
|
114
|
+
end
|
111
115
|
end
|
112
116
|
|
data/test/compiling_test.rb
CHANGED
data/test/constructors_test.rb
CHANGED
data/test/custom_code_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
context "Default arguments properly exposed" do
|
4
4
|
|
@@ -66,4 +66,22 @@ context "Default arguments properly exposed" do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
# See MethodBase#fix_enumeration_value
|
70
|
+
specify "properly handle incomplete enums in default values" do
|
71
|
+
modify(1).should.equal 11
|
72
|
+
modify(1, Ops::ADD).should.equal 11
|
73
|
+
modify(1, Ops::REMOVE).should.equal -9
|
74
|
+
end
|
75
|
+
|
76
|
+
# Ogre does this to handle some weird pass-back-enum-that-signals-error (Ogre::Frustum::isVisible)
|
77
|
+
specify "properly handle incomplete enums arguments with straight integer default values" do
|
78
|
+
modify2(1).should.equal 1
|
79
|
+
modify2(1, Ops::ADD).should.equal 1
|
80
|
+
modify2(1, Ops::REMOVE).should.equal 1
|
81
|
+
end
|
82
|
+
|
83
|
+
xspecify "should properly handle argument type qualifiers like refs and consts" do
|
84
|
+
build_strings("I'd ").should.equal "I'd kick-it"
|
85
|
+
build_strings("You won't", " do it").should.equal "You won't do it"
|
86
|
+
end
|
69
87
|
end
|
data/test/director_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
context "Director proxy generation" do
|
4
4
|
|
@@ -170,4 +170,9 @@ context "Director proxy generation" do
|
|
170
170
|
Worker::ZeeEnum::VALUE.to_i.should.equal 4
|
171
171
|
end
|
172
172
|
|
173
|
+
specify "inheritance types are registered properly" do
|
174
|
+
two = VTwo.new
|
175
|
+
VBase::process(two).should.equal "methodTwo"
|
176
|
+
end
|
177
|
+
|
173
178
|
end
|
data/test/enumerations_test.rb
CHANGED
data/test/extension_test.rb
CHANGED
data/test/file_writers_test.rb
CHANGED
data/test/functions_test.rb
CHANGED
data/test/generated/extconf.rb
CHANGED
data/test/headers/Adder.h
CHANGED
@@ -21,9 +21,11 @@ namespace default_args {
|
|
21
21
|
public:
|
22
22
|
Tester() { }
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
static std::string DEFAULT_WITH;
|
25
|
+
|
26
|
+
// Class methods
|
27
|
+
std::string concat(std::string value1, std::string value2, std::string with = default_args::Tester::DEFAULT_WITH) {
|
28
|
+
return value1 + with + value2;
|
27
29
|
}
|
28
30
|
|
29
31
|
// Class static methods
|
@@ -36,6 +38,14 @@ namespace default_args {
|
|
36
38
|
}
|
37
39
|
};
|
38
40
|
|
41
|
+
std::string Tester::DEFAULT_WITH = std::string("-");
|
42
|
+
static std::string KICK_IT = std::string("kick-it");
|
43
|
+
|
44
|
+
// Make sure const and reference types are taken care of properly
|
45
|
+
//std::string build_strings(std::string value1, const std::string& with = default_args::KICK_IT) {
|
46
|
+
//return value1 + with;
|
47
|
+
//}
|
48
|
+
|
39
49
|
class Directed {
|
40
50
|
public:
|
41
51
|
// Director methods
|
@@ -43,7 +53,30 @@ namespace default_args {
|
|
43
53
|
return x * y;
|
44
54
|
}
|
45
55
|
};
|
46
|
-
|
56
|
+
|
57
|
+
enum Ops {
|
58
|
+
ADD = 0,
|
59
|
+
REMOVE = 1
|
60
|
+
};
|
61
|
+
|
62
|
+
int modify(int value, Ops by = ADD) {
|
63
|
+
switch(by) {
|
64
|
+
case ADD:
|
65
|
+
return value + 10;
|
66
|
+
break;
|
67
|
+
case REMOVE:
|
68
|
+
return value - 10;
|
69
|
+
break;
|
70
|
+
}
|
71
|
+
return value;
|
72
|
+
}
|
73
|
+
|
74
|
+
// Seen in Ogre3D
|
75
|
+
int modify2(int value, Ops* by = 0) {
|
76
|
+
return value;
|
77
|
+
}
|
78
|
+
|
79
|
+
|
47
80
|
}
|
48
81
|
|
49
82
|
#endif // __DEFAULT_ARGS_H__
|
data/test/headers/director.h
CHANGED
@@ -125,6 +125,14 @@ namespace director {
|
|
125
125
|
VBase() { }
|
126
126
|
virtual ~VBase() { }
|
127
127
|
|
128
|
+
/**
|
129
|
+
* See that types are registered properly.
|
130
|
+
* Passing a VTwo into this method should work
|
131
|
+
*/
|
132
|
+
static std::string process(VBase* base) {
|
133
|
+
return base->methodTwo();
|
134
|
+
}
|
135
|
+
|
128
136
|
virtual std::string methodOne() = 0;
|
129
137
|
virtual std::string methodTwo() = 0;
|
130
138
|
virtual std::string methodThree() = 0;
|
data/test/headers/overload.h
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#ifndef __METHOD_OVERLOAD_H__
|
2
2
|
#define __METHOD_OVERLOAD_H__
|
3
3
|
|
4
|
+
#include <string>
|
5
|
+
|
4
6
|
namespace overload {
|
5
7
|
class Mathy {
|
6
8
|
public:
|
@@ -20,6 +22,21 @@ namespace overload {
|
|
20
22
|
}
|
21
23
|
void nothing() {}
|
22
24
|
void nothing(int x) {}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Const methods
|
28
|
+
*/
|
29
|
+
int constMethod(int x) {
|
30
|
+
return 1;
|
31
|
+
}
|
32
|
+
|
33
|
+
int constMethod(int x) const {
|
34
|
+
return 2;
|
35
|
+
}
|
36
|
+
|
37
|
+
int constMethod(std::string val) const {
|
38
|
+
return val.size();
|
39
|
+
}
|
23
40
|
};
|
24
41
|
}
|
25
42
|
#endif
|
data/test/modules_test.rb
CHANGED
data/test/nested_test.rb
CHANGED
data/test/overloading_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
context "Extension with overloaded methods" do
|
4
4
|
|
@@ -24,10 +24,10 @@ context "Extension with overloaded methods" do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
should.not.raise NameError do
|
27
|
-
math.times.should
|
28
|
-
math.times_1(3).should
|
29
|
-
math.times_2(3,2).should
|
30
|
-
math.times_3(3,2,3).should
|
27
|
+
math.times.should.equal 1
|
28
|
+
math.times_1(3).should.equal 3
|
29
|
+
math.times_2(3,2).should.equal 6
|
30
|
+
math.times_3(3,2,3).should.equal 18
|
31
31
|
end
|
32
32
|
|
33
33
|
should.not.raise NameError do
|
@@ -35,6 +35,13 @@ context "Extension with overloaded methods" do
|
|
35
35
|
math.nothing_1(1)
|
36
36
|
end
|
37
37
|
|
38
|
+
# Should properly handle const overloads as well
|
39
|
+
should.not.raise NameError do
|
40
|
+
math.const_method_0(1).should.equal 1
|
41
|
+
math.const_method_1(1).should.equal 2
|
42
|
+
math.const_method_2("love").should.equal 4
|
43
|
+
end
|
44
|
+
|
38
45
|
end
|
39
46
|
|
40
47
|
end
|
data/test/struct_test.rb
CHANGED
data/test/subclass_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/to_from_ruby_test.rb
CHANGED
data/test/wrap_as_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbplusplus
|
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,7 +9,7 @@ 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
|
@@ -30,7 +30,27 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.3.0
|
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"
|
34
54
|
version:
|
35
55
|
description: |
|
36
56
|
Rb++ combines the powerful query interface of rbgccxml and the Rice library to
|