[macruby-changes] [642] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Sep 30 12:27:56 PDT 2008
Revision: 642
http://trac.macosforge.org/projects/ruby/changeset/642
Author: lsansonetti at apple.com
Date: 2008-09-30 12:27:55 -0700 (Tue, 30 Sep 2008)
Log Message:
-----------
support for writing formal protocol methods
Modified Paths:
--------------
MacRuby/trunk/objc.m
MacRuby/trunk/test/ruby/test_objc.rb
Modified: MacRuby/trunk/objc.m
===================================================================
--- MacRuby/trunk/objc.m 2008-09-29 05:30:32 UTC (rev 641)
+++ MacRuby/trunk/objc.m 2008-09-30 19:27:55 UTC (rev 642)
@@ -2627,6 +2627,45 @@
}
static void
+reload_protocols(void)
+{
+ Protocol **prots;
+ unsigned int i, prots_count;
+
+ prots = objc_copyProtocolList(&prots_count);
+ for (i = 0; i < prots_count; i++) {
+ Protocol *p;
+ struct objc_method_description *methods;
+ unsigned j, methods_count;
+
+ p = prots[i];
+
+#define REGISTER_MDESCS(t) \
+ do { \
+ for (j = 0; j < methods_count; j++) { \
+ if (methods[j].name == sel_ignored) \
+ continue; \
+ st_insert(t, (st_data_t)methods[j].name, (st_data_t)methods[j].types); \
+ } \
+ free(methods); \
+ } \
+ while (0)
+
+ methods = protocol_copyMethodDescriptionList(p, true, true, &methods_count);
+ REGISTER_MDESCS(bs_inf_prot_imethods);
+ methods = protocol_copyMethodDescriptionList(p, false, true, &methods_count);
+ REGISTER_MDESCS(bs_inf_prot_imethods);
+ methods = protocol_copyMethodDescriptionList(p, true, false, &methods_count);
+ REGISTER_MDESCS(bs_inf_prot_cmethods);
+ methods = protocol_copyMethodDescriptionList(p, false, false, &methods_count);
+ REGISTER_MDESCS(bs_inf_prot_cmethods);
+
+#undef REGISTER_MDESCS
+ }
+ free(prots);
+}
+
+static void
reload_class_constants(void)
{
static int class_count = 0;
@@ -2750,6 +2789,7 @@
rb_objc_search_and_load_bridge_support(cstr);
reload_class_constants();
+ reload_protocols();
return Qtrue;
}
Modified: MacRuby/trunk/test/ruby/test_objc.rb
===================================================================
--- MacRuby/trunk/test/ruby/test_objc.rb 2008-09-29 05:30:32 UTC (rev 641)
+++ MacRuby/trunk/test/ruby/test_objc.rb 2008-09-30 19:27:55 UTC (rev 642)
@@ -411,5 +411,15 @@
assert_equal(Module, Kernel.class)
assert_equal(Class, Class.new.class)
assert_equal(Module, Module.new.class)
- end
+ end
+
+ def test_protocol
+ o = Object.new
+ # TODO object should automatically conform to protocol when all mandatory methods are implemented.
+ #assert(!o.conformsToProtocol(Protocol.protocolWithName('NSMutableCopying')))
+ def o.mutableCopyWithZone(zone); self; end
+ #assert(o.conformsToProtocol(Protocol.protocolWithName('NSMutableCopying')))
+ assert_equal(o, o.mutableCopy)
+ assert_equal('^{_NSZone=}', o.methodSignatureForSelector('mutableCopyWithZone:').getArgumentTypeAtIndex(2))
+ end
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080930/79c53c12/attachment.html
More information about the macruby-changes
mailing list