Revision: 754 http://trac.macosforge.org/projects/ruby/changeset/754 Author: lsansonetti@apple.com Date: 2008-11-23 20:50:29 -0800 (Sun, 23 Nov 2008) Log Message: ----------- fixing a regression when super'ing objc methods (thanks Satoshi-san for noticing it) Modified Paths: -------------- MacRuby/trunk/insns.def MacRuby/trunk/objc.m MacRuby/trunk/vm_insnhelper.c Modified: MacRuby/trunk/insns.def =================================================================== --- MacRuby/trunk/insns.def 2008-11-24 02:43:58 UTC (rev 753) +++ MacRuby/trunk/insns.def 2008-11-24 04:50:29 UTC (rev 754) @@ -1085,16 +1085,12 @@ VALUE recv, klass; NODE *mn; ID id; - IMP imp; SEL sel; const VALUE flag = VM_CALL_SUPER_BIT | VM_CALL_FCALL_BIT; recv = GET_SELF(); - mn = NULL; imp = NULL; sel = 0; - vm_search_superclass(GET_CFP(), GET_ISEQ(), recv, TOPN(num), &id, &klass, &mn, &imp, &sel); -#if !WITH_OBJC - mn = rb_method_node(klass, id); -#endif + vm_search_superclass(GET_CFP(), GET_ISEQ(), recv, TOPN(num), &id, &klass); + mn = rb_objc_method_node(klass, id, NULL, &sel); #if WITH_OBJC struct rb_method_cache mcache; Modified: MacRuby/trunk/objc.m =================================================================== --- MacRuby/trunk/objc.m 2008-11-24 02:43:58 UTC (rev 753) +++ MacRuby/trunk/objc.m 2008-11-24 04:50:29 UTC (rev 754) @@ -1251,7 +1251,10 @@ id exception = nil; //UNLOCK_GIL(); @try { - if (klass == RCLASS_SUPER(*(Class *)ocrcv)) { + if (klass == *(VALUE *)ocrcv) { + ffi_ret = objc_msgSend(ocrcv, sel); + } + else { struct objc_super s; s.receiver = ocrcv; #if defined(__LP64__) @@ -1261,9 +1264,6 @@ #endif ffi_ret = objc_msgSendSuper(&s, sel); } - else { - ffi_ret = objc_msgSend(ocrcv, sel); - } } @catch (id e) { exception = e; Modified: MacRuby/trunk/vm_insnhelper.c =================================================================== --- MacRuby/trunk/vm_insnhelper.c 2008-11-24 02:43:58 UTC (rev 753) +++ MacRuby/trunk/vm_insnhelper.c 2008-11-24 04:50:29 UTC (rev 754) @@ -1436,6 +1436,7 @@ bool klass_located; ary = rb_mod_ancestors_nocopy(CLASS_OF(recv)); + count = RARRAY_LEN(ary); k = klass; for (i = 0, klass_located = false; i < count; i++) { @@ -1496,7 +1497,7 @@ static void vm_search_superclass(rb_control_frame_t *reg_cfp, rb_iseq_t *ip, VALUE recv, VALUE sigval, - ID *idp, VALUE *klassp, NODE **mnp, IMP *impp, SEL *selp) + ID *idp, VALUE *klassp) { ID id; VALUE klass;
participants (1)
-
source_changes@macosforge.org