Skip to content

Commit 5eaaa3b

Browse files
修正:特定情况下在Lua中调用TArray的Add接口时内存对齐引起的问题 Tencent#668
1 parent 65123c2 commit 5eaaa3b

File tree

3 files changed

+5
-21
lines changed

3 files changed

+5
-21
lines changed

Plugins/UnLua/Source/UnLua/Private/ReflectionUtils/PropertyDesc.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,16 +1183,15 @@ class FScriptStructPropertyDesc : public FStructPropertyDesc
11831183
explicit FScriptStructPropertyDesc(FProperty *InProperty)
11841184
: FStructPropertyDesc(InProperty), StructName(*UnLua::LowLevel::GetMetatableName(StructProperty->Struct))
11851185
{
1186-
StructSize = UnLua::LowLevel::CalculateSize(StructProperty->Struct);
1186+
const auto ScriptStruct = CastChecked<UScriptStruct>(StructProperty->Struct);
1187+
const auto CppStructOps = ScriptStruct->GetCppStructOps();
1188+
StructSize = CppStructOps ? CppStructOps->GetSize() : ScriptStruct->GetStructureSize();
11871189
UserdataPadding = UnLua::LowLevel::CalculateUserdataPadding(StructProperty->Struct);
11881190
}
11891191

1190-
FScriptStructPropertyDesc(FProperty *InProperty, bool bDynamicallyCreated)
1191-
: FStructPropertyDesc(InProperty), StructName(*UnLua::LowLevel::GetMetatableName(StructProperty->Struct))
1192+
virtual int32 GetSize() const override
11921193
{
1193-
StructSize = UnLua::LowLevel::CalculateSize(StructProperty->Struct);
1194-
UserdataPadding = UnLua::LowLevel::CalculateUserdataPadding(StructProperty->Struct);
1195-
bFirstPropOfScriptStruct = false;
1194+
return StructSize;
11961195
}
11971196

11981197
virtual bool CopyBack(lua_State *L, int32 SrcIndexInStack, void *DestContainerPtr) override

Plugins/UnLua/Source/UnLua/Public/LowLevel.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -207,19 +207,6 @@ namespace UnLua
207207
return Userdata;
208208
}
209209

210-
int32 CalculateSize(UStruct* Struct)
211-
{
212-
if (Struct->IsA(UScriptStruct::StaticClass()))
213-
return Struct->GetStructureSize();
214-
215-
const auto ScriptStruct = Cast<UScriptStruct>(Struct);
216-
if (!ScriptStruct)
217-
return 0;
218-
219-
const auto CppStructOps = ScriptStruct->GetCppStructOps();
220-
return CppStructOps ? CppStructOps->GetSize() : ScriptStruct->GetStructureSize();
221-
}
222-
223210
uint8 CalculateUserdataPadding(UStruct* Struct)
224211
{
225212
const auto ScriptStruct = Cast<UScriptStruct>(Struct);

Plugins/UnLua/Source/UnLua/Public/LowLevel.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ namespace UnLua
6868

6969
void* GetUserdata(lua_State* L, int32 Index, bool* OutTwoLvlPtr = nullptr, bool *OutClassMetatable = nullptr);
7070

71-
int32 CalculateSize(UStruct* Struct);
72-
7371
uint8 CalculateUserdataPadding(UStruct* Struct);
7472
}
7573
}

0 commit comments

Comments
 (0)