@@ -341,13 +341,26 @@ throw JSError(runtime,
341341 " Objective-C selector requires a native receiver." );
342342 }
343343
344- NativeApiSelectorGroupCallTarget callTarget = selectorGroupMemberForCall (
345- receiver, selectorLookupClass, receiverIsClass, entry, count);
346- const std::string& selectorName = *callTarget.selectorName ;
347- const NativeApiMember* selectedMember = callTarget.member ;
348- if (prepared != nullptr && prepared->selectorName != selectorName) {
349- prepared = nullptr ;
344+ const bool propertyGetterCall =
345+ entry.hasMember && entry.member .property && count == 0 ;
346+ const std::string* selectorNamePtr = &entry.selectorName ;
347+ const NativeApiMember* selectedMember =
348+ entry.hasMember ? &entry.member : nullptr ;
349+ bool callTargetCanPrepare = true ;
350+ if (prepared == nullptr || propertyGetterCall) {
351+ NativeApiSelectorGroupCallTarget callTarget =
352+ selectorGroupCallTargetForEntry (receiver, selectorLookupClass,
353+ receiverIsClass, entry, count);
354+ selectorNamePtr = callTarget.selectorName ;
355+ selectedMember = callTarget.member ;
356+ callTargetCanPrepare = callTarget.canPrepare ;
357+ if (prepared != nullptr && prepared->selectorName != *selectorNamePtr) {
358+ prepared = nullptr ;
359+ }
350360 }
361+ const std::string& selectorName =
362+ prepared != nullptr && !propertyGetterCall ? prepared->selectorName
363+ : *selectorNamePtr;
351364
352365 if (receiverIsClass) {
353366 Class methodClass = prepared != nullptr ? prepared->receiverClass : Nil ;
@@ -365,8 +378,7 @@ throw JSError(runtime,
365378 selectorLookupClass = methodClass;
366379 receiver = static_cast <id >(methodClass);
367380 }
368- if (entry.hasMember && entry.member .property && count == 0 &&
369- !callTarget.canPrepare ) {
381+ if (propertyGetterCall && !callTargetCanPrepare) {
370382 return callObjCSelector (runtime, bridge, receiver, receiverIsClass,
371383 selectorName, selectedMember, nullptr , 0 );
372384 }
0 commit comments