macOS: Use [NSObject superclass] instead of class_getSuperclass
The former takes into account dynamically generated key-value-observing (KVO) subclasses, of the form NSKVONotifying_*, which would result in class_getSuperclass returning QNSWindow and recursing back to the original call site of qt_objcDynamicSuper. Change-Id: I4b8b1aa64d2834d9d1baa395c877319e99084bc8 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
3ea09e4474
commit
1be1ed014b
@ -223,7 +223,7 @@ ReturnType qt_msgSendSuper(id receiver, SEL selector, Args... args)
|
||||
|
||||
typedef ReturnType (*SuperFn)(objc_super *, SEL, Args...);
|
||||
SuperFn superFn = reinterpret_cast<SuperFn>(objc_msgSendSuper);
|
||||
objc_super sup = { receiver, class_getSuperclass(object_getClass(receiver)) };
|
||||
objc_super sup = { receiver, [receiver superclass] };
|
||||
return superFn(&sup, selector, args...);
|
||||
}
|
||||
|
||||
@ -236,7 +236,7 @@ ReturnType qt_msgSendSuper_stret(id receiver, SEL selector, Args... args)
|
||||
typedef void (*SuperStretFn)(ReturnType *, objc_super *, SEL, Args...);
|
||||
SuperStretFn superStretFn = reinterpret_cast<SuperStretFn>(objc_msgSendSuper_stret);
|
||||
|
||||
objc_super sup = { receiver, class_getSuperclass(object_getClass(receiver)) };
|
||||
objc_super sup = { receiver, [receiver superclass] };
|
||||
ReturnType ret;
|
||||
superStretFn(&ret, &sup, selector, args...);
|
||||
return ret;
|
||||
|
Loading…
x
Reference in New Issue
Block a user