mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
9b1f3b16b0
Summary: Original commit changeset: 3ed8e78e31b0 Backing-out D25938851 (https://github.com/facebook/react-native/commit/69b3016171bb2f994dd4a62c34c2c4645b5a7d56) and D25935785 (https://github.com/facebook/react-native/commit/bdea479a1faa0f1f7d7c9d9162212cce94bc9720). Based on analysis documented in T83141606, I believe this issue should be fixed in JS. Additionally, this crash actually has nothing to do with (un)flattening or the differ; it is a side-effect of stale ShadowNodes being cloned, which I believe is either UB or a contract violation. Either way, it should probably be fixed either in JS, or in node cloning. So this isn't the right solution for this issue and should be reverted. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D25949569 fbshipit-source-id: 8cf1094a767da98fff4430da60d223412e029545
122 lines
3.7 KiB
C++
122 lines
3.7 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "ShadowViewMutation.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
ShadowViewMutation ShadowViewMutation::CreateMutation(ShadowView shadowView) {
|
|
return {
|
|
/* .type = */ Create,
|
|
/* .parentShadowView = */ {},
|
|
/* .oldChildShadowView = */ {},
|
|
/* .newChildShadowView = */ shadowView,
|
|
/* .index = */ -1,
|
|
};
|
|
}
|
|
|
|
ShadowViewMutation ShadowViewMutation::DeleteMutation(ShadowView shadowView) {
|
|
return {
|
|
/* .type = */ Delete,
|
|
/* .parentShadowView = */ {},
|
|
/* .oldChildShadowView = */ shadowView,
|
|
/* .newChildShadowView = */ {},
|
|
/* .index = */ -1,
|
|
};
|
|
}
|
|
|
|
ShadowViewMutation ShadowViewMutation::InsertMutation(
|
|
ShadowView parentShadowView,
|
|
ShadowView childShadowView,
|
|
int index) {
|
|
return {
|
|
/* .type = */ Insert,
|
|
/* .parentShadowView = */ parentShadowView,
|
|
/* .oldChildShadowView = */ {},
|
|
/* .newChildShadowView = */ childShadowView,
|
|
/* .index = */ index,
|
|
};
|
|
}
|
|
|
|
ShadowViewMutation ShadowViewMutation::RemoveMutation(
|
|
ShadowView parentShadowView,
|
|
ShadowView childShadowView,
|
|
int index) {
|
|
return {
|
|
/* .type = */ Remove,
|
|
/* .parentShadowView = */ parentShadowView,
|
|
/* .oldChildShadowView = */ childShadowView,
|
|
/* .newChildShadowView = */ {},
|
|
/* .index = */ index,
|
|
};
|
|
}
|
|
|
|
ShadowViewMutation ShadowViewMutation::UpdateMutation(
|
|
ShadowView oldChildShadowView,
|
|
ShadowView newChildShadowView) {
|
|
return {
|
|
/* .type = */ Update,
|
|
/* .parentShadowView = */ {},
|
|
/* .oldChildShadowView = */ oldChildShadowView,
|
|
/* .newChildShadowView = */ newChildShadowView,
|
|
/* .index = */ -1,
|
|
};
|
|
}
|
|
|
|
#if RN_DEBUG_STRING_CONVERTIBLE
|
|
|
|
std::string getDebugName(ShadowViewMutation const &mutation) {
|
|
switch (mutation.type) {
|
|
case ShadowViewMutation::Create:
|
|
return "Create";
|
|
case ShadowViewMutation::Delete:
|
|
return "Delete";
|
|
case ShadowViewMutation::Insert:
|
|
return "Insert";
|
|
case ShadowViewMutation::Remove:
|
|
return "Remove";
|
|
case ShadowViewMutation::Update:
|
|
return "Update";
|
|
}
|
|
}
|
|
|
|
std::vector<DebugStringConvertibleObject> getDebugProps(
|
|
ShadowViewMutation const &mutation,
|
|
DebugStringConvertibleOptions options) {
|
|
return {
|
|
mutation.oldChildShadowView.componentHandle
|
|
? DebugStringConvertibleObject{"oldChild",
|
|
getDebugDescription(
|
|
mutation.oldChildShadowView,
|
|
options)}
|
|
: DebugStringConvertibleObject{},
|
|
mutation.newChildShadowView.componentHandle
|
|
? DebugStringConvertibleObject{"newChild",
|
|
getDebugDescription(
|
|
mutation.newChildShadowView,
|
|
options)}
|
|
: DebugStringConvertibleObject{},
|
|
mutation.parentShadowView.componentHandle
|
|
? DebugStringConvertibleObject{"parent",
|
|
getDebugDescription(
|
|
mutation.parentShadowView,
|
|
options)}
|
|
: DebugStringConvertibleObject{},
|
|
mutation.index != -1
|
|
? DebugStringConvertibleObject{"index",
|
|
getDebugDescription(
|
|
mutation.index, options)}
|
|
: DebugStringConvertibleObject{},
|
|
};
|
|
}
|
|
|
|
#endif
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|