diff --git a/Content/Code/TestProxyCall.uasset b/Content/Code/TestProxyCall.uasset new file mode 100644 index 0000000..3fa4439 Binary files /dev/null and b/Content/Code/TestProxyCall.uasset differ diff --git a/Content/LuaMachine_Tests.umap b/Content/LuaMachine_Tests.umap index 4b8164b..5d96cec 100644 Binary files a/Content/LuaMachine_Tests.umap and b/Content/LuaMachine_Tests.umap differ diff --git a/Content/LuaTestActor.uasset b/Content/LuaTestActor.uasset index a3e900b..868ad54 100644 Binary files a/Content/LuaTestActor.uasset and b/Content/LuaTestActor.uasset differ diff --git a/Content/Tests/TestMultiArgs.uasset b/Content/Tests/TestMultiArgs.uasset new file mode 100644 index 0000000..4c4a17d Binary files /dev/null and b/Content/Tests/TestMultiArgs.uasset differ diff --git a/Source/LuaMachine/Private/LuaState.cpp b/Source/LuaMachine/Private/LuaState.cpp index 7992657..244461b 100644 --- a/Source/LuaMachine/Private/LuaState.cpp +++ b/Source/LuaMachine/Private/LuaState.cpp @@ -687,13 +687,11 @@ int ULuaState::MetaTableFunction__call(lua_State *L) FLuaValue LuaValue = LuaState->ToLuaValue(i); *LuaProp->ContainerPtrToValuePtr(ArrayHelper.GetRawPtr(i - StackPointer)) = LuaValue; } - - break; } - continue; + break; } if (LuaProp->Struct != FLuaValue::StaticStruct()) - continue; + break; FLuaValue LuaValue = LuaState->ToLuaValue(StackPointer++); *LuaProp->ContainerPtrToValuePtr(Parameters) = LuaValue; @@ -738,6 +736,10 @@ int ULuaState::MetaTableFunction__call(lua_State *L) if (!Prop->HasAnyPropertyFlags(CPF_ReturnParm | CPF_OutParm)) continue; + // avoid input args (at all costs !) + if (Prop->HasAnyPropertyFlags(CPF_ConstParm | CPF_ReferenceParm)) + continue; + UStructProperty* LuaProp = Cast(Prop); if (!LuaProp) { @@ -758,13 +760,13 @@ int ULuaState::MetaTableFunction__call(lua_State *L) LuaState->FromLuaValue(*LuaValue); } - break; + } - continue; + break; } if (LuaProp->Struct != FLuaValue::StaticStruct()) - continue; + break; FLuaValue* LuaValue = LuaProp->ContainerPtrToValuePtr(Parameters); if (LuaValue)