[macruby-changes] [2949] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Nov 2 23:22:23 PST 2009
Revision: 2949
http://trac.macosforge.org/projects/ruby/changeset/2949
Author: lsansonetti at apple.com
Date: 2009-11-02 23:22:20 -0800 (Mon, 02 Nov 2009)
Log Message:
-----------
let void-returning objc calls return the receiver instead of nil (patch by Thibault Martin-Lagardette)
Modified Paths:
--------------
MacRuby/trunk/compiler.cpp
MacRuby/trunk/spec/macruby/language/objc_method_spec.rb
Modified: MacRuby/trunk/compiler.cpp
===================================================================
--- MacRuby/trunk/compiler.cpp 2009-11-03 05:20:38 UTC (rev 2948)
+++ MacRuby/trunk/compiler.cpp 2009-11-03 07:22:20 UTC (rev 2949)
@@ -6641,12 +6641,13 @@
ret_type = VoidTy;
}
+ Value *self_arg = NULL;
if (is_objc) {
// self
p = SkipFirstType(p);
p = SkipStackSize(p);
f_types.push_back(RubyObjTy);
- Value *self_arg = arg++;
+ self_arg = arg++;
params.push_back(self_arg);
// sel
@@ -6719,8 +6720,17 @@
else {
retval = imp_call;
}
+
GetFirstType(types, buf, sizeof buf);
- retval = compile_conversion_to_ruby(buf, convert_type(buf), retval);
+ ret_type = convert_type(buf);
+ if (self_arg != NULL && ret_type == VoidTy) {
+ // If we are calling an Objective-C method that returns void, let's
+ // return the receiver instead of nil, for convenience purposes.
+ retval = self_arg;
+ }
+ else {
+ retval = compile_conversion_to_ruby(buf, ret_type, retval);
+ }
ReturnInst::Create(context, retval, bb);
return f;
Modified: MacRuby/trunk/spec/macruby/language/objc_method_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/language/objc_method_spec.rb 2009-11-03 05:20:38 UTC (rev 2948)
+++ MacRuby/trunk/spec/macruby/language/objc_method_spec.rb 2009-11-03 07:22:20 UTC (rev 2949)
@@ -38,8 +38,8 @@
nil.self.should == nil
end
- it "returning void returns nil in Ruby" do
- @o.methodReturningVoid.should == nil
+ it "returning void returns the receiver in Ruby" do
+ @o.methodReturningVoid.should == @o
end
it "returning nil returns nil in Ruby" do
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091102/6822abf3/attachment.html>
More information about the macruby-changes
mailing list