@@ -521,6 +521,7 @@ bool signatureSupportedForEngineInvocation(
521521 SEL selector = nullptr ;
522522 Class receiverClass = Nil ;
523523 std::string selectorName;
524+ std::string propertySetterName;
524525 NativeApiSignature signature;
525526 ObjCPreparedInvoker preparedInvoker = nullptr ;
526527 void * engineInvoker = nullptr ; // Engine-neutral GSD invoker (ObjCGsdInvoker)
@@ -539,6 +540,17 @@ bool preparedObjCInvocationIsInit(
539540 return prepared.isInitMethod ;
540541}
541542
543+ void cachePreparedAppearanceProxySetterValue (
544+ Runtime& runtime, const std::shared_ptr<NativeApiBridge>& bridge,
545+ id receiver, const NativeApiPreparedObjCInvocation& prepared,
546+ const Value* args, size_t count) {
547+ if (prepared.propertySetterName .empty () || args == nullptr || count == 0 ) {
548+ return ;
549+ }
550+ cacheAppearanceProxyPropertyValue (runtime, bridge, receiver,
551+ prepared.propertySetterName , args[0 ]);
552+ }
553+
542554bool isFastEngineObjectType (const NativeApiType& type) {
543555 switch (type.kind ) {
544556 case metagen::mdTypeAnyObject:
@@ -1472,6 +1484,12 @@ throw JSError(
14721484 prepared->selector = selector;
14731485 prepared->receiverClass = receiverIsClass ? lookupClass : Nil ;
14741486 prepared->selectorName = selectorName;
1487+ if (member != nullptr && member->property && !member->name .empty () &&
1488+ !member->setterSelectorName .empty () &&
1489+ selectorName == member->setterSelectorName &&
1490+ selectorArgumentCount (selectorName) == 1 ) {
1491+ prepared->propertySetterName = member->name ;
1492+ }
14751493 prepared->signature = std::move (*signature);
14761494 prepared->preparedInvoker = lookupObjCPreparedInvoker (
14771495 dispatchIdForEngineSignature (prepared->signature ,
@@ -1531,11 +1549,15 @@ throw JSError(runtime,
15311549 if (tryCallGeneratedEngineObjCSelector (runtime, bridge, receiver, prepared,
15321550 args, count, dispatchSuperClass,
15331551 &fastResult)) {
1552+ cachePreparedAppearanceProxySetterValue (runtime, bridge, receiver,
1553+ prepared, args, count);
15341554 return tagPreparedStaticAppearanceSelectorResult (
15351555 runtime, bridge, receiver, prepared, std::move (fastResult));
15361556 }
15371557 if (tryCallFastEngineObjCSelector (runtime, bridge, receiver, prepared, args,
15381558 count, dispatchSuperClass, &fastResult)) {
1559+ cachePreparedAppearanceProxySetterValue (runtime, bridge, receiver,
1560+ prepared, args, count);
15391561 return tagPreparedStaticAppearanceSelectorResult (
15401562 runtime, bridge, receiver, prepared, std::move (fastResult));
15411563 }
@@ -1624,6 +1646,8 @@ NativeApiReturnStorage returnStorage(
16241646 throw JSError (
16251647 runtime, errorMessage != nullptr ? errorMessage : " Unknown NSError" );
16261648 }
1649+ cachePreparedAppearanceProxySetterValue (runtime, bridge, receiver, prepared,
1650+ args, count);
16271651 Value result = convertNativeReturnValue (runtime, bridge, returnType,
16281652 returnStorage.data ());
16291653 return tagPreparedStaticAppearanceSelectorResult (
0 commit comments