rbplusplus 1.3.0 → 1.4.0
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.
- checksums.yaml +4 -4
- data/Rakefile +1 -27
- data/lib/rbplusplus/builders/class.rb +1 -1
- data/lib/rbplusplus/builders/const_converter.rb +3 -3
- data/lib/rbplusplus/builders/enumeration.rb +2 -2
- data/lib/rbplusplus/builders/method_base.rb +3 -2
- data/lib/rbplusplus/extension.rb +30 -22
- data/test/allocation_strategies_test.rb +3 -9
- data/test/class_methods_encapsulate_test.rb +4 -8
- data/test/classes_test.rb +5 -13
- data/test/compiling_test.rb +16 -20
- data/test/constructors_test.rb +6 -8
- data/test/director_test.rb +3 -8
- data/test/enumerations_test.rb +0 -16
- data/test/extension_test.rb +10 -16
- data/test/file_writers_test.rb +8 -10
- data/test/function_pointer_test.rb +1 -1
- data/test/functions_test.rb +1 -1
- data/test/generated/extconf.rb +25 -0
- data/test/headers/Adder.h +0 -2
- data/test/implicit_cast_test.rb +5 -5
- data/test/modules_test.rb +0 -7
- data/test/nested_test.rb +0 -6
- data/test/overloading_test.rb +8 -13
- data/test/subclass_test.rb +3 -8
- data/test/test_helper.rb +4 -0
- data/test/wrap_as_test.rb +8 -20
- metadata +47 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02f6abce82d5c75c2de491a4a4e3c8f62d4ef907
|
4
|
+
data.tar.gz: ba76ec48f81e2f02f89dd70ddde10b11590b8872
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f076adf0e236a54dfb592a0444ae9c8e1c4552916f6770c09c6d07b86e0e1f2190b18bcb9f9174f7f29bc78444030e70eed6726f2990c8b507d6e95ca491096c
|
7
|
+
data.tar.gz: d48214b92b458638c93f67387cc233d5a61ca06ab751ec5fb2c58d4ddc4da22c49841d70267fc0911f635c271a59e17fb392e1342233b5d4771a2a30ac48c581
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rdoc/task'
|
2
|
-
require 'rake/contrib/sshpublisher'
|
3
2
|
|
4
3
|
task :default => :test
|
5
4
|
|
@@ -18,7 +17,7 @@ task :test do
|
|
18
17
|
# the exact ruby binary that's linked to the ruby running the Rakefile. Just saying
|
19
18
|
# "ruby" will find the system's installed ruby and be worthless
|
20
19
|
ruby = File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["RUBY_INSTALL_NAME"])
|
21
|
-
sh "#{ruby} -S rspec
|
20
|
+
sh "#{ruby} -Itest -S rspec #{file}"
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
@@ -29,28 +28,3 @@ Rake::RDocTask.new do |rd|
|
|
29
28
|
rd.template = File.expand_path(File.dirname(__FILE__) + "/lib/jamis.rb")
|
30
29
|
rd.options << '--line-numbers' << '--inline-source'
|
31
30
|
end
|
32
|
-
|
33
|
-
RUBYFORGE_USERNAME = "jameskilton"
|
34
|
-
PROJECT_WEB_PATH = "/var/www/gforge-projects/rbplusplus"
|
35
|
-
|
36
|
-
namespace :web do
|
37
|
-
desc "Build website"
|
38
|
-
task :build => :rdoc do |t|
|
39
|
-
unless File.directory?("publish")
|
40
|
-
mkdir "publish"
|
41
|
-
end
|
42
|
-
|
43
|
-
sh "jekyll --pygment website publish/"
|
44
|
-
sh "cp -r html/* publish/rbplusplus/"
|
45
|
-
end
|
46
|
-
|
47
|
-
desc "Update the website"
|
48
|
-
task :upload => "web:build" do |t|
|
49
|
-
Rake::SshDirPublisher.new("#{RUBYFORGE_USERNAME}@rubyforge.org", PROJECT_WEB_PATH, "publish").upload
|
50
|
-
end
|
51
|
-
|
52
|
-
desc "Clean up generated website files"
|
53
|
-
task :clean do
|
54
|
-
rm_rf "publish"
|
55
|
-
end
|
56
|
-
end
|
@@ -95,7 +95,7 @@ module RbPlusPlus
|
|
95
95
|
# to allocate the class directly. If this code tries to use a non-public
|
96
96
|
# constructor, we hit a compiler error.
|
97
97
|
def check_allocation_strategies
|
98
|
-
# Due to the nature of
|
98
|
+
# Due to the nature of CastXML's handling of templated classes, there are some
|
99
99
|
# classes that might not have any gcc-generated constructors or destructors.
|
100
100
|
# We check here if we're one of those classes and completely skip this step
|
101
101
|
return if [self.code.constructors].flatten.empty?
|
@@ -32,7 +32,7 @@ module RbPlusPlus
|
|
32
32
|
includes << "#include \"#{self.code.file}\""
|
33
33
|
|
34
34
|
declarations << "template<>"
|
35
|
-
declarations << "Rice::Object to_ruby
|
35
|
+
declarations << "Rice::Object to_ruby< #{full_name} >(#{full_name} const & a);"
|
36
36
|
|
37
37
|
build_as = if self.parent.is_a?(EnumerationNode)
|
38
38
|
"new #{full_name}(a)"
|
@@ -41,8 +41,8 @@ module RbPlusPlus
|
|
41
41
|
end
|
42
42
|
|
43
43
|
registrations << "template<>"
|
44
|
-
registrations << "Rice::Object to_ruby
|
45
|
-
registrations << "\treturn Rice::Data_Object
|
44
|
+
registrations << "Rice::Object to_ruby< #{full_name} >(#{full_name} const & a) {"
|
45
|
+
registrations << "\treturn Rice::Data_Object< #{full_name} >(#{build_as}, Rice::Data_Type< #{full_name} >::klass(), 0, 0);"
|
46
46
|
registrations << "}"
|
47
47
|
end
|
48
48
|
|
@@ -11,7 +11,7 @@ module RbPlusPlus
|
|
11
11
|
# See ClassNode
|
12
12
|
add_global_child ConstConverterNode.new(self.code, self)
|
13
13
|
|
14
|
-
self.rice_variable_type = "Rice::Enum
|
14
|
+
self.rice_variable_type = "Rice::Enum< #{code.qualified_name} >"
|
15
15
|
self.rice_variable = "rb_e#{code.name}"
|
16
16
|
|
17
17
|
Logger.info "Wrapping enumeration #{code.qualified_name}"
|
@@ -21,7 +21,7 @@ module RbPlusPlus
|
|
21
21
|
second = parent.rice_variable ? ", #{parent.rice_variable}" : ""
|
22
22
|
|
23
23
|
registrations << "\t#{rice_variable_type} #{rice_variable} = " \
|
24
|
-
"Rice::define_enum
|
24
|
+
"Rice::define_enum< #{code.qualified_name} >(\"#{code.name}\"#{second});"
|
25
25
|
|
26
26
|
code.values.each do |v|
|
27
27
|
registrations << "\t#{rice_variable}.define_value(\"#{v.name}\", #{v.qualified_name});"
|
@@ -150,7 +150,7 @@ module RbPlusPlus
|
|
150
150
|
|
151
151
|
# See http://www.gccxml.org/Bug/view.php?id=9234
|
152
152
|
#
|
153
|
-
# Basically due to inconsistencies within gcc,
|
153
|
+
# Basically due to inconsistencies within gcc, CastXML parses default arguments
|
154
154
|
# with having enumeration values exactly as they are in the code. This means
|
155
155
|
# that if the C++ doesn't fully namespace the enumeration, extension compilation
|
156
156
|
# will fail because g++ can't find the enumeration.
|
@@ -163,9 +163,10 @@ module RbPlusPlus
|
|
163
163
|
# for an example.
|
164
164
|
def fix_enumeration_value(enum, default_value)
|
165
165
|
enum_values = [enum.values].flatten
|
166
|
+
just_base_name = default_value.split("::").last
|
166
167
|
found =
|
167
168
|
enum_values.select do |enum_value|
|
168
|
-
enum_value.name == default_value
|
169
|
+
enum_value.name == default_value || enum_value.name == just_base_name
|
169
170
|
end.first
|
170
171
|
|
171
172
|
found ? found.qualified_name : default_value
|
data/lib/rbplusplus/extension.rb
CHANGED
@@ -3,7 +3,7 @@ require 'optparse'
|
|
3
3
|
module RbPlusPlus
|
4
4
|
|
5
5
|
# This is the starting class for Rb++ wrapping. All Rb++ projects start as such:
|
6
|
-
#
|
6
|
+
#
|
7
7
|
# Extension.new "extension_name" do |e|
|
8
8
|
# ...
|
9
9
|
# end
|
@@ -18,8 +18,8 @@ module RbPlusPlus
|
|
18
18
|
#
|
19
19
|
# The following calls are required in both formats:
|
20
20
|
#
|
21
|
-
# e.sources - The directory / array / name of C++ header files to parse.
|
22
|
-
#
|
21
|
+
# e.sources - The directory / array / name of C++ header files to parse.
|
22
|
+
#
|
23
23
|
# In the non-block format, the following calls are required:
|
24
24
|
#
|
25
25
|
# e.working_dir - Specify the directory where the code will be generated. This needs
|
@@ -32,8 +32,8 @@ module RbPlusPlus
|
|
32
32
|
#
|
33
33
|
# e.write - Writes out the generated code into files
|
34
34
|
#
|
35
|
-
# e.compile - Compiles the generated code into a Ruby extension.
|
36
|
-
#
|
35
|
+
# e.compile - Compiles the generated code into a Ruby extension.
|
36
|
+
#
|
37
37
|
class Extension
|
38
38
|
|
39
39
|
# Where will the generated code be put
|
@@ -45,14 +45,14 @@ module RbPlusPlus
|
|
45
45
|
# Various options given by the user to help with
|
46
46
|
# parsing, linking, compiling, etc.
|
47
47
|
#
|
48
|
-
# See #sources for a list of the possible options
|
48
|
+
# See #sources for a list of the possible options
|
49
49
|
attr_accessor :options
|
50
50
|
|
51
51
|
# Create a new Ruby extension with a given name. This name will be
|
52
52
|
# the actual name of the extension, e.g. you'll have name.so and you will
|
53
53
|
# call require 'name' when using your new extension.
|
54
54
|
#
|
55
|
-
# This constructor can be standalone or take a block.
|
55
|
+
# This constructor can be standalone or take a block.
|
56
56
|
def initialize(name, &block)
|
57
57
|
@name = name
|
58
58
|
@modules = []
|
@@ -99,14 +99,22 @@ module RbPlusPlus
|
|
99
99
|
# * <tt>:ldflags</tt> - Flag(s) to be added to command line for linking
|
100
100
|
# * <tt>:includes</tt> - Header file(s) to include at the beginning of each .rb.cpp file generated.
|
101
101
|
# * <tt>:include_source_files</tt> - C++ source files that need to be compiled into the extension but not wrapped.
|
102
|
-
# * <tt>:include_source_dir</tt> - A combination option for reducing duplication, this option will
|
103
|
-
# query the given directory for source files, adding all to <tt>:include_source_files</tt> and
|
104
|
-
# adding all h/hpp files to <tt>:includes</tt>
|
102
|
+
# * <tt>:include_source_dir</tt> - A combination option for reducing duplication, this option will
|
103
|
+
# query the given directory for source files, adding all to <tt>:include_source_files</tt> and
|
104
|
+
# adding all h/hpp files to <tt>:includes</tt>
|
105
105
|
#
|
106
106
|
def sources(dirs, options = {})
|
107
|
-
parser_options = {
|
107
|
+
parser_options = {
|
108
|
+
:includes => [],
|
109
|
+
:cxxflags => [
|
110
|
+
# Force castxml into C++ mode
|
111
|
+
"-x c++",
|
112
|
+
# Allow things like `<::`
|
113
|
+
"-fpermissive"
|
114
|
+
]
|
115
|
+
}
|
108
116
|
|
109
|
-
if (code_dir = options.delete(:include_source_dir))
|
117
|
+
if (code_dir = options.delete(:include_source_dir))
|
110
118
|
options[:include_source_files] ||= []
|
111
119
|
options[:includes] ||= []
|
112
120
|
Dir["#{code_dir}/*"].each do |f|
|
@@ -118,11 +126,11 @@ module RbPlusPlus
|
|
118
126
|
|
119
127
|
if (paths = options.delete(:include_paths))
|
120
128
|
@options[:include_paths] << paths
|
121
|
-
parser_options[:includes]
|
129
|
+
parser_options[:includes] << paths
|
122
130
|
end
|
123
131
|
|
124
132
|
if (lib_paths = options.delete(:library_paths))
|
125
|
-
@options[:library_paths] << lib_paths
|
133
|
+
@options[:library_paths] << lib_paths
|
126
134
|
end
|
127
135
|
|
128
136
|
if (libs = options.delete(:libraries))
|
@@ -131,7 +139,7 @@ module RbPlusPlus
|
|
131
139
|
|
132
140
|
if (flags = options.delete(:cxxflags))
|
133
141
|
@options[:cxxflags] << flags
|
134
|
-
parser_options[:cxxflags]
|
142
|
+
parser_options[:cxxflags] << flags
|
135
143
|
end
|
136
144
|
|
137
145
|
if (flags = options.delete(:ldflags))
|
@@ -146,7 +154,7 @@ module RbPlusPlus
|
|
146
154
|
options[:includes] << f if File.extname(f) =~ /hpp/i || File.extname(f) =~ /h/i
|
147
155
|
end
|
148
156
|
end
|
149
|
-
|
157
|
+
|
150
158
|
if (flags = options.delete(:includes))
|
151
159
|
includes = Dir.glob(flags)
|
152
160
|
if(includes.length == 0)
|
@@ -195,8 +203,8 @@ module RbPlusPlus
|
|
195
203
|
raise "Unknown writer mode #{mode}" unless [:multiple, :single].include?(mode)
|
196
204
|
@writer_mode = mode
|
197
205
|
end
|
198
|
-
|
199
|
-
# Start the code generation process.
|
206
|
+
|
207
|
+
# Start the code generation process.
|
200
208
|
def build
|
201
209
|
raise ConfigurationError.new("Must specify working directory") unless @working_dir
|
202
210
|
raise ConfigurationError.new("Must specify which sources to wrap") unless @parser
|
@@ -217,7 +225,7 @@ module RbPlusPlus
|
|
217
225
|
Logger.info "Writing code to files"
|
218
226
|
prepare_working_dir
|
219
227
|
process_other_source_files
|
220
|
-
|
228
|
+
|
221
229
|
# Create the code
|
222
230
|
writer_class = @writer_mode == :multiple ? Writers::MultipleFilesWriter : Writers::SingleFileWriter
|
223
231
|
writer_class.new(@builder, @working_dir).write
|
@@ -257,7 +265,7 @@ module RbPlusPlus
|
|
257
265
|
exit
|
258
266
|
end
|
259
267
|
|
260
|
-
opts.on("-v", "--verbose", "Show all progress messages (INFO, DEBUG, WARNING, ERROR)") do
|
268
|
+
opts.on("-v", "--verbose", "Show all progress messages (INFO, DEBUG, WARNING, ERROR)") do
|
261
269
|
Logger.verbose = true
|
262
270
|
end
|
263
271
|
|
@@ -307,7 +315,7 @@ module RbPlusPlus
|
|
307
315
|
|
308
316
|
# Cool little eval / binding hack, from need.rb
|
309
317
|
def build_working_dir(&block)
|
310
|
-
file_name =
|
318
|
+
file_name =
|
311
319
|
if block.respond_to?(:source_location)
|
312
320
|
block.source_location[0]
|
313
321
|
else
|
@@ -331,7 +339,7 @@ module IRB # :nodoc:
|
|
331
339
|
ARGV.replace(args)
|
332
340
|
@__initialized = true
|
333
341
|
end
|
334
|
-
|
342
|
+
|
335
343
|
workspace = WorkSpace.new(binding)
|
336
344
|
|
337
345
|
irb = Irb.new(workspace)
|
@@ -15,19 +15,13 @@ describe "Allocation Strategies" do
|
|
15
15
|
# instantiate an object with a non-public constructor
|
16
16
|
# and it all dies.
|
17
17
|
specify "properly figures out what allocation to do" do
|
18
|
-
|
19
|
-
require 'alloc_strats'
|
20
|
-
end.should_not raise_error(LoadError)
|
18
|
+
require 'alloc_strats'
|
21
19
|
|
22
20
|
# Private constructor, public destructor
|
23
|
-
|
24
|
-
NoConstructor
|
25
|
-
end.should_not raise_error(NameError)
|
21
|
+
NoConstructor
|
26
22
|
|
27
23
|
# Private constructor and destructor
|
28
|
-
|
29
|
-
Neither
|
30
|
-
end.should_not raise_error(NameError)
|
24
|
+
Neither
|
31
25
|
end
|
32
26
|
|
33
27
|
specify "can get access to Neither object" do
|
@@ -22,7 +22,7 @@ describe "Correct handling of encapsulated methods" do
|
|
22
22
|
ext.protected_method
|
23
23
|
end.should raise_error(NoMethodError)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
specify "should handle virtual methods" do
|
27
27
|
ext_factory = ExtendedFactory.new
|
28
28
|
ext = ext_factory.new_instance
|
@@ -42,18 +42,14 @@ describe "Correct handling of encapsulated methods" do
|
|
42
42
|
arg.wrap_me_protected
|
43
43
|
end.should raise_error(NoMethodError)
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
end.should_not raise_error(NoMethodError)
|
48
|
-
|
45
|
+
arg.wrap_me_public ArgumentAccess::PublicStruct.new
|
46
|
+
|
49
47
|
# Multiple argument methods
|
50
48
|
lambda do
|
51
49
|
arg.wrap_me_many_no
|
52
50
|
end.should raise_error(NoMethodError)
|
53
51
|
|
54
|
-
|
55
|
-
arg.wrap_me_many_yes(1, 2.0, ArgumentAccess::PublicStruct.new)
|
56
|
-
end.should_not raise_error(NoMethodError)
|
52
|
+
arg.wrap_me_many_yes(1, 2.0, ArgumentAccess::PublicStruct.new)
|
57
53
|
end
|
58
54
|
end
|
59
55
|
|
data/test/classes_test.rb
CHANGED
@@ -22,10 +22,6 @@ describe "Extension with wrapped classes" do
|
|
22
22
|
require 'adder'
|
23
23
|
end
|
24
24
|
|
25
|
-
specify "should make classes available as Ruby runtime constants" do
|
26
|
-
lambda { Adder }.should_not raise_error
|
27
|
-
end
|
28
|
-
|
29
25
|
specify "should make wrapped classes constructable" do
|
30
26
|
a = Adder.new
|
31
27
|
a.should_not be_nil
|
@@ -46,15 +42,15 @@ describe "Extension with wrapped classes" do
|
|
46
42
|
end
|
47
43
|
|
48
44
|
specify "should use typedefs when findable" do
|
49
|
-
|
45
|
+
IntAdder
|
50
46
|
end
|
51
47
|
|
52
48
|
specify "finds and uses multi-nested typedefs" do
|
53
|
-
|
49
|
+
ShouldFindMe
|
54
50
|
end
|
55
51
|
|
56
52
|
specify "can turn off typedef lookup for certain classes" do
|
57
|
-
lambda { DontFindMeBro }.should raise_error
|
53
|
+
lambda { DontFindMeBro }.should raise_error(NameError)
|
58
54
|
end
|
59
55
|
|
60
56
|
specify "makes class constants available" do
|
@@ -62,7 +58,7 @@ describe "Extension with wrapped classes" do
|
|
62
58
|
end
|
63
59
|
|
64
60
|
specify "can ignore constants" do
|
65
|
-
lambda { Adder::HideMe }.should raise_error
|
61
|
+
lambda { Adder::HideMe }.should raise_error(NameError)
|
66
62
|
end
|
67
63
|
|
68
64
|
specify "makes public instance variables accessible" do
|
@@ -84,7 +80,7 @@ describe "Extension with wrapped classes" do
|
|
84
80
|
|
85
81
|
lambda do
|
86
82
|
a.const_var = "This is a value!"
|
87
|
-
end.should raise_error
|
83
|
+
end.should raise_error(NoMethodError)
|
88
84
|
|
89
85
|
a.const_var.should == 14
|
90
86
|
end
|
@@ -104,9 +100,5 @@ describe "Extension with wrapped classes" do
|
|
104
100
|
a.add_integers(3, 7).should == 21
|
105
101
|
a.add_strings("piz", "owned").should == "pizownedwoot"
|
106
102
|
end
|
107
|
-
|
108
|
-
specify "should not wrap incomplete types" do
|
109
|
-
lambda { Forwarder }.should raise_error
|
110
|
-
end
|
111
103
|
end
|
112
104
|
|
data/test/compiling_test.rb
CHANGED
@@ -121,29 +121,25 @@ describe "Compiler settings" do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
specify "should pass cxxflags to rbgccxml" do
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
e.write
|
131
|
-
end.should_not raise_error
|
124
|
+
e = Extension.new "parsing_test"
|
125
|
+
e.working_dir = full_dir("generated")
|
126
|
+
e.sources full_dir("headers/requires_define.h"),
|
127
|
+
:cxxflags => "-DMUST_BE_DEFINED"
|
128
|
+
e.build
|
129
|
+
e.write
|
132
130
|
end
|
133
131
|
|
134
132
|
specify "should be able to add additional headers as needed" do
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
contents.should =~ %r(headers/external_mapping_rice.h)
|
146
|
-
end.should_not raise_error
|
133
|
+
e = Extension.new "external"
|
134
|
+
e.working_dir = full_dir("generated")
|
135
|
+
e.sources full_dir("headers/external_mapping.h"),
|
136
|
+
:includes => full_dir("headers/*rice.h")
|
137
|
+
e.build
|
138
|
+
e.write
|
139
|
+
|
140
|
+
file = full_dir("generated/external.rb.cpp")
|
141
|
+
contents = File.read(file)
|
142
|
+
contents.should =~ %r(headers/external_mapping_rice.h)
|
147
143
|
end
|
148
144
|
|
149
145
|
specify "can specify other source files to be compiled into the extension" do
|
data/test/constructors_test.rb
CHANGED
@@ -15,14 +15,12 @@ describe "Extension with constructors out the whazoo" do
|
|
15
15
|
|
16
16
|
require 'constructors'
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end.should_not raise_error(NameError)
|
25
|
-
|
18
|
+
# Test complex constructors
|
19
|
+
d = DoubleStringHolder.new("one", "two")
|
20
|
+
one = d.get_one
|
21
|
+
d.get_one.should == "one"
|
22
|
+
d.get_two.should == "two"
|
23
|
+
|
26
24
|
lambda do
|
27
25
|
PrivateConstructor.new
|
28
26
|
end.should raise_error(TypeError)
|
data/test/director_test.rb
CHANGED
@@ -58,9 +58,7 @@ describe "Director proxy generation" do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
|
-
SuperGoodWorker.new.do_something(10).should == 50
|
63
|
-
end.should_not raise_error(NotImplementedError)
|
61
|
+
SuperGoodWorker.new.do_something(10).should == 50
|
64
62
|
end
|
65
63
|
|
66
64
|
specify "can specify a default return value in the wrapper" do
|
@@ -86,12 +84,12 @@ describe "Director proxy generation" do
|
|
86
84
|
specify "properly adds all constructor arguments" do
|
87
85
|
v = VirtualWithArgs.new 14, true
|
88
86
|
v.process_a("hi").should == 16
|
89
|
-
v.process_b.should
|
87
|
+
v.process_b.should eq(true)
|
90
88
|
end
|
91
89
|
|
92
90
|
specify "takes into account renamed methods / classes" do
|
93
91
|
c = BetterNamedClass.new
|
94
|
-
c.x_ok?.should_not
|
92
|
+
c.x_ok?.should_not eq(true)
|
95
93
|
|
96
94
|
c.do_processing.should == 14
|
97
95
|
end
|
@@ -162,9 +160,6 @@ describe "Director proxy generation" do
|
|
162
160
|
end
|
163
161
|
|
164
162
|
specify "multiple files writer properly handles directors and nested nodes" do
|
165
|
-
lambda { Worker::ZeeEnum }.should_not raise_error(NameError)
|
166
|
-
lambda { Worker::ZeeEnum::VALUE }.should_not raise_error(NameError)
|
167
|
-
|
168
163
|
Worker::ZeeEnum::VALUE.to_i.should == 4
|
169
164
|
end
|
170
165
|
|
data/test/enumerations_test.rb
CHANGED
@@ -17,8 +17,6 @@ describe "Wrapping enumerations" do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
specify "should wrap up enums properly" do
|
20
|
-
lambda { TestEnum }.should_not raise_error(NameError)
|
21
|
-
|
22
20
|
TestEnum::VALUE1.to_i.should == 0
|
23
21
|
TestEnum::VALUE2.to_i.should == 1
|
24
22
|
TestEnum::VALUE3.to_i.should == 2
|
@@ -30,16 +28,12 @@ describe "Wrapping enumerations" do
|
|
30
28
|
end
|
31
29
|
|
32
30
|
specify "should wrap up enumerations at proper nesting" do
|
33
|
-
lambda { Tester::MyEnum }.should_not raise_error(NameError)
|
34
|
-
|
35
31
|
Tester::MyEnum::I_LIKE_MONEY.to_i.should == 3
|
36
32
|
Tester::MyEnum::YOU_LIKE_MONEY_TOO.to_i.should == 4
|
37
33
|
Tester::MyEnum::I_LIKE_YOU.to_i.should == 7
|
38
34
|
end
|
39
35
|
|
40
36
|
specify "should work in user-defined modules" do
|
41
|
-
lambda { Mod::InnerEnum }.should_not raise_error(NameError)
|
42
|
-
|
43
37
|
Mod::InnerEnum::INNER_1.to_i.should == 0
|
44
38
|
Mod::InnerEnum::INNER_2.to_i.should == 1
|
45
39
|
end
|
@@ -63,11 +57,6 @@ describe "Wrapping enumerations" do
|
|
63
57
|
end
|
64
58
|
|
65
59
|
specify "anonymous enumerations' values are added as constants to the parent class" do
|
66
|
-
lambda { Tester::ANON_ENUM_VAL1 }.should_not raise_error(NameError)
|
67
|
-
lambda { Tester::ANON_ENUM_VAL2 }.should_not raise_error(NameError)
|
68
|
-
lambda { Tester::ANON_ENUM_VAL3 }.should_not raise_error(NameError)
|
69
|
-
lambda { Tester::ANON_ENUM_VAL4 }.should_not raise_error(NameError)
|
70
|
-
|
71
60
|
Tester::ANON_ENUM_VAL1.should == 1
|
72
61
|
Tester::ANON_ENUM_VAL2.should == 2
|
73
62
|
Tester::ANON_ENUM_VAL3.should == 5
|
@@ -75,11 +64,6 @@ describe "Wrapping enumerations" do
|
|
75
64
|
end
|
76
65
|
|
77
66
|
specify "top-level anonymous enumerations' values are added to the global scope" do
|
78
|
-
lambda { OUTER_ANON_1 }.should_not raise_error(NameError)
|
79
|
-
lambda { OUTER_ANON_2 }.should_not raise_error(NameError)
|
80
|
-
lambda { FOURTY_TWO }.should_not raise_error(NameError)
|
81
|
-
lambda { SEPERATE_OUTER_VALUE }.should_not raise_error(NameError)
|
82
|
-
|
83
67
|
OUTER_ANON_1.should == 0
|
84
68
|
OUTER_ANON_2.should == 1
|
85
69
|
FOURTY_TWO.should == 42
|
data/test/extension_test.rb
CHANGED
@@ -8,9 +8,7 @@ describe "Ruby Extension creation" do
|
|
8
8
|
e.writer_mode :single
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
require "ext_test"
|
13
|
-
end.should_not raise_error(LoadError)
|
11
|
+
require "ext_test"
|
14
12
|
end
|
15
13
|
|
16
14
|
specify "should create a valid Ruby extension without a block" do
|
@@ -22,22 +20,18 @@ describe "Ruby Extension creation" do
|
|
22
20
|
e.write
|
23
21
|
e.compile
|
24
22
|
|
25
|
-
|
26
|
-
require "ext_test"
|
27
|
-
end.should_not raise_error(LoadError)
|
23
|
+
require "ext_test"
|
28
24
|
end
|
29
25
|
|
30
26
|
specify "should properly build working dir as deep as needed" do
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
File.exists?(File.join(path, "extconf.rb")).should be_true
|
40
|
-
end.should_not raise_error(Errno::ENOENT)
|
27
|
+
path = File.join(File.expand_path(File.dirname(__FILE__)), "generated", "path1", "path2")
|
28
|
+
Extension.new "extension" do |e|
|
29
|
+
e.sources full_dir("headers/empty.h")
|
30
|
+
e.working_dir = path
|
31
|
+
e.writer_mode :single
|
32
|
+
end
|
33
|
+
|
34
|
+
File.exists?(File.join(path, "extconf.rb")).should eq(true)
|
41
35
|
end
|
42
36
|
end
|
43
37
|
|
data/test/file_writers_test.rb
CHANGED
@@ -26,15 +26,15 @@ describe "Multiple file writer (default)" do
|
|
26
26
|
extconf.rb
|
27
27
|
_Mod.rb.cpp
|
28
28
|
_Mod.rb.hpp
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
__classes_Adder.rb.cpp
|
30
|
+
__classes_Adder.rb.hpp
|
31
|
+
__classes_IntAdder.rb.cpp
|
32
|
+
__classes_IntAdder.rb.hpp
|
33
|
+
__classes_ShouldFindMe.rb.hpp
|
34
|
+
__classes_ShouldFindMe.rb.cpp
|
35
35
|
adder.rb.cpp
|
36
36
|
).each do |wants|
|
37
|
-
files.find {|got| File.basename(got) == wants }.should_not be_nil
|
37
|
+
files.find {|got| File.basename(got) == wants }.should_not be_nil, "Expected #{wants} to exist"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -116,8 +116,6 @@ describe "Single file writer with to_from_ruby" do
|
|
116
116
|
end
|
117
117
|
|
118
118
|
specify "should have compiled properly" do
|
119
|
-
|
120
|
-
require 'to_from_ruby'
|
121
|
-
end.should_not raise_error(LoadError)
|
119
|
+
require 'to_from_ruby'
|
122
120
|
end
|
123
121
|
end
|
data/test/functions_test.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mkmf-rice'
|
3
|
+
|
4
|
+
# Add the arguments to the linker flags.
|
5
|
+
def append_ld_flags(flags)
|
6
|
+
flags = [flags] unless flags.is_a?(Array)
|
7
|
+
with_ldflags("#{$LDFLAGS} #{flags.join(' ')}") { true }
|
8
|
+
end
|
9
|
+
|
10
|
+
$CPPFLAGS += " -I'/Users/jroelofs/Development/rbplusplus/test/generated' "
|
11
|
+
$LDFLAGS += " "
|
12
|
+
|
13
|
+
if RUBY_PLATFORM =~ /darwin/
|
14
|
+
# In order to link the shared library into our bundle with GCC 4.x on OSX, we have to work around a bug:
|
15
|
+
# GCC redefines symbols - which the -fno-common prohibits. In order to keep the -fno-common, we
|
16
|
+
# remove the flat_namespace (we now have two namespaces, which fixes the GCC clash). Also, we now lookup
|
17
|
+
# symbols in both the namespaces (dynamic_lookup).
|
18
|
+
|
19
|
+
$LDSHARED_CXX.gsub!('suppress', 'dynamic_lookup')
|
20
|
+
$LDSHARED_CXX.gsub!('-flat_namespace', '')
|
21
|
+
|
22
|
+
append_ld_flags '-all_load'
|
23
|
+
end
|
24
|
+
|
25
|
+
create_makefile("ui")
|
data/test/headers/Adder.h
CHANGED
data/test/implicit_cast_test.rb
CHANGED
@@ -6,7 +6,7 @@ describe "Specify types to allow implicit casting" do
|
|
6
6
|
Extension.new "implicit_cast" do |e|
|
7
7
|
e.sources full_dir("headers/implicit_cast.h")
|
8
8
|
e.writer_mode :single
|
9
|
-
|
9
|
+
|
10
10
|
node = e.namespace "implicit_cast"
|
11
11
|
|
12
12
|
# Can flag individual constructors
|
@@ -25,16 +25,16 @@ describe "Specify types to allow implicit casting" do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
specify "can use Degree in place of Radian" do
|
28
|
-
is_obtuse(Degree.new(75)).should
|
28
|
+
is_obtuse(Degree.new(75)).should eq(false)
|
29
29
|
end
|
30
30
|
|
31
31
|
specify "can use Radian in place of Degree" do
|
32
|
-
is_acute(Radian.new(2.0)).should
|
32
|
+
is_acute(Radian.new(2.0)).should eq(false)
|
33
33
|
end
|
34
34
|
|
35
35
|
specify "pointers also work fine" do
|
36
|
-
is_right(Degree.new(90)).should
|
37
|
-
is_right(Radian.new(2.0)).should
|
36
|
+
is_right(Degree.new(90)).should eq(true)
|
37
|
+
is_right(Radian.new(2.0)).should eq(false)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/test/modules_test.rb
CHANGED
@@ -42,28 +42,21 @@ describe "Extension with modules" do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
specify "should be able to generate a module definition" do
|
45
|
-
lambda { Empty }.should_not raise_error(NameError)
|
46
|
-
|
47
45
|
Empty.class.should == Module
|
48
46
|
end
|
49
47
|
|
50
48
|
specify "should wrap up C++ classes under the namespace as requested" do
|
51
|
-
lambda { Adder }.should raise_error(NameError)
|
52
|
-
lambda { Wrapper::Adder }.should_not raise_error(NameError)
|
53
|
-
|
54
49
|
a = Wrapper::Adder.new
|
55
50
|
a.get_class_name.should == "Adder"
|
56
51
|
end
|
57
52
|
|
58
53
|
specify "should wrap up C++ functions in the module" do
|
59
|
-
lambda { Functions }.should_not raise_error(NameError)
|
60
54
|
Functions::test2(2).should be_within(0.001).of(1.0)
|
61
55
|
Functions::test3(4, 6).should == 4
|
62
56
|
end
|
63
57
|
|
64
58
|
specify "should be able to nest modules and related definitions" do
|
65
59
|
lambda { Subtracter }.should raise_error(NameError)
|
66
|
-
lambda { Nested::Nested::Inner::Subtracter }.should_not raise_error(NameError)
|
67
60
|
|
68
61
|
s = Nested::Nested::Inner::Subtracter.new
|
69
62
|
s.get_class_name.should == "Subtracter"
|
data/test/nested_test.rb
CHANGED
@@ -11,12 +11,6 @@ describe "Wrapping Classes within classes" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
specify "should properly make nested classes available" do
|
14
|
-
lambda do
|
15
|
-
Kernel.const_get(TestClass)
|
16
|
-
Kernel.const_get(TestClass::InnerClass)
|
17
|
-
Kernel.const_get(TestClass::InnerClass::Inner2)
|
18
|
-
end.should_not raise_error(NameError)
|
19
|
-
|
20
14
|
TestClass.new.should_not be_nil
|
21
15
|
TestClass::InnerClass.new.should_not be_nil
|
22
16
|
TestClass::InnerClass::Inner2.new.should_not be_nil
|
data/test/overloading_test.rb
CHANGED
@@ -19,26 +19,21 @@ describe "Extension with overloaded methods" do
|
|
19
19
|
require 'overload'
|
20
20
|
|
21
21
|
#Constructor overloading is broken in rice
|
22
|
-
#math = Mathy.new
|
22
|
+
#math = Mathy.new
|
23
23
|
math = Mathy.new(1)
|
24
|
-
|
24
|
+
|
25
25
|
math.times.should == 1
|
26
26
|
math.times_1(3).should == 3
|
27
27
|
math.times_2(3,2).should == 6
|
28
28
|
math.times_3(3,2,3).should == 18
|
29
|
-
|
30
|
-
lambda do
|
31
|
-
math.nothing_0
|
32
|
-
math.nothing_1(1)
|
33
|
-
end.should_not raise_error(NameError)
|
34
29
|
|
35
|
-
|
36
|
-
|
37
|
-
math.const_method_0(1)
|
38
|
-
math.const_method_1(1)
|
39
|
-
math.const_method_string("love")
|
40
|
-
end.should_not raise_error(NameError)
|
30
|
+
math.nothing_0
|
31
|
+
math.nothing_1(1)
|
41
32
|
|
33
|
+
# Should properly handle const overloads as well
|
34
|
+
math.const_method_0(1)
|
35
|
+
math.const_method_1(1)
|
36
|
+
math.const_method_string("love")
|
42
37
|
end
|
43
38
|
|
44
39
|
end
|
data/test/subclass_test.rb
CHANGED
@@ -25,14 +25,9 @@ describe "Extension with class hierachies" do
|
|
25
25
|
# Template superclasses shouldn't cause problems
|
26
26
|
TemplateSub.new.zero.should == TemplateSub.new.custom
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
lambda do
|
33
|
-
Multiple.new
|
34
|
-
end.should_not raise_error(NameError)
|
35
|
-
|
28
|
+
# Shouldn't throw exceptions
|
29
|
+
TemplatePtr.new.custom
|
30
|
+
Multiple.new
|
36
31
|
Multiple.superclass.should == Base2
|
37
32
|
end
|
38
33
|
|
data/test/test_helper.rb
CHANGED
data/test/wrap_as_test.rb
CHANGED
@@ -61,48 +61,36 @@ describe "Ugly interfaces cleaner" do
|
|
61
61
|
ui_add(1,2)
|
62
62
|
end.should raise_error(NoMethodError)
|
63
63
|
|
64
|
-
|
65
|
-
UI::Math::add(1,2).should == 3
|
66
|
-
end.should_not raise_error(NoMethodError)
|
64
|
+
UI::Math::add(1,2).should == 3
|
67
65
|
|
68
66
|
lambda do
|
69
67
|
ui_subtract(2,1)
|
70
68
|
end.should raise_error(NoMethodError)
|
71
69
|
|
72
|
-
|
73
|
-
UI::Math::subtract(2,1).should == 1
|
74
|
-
end.should_not raise_error(NoMethodError)
|
70
|
+
UI::Math::subtract(2,1).should == 1
|
75
71
|
|
76
72
|
lambda do
|
77
73
|
C_UIVector.new
|
78
74
|
end.should raise_error(NameError)
|
79
75
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
v.x.should == 3
|
84
|
-
end.should_not raise_error(NameError)
|
76
|
+
v = UI::Vector.new
|
77
|
+
v.x = 3
|
78
|
+
v.x.should == 3
|
85
79
|
|
86
80
|
lambda do
|
87
81
|
UI::DMath::divide(1.0,2.0)
|
88
82
|
end.should raise_error(NameError)
|
89
83
|
|
90
|
-
|
91
|
-
UI::Modulus.mod(3,2).should == 1
|
92
|
-
end.should_not raise_error(NameError)
|
84
|
+
UI::Modulus.mod(3,2).should == 1
|
93
85
|
|
94
86
|
UI::Modulus.new.method_mod(4, 3).should == 1
|
95
87
|
|
96
|
-
|
97
|
-
UI::Math::divide(2,1).should == 2
|
98
|
-
end.should_not raise_error(NoMethodError)
|
88
|
+
UI::Math::divide(2,1).should == 2
|
99
89
|
|
100
90
|
lambda do
|
101
91
|
UI::NoConstructor.new
|
102
92
|
end.should raise_error(TypeError)
|
103
93
|
|
104
|
-
|
105
|
-
UI::Outside::Inside.new
|
106
|
-
end.should_not raise_error(NoMethodError)
|
94
|
+
UI::Outside::Inside.new
|
107
95
|
end
|
108
96
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbplusplus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Roelofs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbgccxml
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rice
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- test/function_pointer_test.rb
|
106
106
|
- test/function_pointers_classes_test.rb
|
107
107
|
- test/functions_test.rb
|
108
|
+
- test/generated/extconf.rb
|
108
109
|
- test/headers/Adder.cpp
|
109
110
|
- test/headers/Adder.h
|
110
111
|
- test/headers/Subtracter.hpp
|
@@ -148,7 +149,7 @@ files:
|
|
148
149
|
- test/test_helper.rb
|
149
150
|
- test/to_from_ruby_test.rb
|
150
151
|
- test/wrap_as_test.rb
|
151
|
-
homepage:
|
152
|
+
homepage: https://github.com/jasonroelofs/rbplusplus
|
152
153
|
licenses:
|
153
154
|
- MIT
|
154
155
|
metadata: {}
|
@@ -168,66 +169,67 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
169
|
version: '0'
|
169
170
|
requirements: []
|
170
171
|
rubyforge_project: rbplusplus
|
171
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.6.13
|
172
173
|
signing_key:
|
173
174
|
specification_version: 4
|
174
175
|
summary: Ruby library to generate Rice wrapper code
|
175
176
|
test_files:
|
176
|
-
- test/
|
177
|
+
- test/generated/extconf.rb
|
177
178
|
- test/class_methods_encapsulate_test.rb
|
178
|
-
- test/
|
179
|
-
- test/
|
180
|
-
- test/
|
179
|
+
- test/wrap_as_test.rb
|
180
|
+
- test/director_test.rb
|
181
|
+
- test/overloading_test.rb
|
182
|
+
- test/default_arguments_test.rb
|
183
|
+
- test/to_from_ruby_test.rb
|
184
|
+
- test/include_source_files_test.rb
|
181
185
|
- test/constructors_test.rb
|
186
|
+
- test/allocation_strategies_test.rb
|
187
|
+
- test/modules_test.rb
|
188
|
+
- test/functions_test.rb
|
189
|
+
- test/classes_test.rb
|
182
190
|
- test/custom_code_test.rb
|
183
|
-
- test/
|
184
|
-
- test/director_test.rb
|
185
|
-
- test/enumerations_test.rb
|
191
|
+
- test/function_pointers_classes_test.rb
|
186
192
|
- test/extension_test.rb
|
187
|
-
- test/
|
193
|
+
- test/class_methods_test.rb
|
188
194
|
- test/function_pointer_test.rb
|
189
|
-
- test/function_pointers_classes_test.rb
|
190
|
-
- test/functions_test.rb
|
191
|
-
- test/implicit_cast_test.rb
|
192
|
-
- test/include_source_dir_test.rb
|
193
|
-
- test/include_source_files_test.rb
|
194
|
-
- test/modules_test.rb
|
195
195
|
- test/nested_test.rb
|
196
|
-
- test/
|
196
|
+
- test/test_helper.rb
|
197
|
+
- test/file_writers_test.rb
|
197
198
|
- test/struct_test.rb
|
198
199
|
- test/subclass_test.rb
|
199
|
-
- test/
|
200
|
-
- test/
|
201
|
-
- test/
|
202
|
-
- test/
|
203
|
-
- test/headers/
|
204
|
-
- test/headers/
|
200
|
+
- test/enumerations_test.rb
|
201
|
+
- test/implicit_cast_test.rb
|
202
|
+
- test/compiling_test.rb
|
203
|
+
- test/include_source_dir_test.rb
|
204
|
+
- test/headers/function_pointers.h
|
205
|
+
- test/headers/with_includes.h
|
206
|
+
- test/headers/requires_define.h
|
207
|
+
- test/headers/director.h
|
205
208
|
- test/headers/class_methods.h
|
209
|
+
- test/headers/external_mapping_rice.h
|
210
|
+
- test/headers/needs_code.h
|
211
|
+
- test/headers/ugly_interface_ns.h
|
212
|
+
- test/headers/to_from_ruby_source.cpp
|
213
|
+
- test/headers/overload.h
|
214
|
+
- test/headers/include/helper.h
|
215
|
+
- test/headers/Adder.cpp
|
216
|
+
- test/headers/complex_static_methods.h
|
217
|
+
- test/headers/code/my_type.hpp
|
206
218
|
- test/headers/code/custom_to_from_ruby.cpp
|
207
219
|
- test/headers/code/custom_to_from_ruby.hpp
|
208
|
-
- test/headers/
|
209
|
-
- test/headers/
|
220
|
+
- test/headers/Subtracter.hpp
|
221
|
+
- test/headers/external_mapping.h
|
210
222
|
- test/headers/constructors.h
|
211
223
|
- test/headers/default_arguments.h
|
212
|
-
- test/headers/
|
224
|
+
- test/headers/alloc_strats.h
|
213
225
|
- test/headers/empty.h
|
226
|
+
- test/headers/implicit_cast.h
|
214
227
|
- test/headers/enums.h
|
215
|
-
- test/headers/
|
216
|
-
- test/headers/
|
217
|
-
- test/headers/
|
228
|
+
- test/headers/Adder.h
|
229
|
+
- test/headers/ugly_interface.h
|
230
|
+
- test/headers/nested_struct.h
|
218
231
|
- test/headers/function_pointers_class.h
|
219
232
|
- test/headers/functions.h
|
220
|
-
- test/headers/implicit_cast.h
|
221
|
-
- test/headers/include/helper.h
|
222
|
-
- test/headers/needs_code.h
|
223
|
-
- test/headers/nested_classes.h
|
224
|
-
- test/headers/nested_struct.h
|
225
|
-
- test/headers/overload.h
|
226
|
-
- test/headers/requires_define.h
|
227
233
|
- test/headers/subclass.h
|
228
|
-
- test/headers/
|
234
|
+
- test/headers/nested_classes.h
|
229
235
|
- test/headers/to_from_ruby.h
|
230
|
-
- test/headers/to_from_ruby_source.cpp
|
231
|
-
- test/headers/ugly_interface.h
|
232
|
-
- test/headers/ugly_interface_ns.h
|
233
|
-
- test/headers/with_includes.h
|