injecting of fields -- equinox

This commit is contained in:
sirhamsteralot
2019-12-25 23:22:22 +01:00
parent 9cbcc3ed85
commit 5d40cf373d

View File

@@ -364,6 +364,23 @@ namespace Torch.Managers.PatchManager
break; break;
} }
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); ParameterInfo declParam = _method.GetParameters().FirstOrDefault(x => x.Name == param.Name);
if (declParam == null) if (declParam == null)
throw new Exception($"Parameter name {param.Name} not found"); throw new Exception($"Parameter name {param.Name} not found");