From e9fa76c34a8a31bd0db1623fe60756b7bba0313f Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 10 Feb 2023 13:37:02 +0100 Subject: [PATCH] Fix RPC codegen --- .../Build/Plugins/NetworkingPlugin.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs b/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs index 449eb2188..fcc1ca83b 100644 --- a/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs +++ b/Source/Tools/Flax.Build/Build/Plugins/NetworkingPlugin.cs @@ -1360,7 +1360,9 @@ namespace Flax.Build.Plugins var jumpIfBodyStart = il.Create(OpCodes.Nop); // if block body var jumpIf2Start = il.Create(OpCodes.Nop); // 2nd part of the if var jumpBodyStart = il.Create(OpCodes.Nop); // original method body start - var jumpBodyEnd = il.Body.Instructions.First(x => x.OpCode == OpCodes.Ret); + var jumpBodyEnd = il.Body.Instructions.Last(x => x.OpCode == OpCodes.Ret && x.Previous != null); + if (jumpBodyEnd == null) + throw new Exception("Missing IL Return op code in method " + method.Name); il.InsertBefore(ilStart, il.Create(OpCodes.Ldloc, varsStart + 0)); il.InsertBefore(ilStart, il.Create(OpCodes.Brfalse_S, jumpIf2Start)); il.InsertBefore(ilStart, il.Create(OpCodes.Ldloc, varsStart + 2)); @@ -1410,7 +1412,13 @@ namespace Flax.Build.Plugins il.InsertBefore(ilStart, il.Create(OpCodes.Nop)); il.InsertBefore(ilStart, il.Create(OpCodes.Ldloc, varsStart + 2)); il.InsertBefore(ilStart, il.Create(OpCodes.Ldc_I4_2)); - il.InsertBefore(ilStart, il.Create(OpCodes.Beq_S, jumpBodyEnd)); + var tmp = il.Create(OpCodes.Nop); + il.InsertBefore(ilStart, il.Create(OpCodes.Beq_S, tmp)); + il.InsertBefore(ilStart, il.Create(OpCodes.Br, jumpBodyStart)); + il.InsertBefore(ilStart, tmp); + //il.InsertBefore(ilStart, il.Create(OpCodes.Ret)); + il.InsertBefore(ilStart, il.Create(OpCodes.Br, jumpBodyEnd)); + } // if (client && networkMode == NetworkManagerMode.Server) return; @@ -1419,7 +1427,12 @@ namespace Flax.Build.Plugins il.InsertBefore(ilStart, il.Create(OpCodes.Nop)); il.InsertBefore(ilStart, il.Create(OpCodes.Ldloc, varsStart + 2)); il.InsertBefore(ilStart, il.Create(OpCodes.Ldc_I4_1)); - il.InsertBefore(ilStart, il.Create(OpCodes.Beq_S, jumpBodyEnd)); + var tmp = il.Create(OpCodes.Nop); + il.InsertBefore(ilStart, il.Create(OpCodes.Beq_S, tmp)); + il.InsertBefore(ilStart, il.Create(OpCodes.Br, jumpBodyStart)); + il.InsertBefore(ilStart, tmp); + //il.InsertBefore(ilStart, il.Create(OpCodes.Ret)); + il.InsertBefore(ilStart, il.Create(OpCodes.Br, jumpBodyEnd)); } // Continue to original method body