diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-03-12 01:01:52 -0500 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-03-12 01:01:52 -0500 |
commit | 3663f70603fae8ed34e1e0c7500adc2c899312a5 (patch) | |
tree | 4df5bbdee93c16aaa50d3244a8149cc3356f472b /src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs | |
parent | 95e519796773a2ef17ec482e27cd4403282e2cd1 (diff) | |
download | SMAPI-3663f70603fae8ed34e1e0c7500adc2c899312a5.tar.gz SMAPI-3663f70603fae8ed34e1e0c7500adc2c899312a5.tar.bz2 SMAPI-3663f70603fae8ed34e1e0c7500adc2c899312a5.zip |
split IInstructionFinder from IInstructionRewriter (#247)
Diffstat (limited to 'src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs')
-rw-r--r-- | src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs b/src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs new file mode 100644 index 00000000..96e8b1c0 --- /dev/null +++ b/src/StardewModdingAPI.AssemblyRewriters/Framework/BaseFieldFinder.cs @@ -0,0 +1,32 @@ +using Mono.Cecil; +using Mono.Cecil.Cil; + +namespace StardewModdingAPI.AssemblyRewriters.Framework +{ + /// <summary>Base class for a field finder.</summary> + public abstract class BaseFieldFinder : IInstructionFinder + { + /********* + ** Public methods + *********/ + /// <summary>Get whether a CIL instruction matches.</summary> + /// <param name="instruction">The IL instruction.</param> + /// <param name="platformChanged">Whether the mod was compiled on a different platform.</param> + public bool IsMatch(Instruction instruction, bool platformChanged) + { + if (instruction.OpCode != OpCodes.Ldfld && instruction.OpCode != OpCodes.Ldsfld && instruction.OpCode != OpCodes.Stfld && instruction.OpCode != OpCodes.Stsfld) + return false; // not a field reference + return this.IsMatch(instruction, (FieldReference)instruction.Operand, platformChanged); + } + + + /********* + ** Protected methods + *********/ + /// <summary>Get whether a field reference should be rewritten.</summary> + /// <param name="instruction">The IL instruction.</param> + /// <param name="fieldRef">The field reference.</param> + /// <param name="platformChanged">Whether the mod was compiled on a different platform.</param> + protected abstract bool IsMatch(Instruction instruction, FieldReference fieldRef, bool platformChanged); + } +} |