[macruby-changes] [3141] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Dec 21 12:37:48 PST 2009
Revision: 3141
http://trac.macosforge.org/projects/ruby/changeset/3141
Author: joshua.ballanco at apple.com
Date: 2009-12-21 12:37:44 -0800 (Mon, 21 Dec 2009)
Log Message:
-----------
Reverting last change for further investigation
Modified Paths:
--------------
MacRuby/trunk/spec/macruby/core/array_spec.rb
MacRuby/trunk/spec/macruby/core/hash_spec.rb
MacRuby/trunk/spec/macruby/core/string_spec.rb
MacRuby/trunk/spec/macruby/language/objc_method_spec.rb
MacRuby/trunk/vm.cpp
MacRuby/trunk/vm.h
Modified: MacRuby/trunk/spec/macruby/core/array_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/array_spec.rb 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/spec/macruby/core/array_spec.rb 2009-12-21 20:37:44 UTC (rev 3141)
@@ -79,49 +79,3 @@
end
=end
end
-
-describe "Objective-C Array methods" do
- before :each do
- @a = [1,2,3,4]
- end
-
- it "should be able to be aliased to other selectors" do
- class << @a
- alias :foo :count
- end
-
- @a.foo.should == @a.count
- end
-
- it "should be able to be aliased by pure Ruby methods" do
- class << @a
- def foo
- return 42
- end
- alias :count :foo
- end
-
- @a.count.should == 42
- end
-
- it "should be commutative when aliased" do
- class << @a
- def foo
- return 42
- end
- def do_alias
- alias :old_count :count
- alias :count :foo
- end
- def undo_alias
- alias :count :old_count
- end
- end
-
- @a.count.should == 4
- @a.do_alias
- @a.count.should == 42
- @a.undo_alias
- @a.count.should == 4
- end
-end
Modified: MacRuby/trunk/spec/macruby/core/hash_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/hash_spec.rb 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/spec/macruby/core/hash_spec.rb 2009-12-21 20:37:44 UTC (rev 3141)
@@ -77,49 +77,3 @@
lambda { a[42] = 123 }.should raise_error(RuntimeError)
end
end
-
-describe "Objective-C Hash methods" do
- before :each do
- @a = {:a => 1, :b => 2, :c => 3}
- end
-
- it "should be able to be aliased to other selectors" do
- class << @a
- alias :foo :count
- end
-
- @a.foo.should == @a.count
- end
-
- it "should be able to be aliased by pure Ruby methods" do
- class << @a
- def foo
- return 42
- end
- alias :count :foo
- end
-
- @a.count.should == 42
- end
-
- it "should be commutative when aliased" do
- class << @a
- def foo
- return 42
- end
- def do_alias
- alias :old_count :count
- alias :count :foo
- end
- def undo_alias
- alias :count :old_count
- end
- end
-
- @a.count.should == 4
- @a.do_alias
- @a.count.should == 42
- @a.undo_alias
- @a.count.should == 4
- end
-end
Modified: MacRuby/trunk/spec/macruby/core/string_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/core/string_spec.rb 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/spec/macruby/core/string_spec.rb 2009-12-21 20:37:44 UTC (rev 3141)
@@ -81,49 +81,3 @@
#lambda { a << 'foo' }.should raise_error(RuntimeError)
end
end
-
-describe "Objective-C String methods" do
- before :each do
- @a = "test"
- end
-
- it "should be able to be aliased to other selectors" do
- class << @a
- alias :foo :length
- end
-
- @a.foo.should == @a.length
- end
-
- it "should be able to be aliased by pure Ruby methods" do
- class << @a
- def foo
- return 42
- end
- alias :length :foo
- end
-
- @a.length.should == 42
- end
-
- it "should be commutative when aliased" do
- class << @a
- def foo
- return 42
- end
- def do_alias
- alias :old_length :length
- alias :length :foo
- end
- def undo_alias
- alias :length :old_length
- end
- end
-
- @a.length.should == 4
- @a.do_alias
- @a.length.should == 42
- @a.undo_alias
- @a.length.should == 4
- end
-end
Modified: MacRuby/trunk/spec/macruby/language/objc_method_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/language/objc_method_spec.rb 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/spec/macruby/language/objc_method_spec.rb 2009-12-21 20:37:44 UTC (rev 3141)
@@ -408,49 +408,6 @@
end
@o.methodAcceptingSEL('foo:arg1:arg2:', target:o)
end
-
- it "can have another method aliased to it" do
- class << @o
- alias :test_method :methodReturningSelf
- end
-
- @o.should.respond_to(:test_method)
- @o.test_method.should == @o
- @o.test_method.object_id.should == @o.object_id
- end
-
- it "can be aliased to a pure Ruby method" do
- class << @o
- def foo
- return 42
- end
- alias :methodReturningSelf :foo
- end
-
- @o.should.respond_to(:methodReturningSelf)
- @o.methodReturningSelf.should == 42
- end
-
- it "should be commutative when aliased" do
- class << @o
- def foo
- return 42
- end
- def do_alias
- alias :old_methodReturningSelf :methodReturningSelf
- alias :methodReturningSelf :foo
- end
- def undo_alias
- alias :methodReturningSelf :old_methodReturningSelf
- end
- end
-
- @o.methodReturningSelf.should == @o
- @o.do_alias
- @o.methodReturningSelf.should == 42
- @o.undo_alias
- @o.methodReturningSelf.should == @o
- end
end
describe "A pure MacRuby method" do
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/vm.cpp 2009-12-21 20:37:44 UTC (rev 3141)
@@ -1464,6 +1464,11 @@
const char *types = method_getTypeEncoding(method);
rb_vm_method_node_t *node = GET_CORE()->method_node_get(method);
+ if (node == NULL) {
+ rb_raise(rb_eArgError,
+ "only pure Ruby methods can be aliased (`%s' is not)",
+ sel_getName(method_getName(method)));
+ }
const char *name_str = rb_id2name(name);
SEL sel;
@@ -1476,27 +1481,8 @@
sel = sel_registerName(tmp);
}
- if (node == NULL) {
- Method method_to_replace = class_getInstanceMethod(klass, sel);
- rb_vm_method_node_t *node_to_replace = GET_CORE()->method_node_get(method_to_replace);
- if ((klass == (Class)rb_cCFString || klass == (Class)rb_cCFHash)
- && node_to_replace != NULL) {
- //Doesn't work:
- //GET_CORE()->remove_method(klass, sel);
- //
- //This, apparently, doesn't work either...
- //GET_CORE()->add_method(klass, sel, imp, imp,
- // arity, 0, types);
- //
- //This...sorta...works...
- GET_CORE()->nuke_method(method_to_replace);
- }
- class_replaceMethod(klass, sel, imp, types);
- }
- else {
- GET_CORE()->add_method(klass, sel, imp, node->ruby_imp,
- node->arity, node->flags, types);
- }
+ GET_CORE()->add_method(klass, sel, imp, node->ruby_imp,
+ node->arity, node->flags, types);
}
extern "C"
@@ -1517,15 +1503,6 @@
const char *def_str = rb_id2name(def);
SEL sel = sel_registerName(def_str);
-
- // String and Hash aliases should be defined on the Core Foundation classes
- if (klass == (Class)rb_cNSMutableString) {
- klass = (Class)rb_cCFString;
- }
- if (klass == (Class)rb_cNSMutableHash) {
- klass = (Class)rb_cCFHash;
- }
-
Method def_method1 = class_getInstanceMethod(klass, sel);
Method def_method2 = NULL;
if (def_str[strlen(def_str) - 1] != ':') {
@@ -2558,16 +2535,6 @@
}
}
-void
-RoxorCore::nuke_method(Method m)
-{
- invalidate_method_cache(method_getName(m));
- std::map<Method, rb_vm_method_node_t *>::iterator iter = ruby_methods.find(m);
- assert(iter != ruby_methods.end());
- free(iter->second);
- ruby_methods.erase(iter);
-}
-
extern "C"
void
rb_vm_undef_method(Class klass, ID name, bool must_exist)
Modified: MacRuby/trunk/vm.h
===================================================================
--- MacRuby/trunk/vm.h 2009-12-21 12:34:46 UTC (rev 3140)
+++ MacRuby/trunk/vm.h 2009-12-21 20:37:44 UTC (rev 3141)
@@ -757,7 +757,6 @@
rb_vm_method_node_t *node, const char *types);
void undef_method(Class klass, SEL sel);
void remove_method(Class klass, SEL sel);
- void nuke_method(Method m);
bool resolve_methods(std::map<Class, rb_vm_method_source_t *> *map,
Class klass, SEL sel);
bool copy_method(Class klass, Method m);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091221/51e759fa/attachment.html>
More information about the macruby-changes
mailing list