[macruby-changes] [535] MacRuby/trunk/vm_method.c

source_changes at macosforge.org source_changes at macosforge.org
Sat Aug 30 19:10:24 PDT 2008


Revision: 535
          http://trac.macosforge.org/projects/ruby/changeset/535
Author:   lsansonetti at apple.com
Date:     2008-08-30 19:10:23 -0700 (Sat, 30 Aug 2008)
Log Message:
-----------
implement #remove_method

Modified Paths:
--------------
    MacRuby/trunk/vm_method.c

Modified: MacRuby/trunk/vm_method.c
===================================================================
--- MacRuby/trunk/vm_method.c	2008-08-30 19:53:28 UTC (rev 534)
+++ MacRuby/trunk/vm_method.c	2008-08-31 02:10:23 UTC (rev 535)
@@ -372,7 +372,28 @@
 	rb_warn("removing `%s' may cause serious problem", rb_id2name(mid));
     }
 #if WITH_OBJC
-    // TODO
+    SEL sel;
+    Method m;
+
+    sel = sel_registerName(rb_id2name(mid));
+    m = class_getInstanceMethod((Class)klass, sel);
+    if (m == NULL) {
+	char buf[100];
+	size_t len = strlen((char *)sel);
+	if (((char *)sel)[len - 1] != ':') {
+	    snprintf(buf, sizeof buf, "%s:", (char *)sel);
+	    sel = sel_registerName(buf);
+	    m = class_getInstanceMethod((Class)klass, sel);
+	}
+    }
+    if (m == NULL) {
+	rb_name_error(mid, "method `%s' not defined in %s",
+		      rb_id2name(mid), rb_class2name(klass));
+    }
+    if (rb_objc_method_node3(method_getImplementation(m)) == NULL) {
+	rb_warn("removing pure Objective-C method `%s' may cause serious problem", rb_id2name(mid));
+    }
+    method_setImplementation(m, NULL);
 #else
     if (st_lookup(RCLASS_M_TBL(klass), mid, &data)) {
 	body = (NODE *)data;
@@ -381,11 +402,11 @@
 	    st_delete(RCLASS_M_TBL(klass), &mid, &data);
 	}
     }
-#endif
     if (!body) {
 	rb_name_error(mid, "method `%s' not defined in %s",
 		      rb_id2name(mid), rb_class2name(klass));
     }
+#endif
 
     if (nd_type(body->nd_body->nd_body) == NODE_CFUNC) {
 	rb_vm_check_redefinition_opt_method(body);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080830/9c5bcfce/attachment-0001.html 


More information about the macruby-changes mailing list