From 5d40cf373dcefdac51ea35d3e63251cc1887e57b Mon Sep 17 00:00:00 2001 From: sirhamsteralot Date: Wed, 25 Dec 2019 23:22:22 +0100 Subject: [PATCH] injecting of fields -- equinox --- .../Managers/PatchManager/DecoratedMethod.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Torch/Managers/PatchManager/DecoratedMethod.cs b/Torch/Managers/PatchManager/DecoratedMethod.cs index 8c2e120..7166e6e 100644 --- a/Torch/Managers/PatchManager/DecoratedMethod.cs +++ b/Torch/Managers/PatchManager/DecoratedMethod.cs @@ -364,7 +364,24 @@ namespace Torch.Managers.PatchManager break; } - ParameterInfo declParam = _method.GetParameters().FirstOrDefault(x => x.Name == param.Name); + if (param.Name.StartsWith("__field_")) + { + var fieldName = param.Name.Substring(8); + var fieldDef = _method.DeclaringType.GetFields().FirstOrDefault(x => x.Name == fieldName); + if (fieldDef == null) throw new Exception($"Could not find field {fieldName}"); + if (fieldDef.IsStatic) + yield return new MsilInstruction(param.ParameterType.IsByRef ? OpCodes.Ldsflda : OpCodes.Ldsfld) + .InlineValue(fieldDef); + else + { + yield return new MsilInstruction(OpCodes.Ldarg_0); + yield return new MsilInstruction(param.ParameterType.IsByRef ? OpCodes.Ldflda : OpCodes.Ldfld) + .InlineValue(fieldDef); + } + break; + } + + ParameterInfo declParam = _method.GetParameters().FirstOrDefault(x => x.Name == param.Name); if (declParam == null) throw new Exception($"Parameter name {param.Name} not found"); int paramIdx = (_method.IsStatic ? 0 : 1) + declParam.Position;