From 7b65131fb52d3815c179c90f6d3a325872add654 Mon Sep 17 00:00:00 2001 From: Jarl Gullberg Date: Mon, 29 May 2017 22:05:07 +0200 Subject: [PATCH] Pulled repeated logic out into a helper method. --- src/Generator.Rewrite/Program.cs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Generator.Rewrite/Program.cs b/src/Generator.Rewrite/Program.cs index dd50760..d1a7d98 100644 --- a/src/Generator.Rewrite/Program.cs +++ b/src/Generator.Rewrite/Program.cs @@ -140,7 +140,7 @@ namespace OpenTK.Rewrite } // Save rewritten assembly - assembly.Write(write_params); + assembly.Write(write_params); } } @@ -516,27 +516,40 @@ namespace OpenTK.Rewrite } static void EmitParameterEpilogues(MethodDefinition wrapper, MethodDefinition native, MethodBody body, ILProcessor il, - List generatedVariables) + IReadOnlyCollection generatedVariables) { foreach (var p in wrapper.Parameters) { if (p.ParameterType.Name == "StringBuilder") { - EmitStringBuilderEpilogue(wrapper, native, p, body, il, generatedVariables.FirstOrDefault(v => v.Name == p.Name + "_sb_ptr" && v.Body == body && body.Variables.Contains(v.Definition))); + EmitStringBuilderEpilogue(wrapper, native, p, body, il, GetGeneratedVariable(generatedVariables, p.Name + "_sb_ptr", body)); } if (!p.ParameterType.IsArray && p.ParameterType.Name == "String") { - EmitStringEpilogue(wrapper, p, body, il, generatedVariables.FirstOrDefault(v => v.Name == p.Name + "_string_ptr" && v.Body == body && body.Variables.Contains(v.Definition))); + EmitStringEpilogue(wrapper, p, body, il,GetGeneratedVariable(generatedVariables, p.Name + "_string_ptr", body)); } if (p.ParameterType.IsArray && p.ParameterType.GetElementType().Name == "String") { - EmitStringArrayEpilogue(wrapper, p, body, il, generatedVariables.FirstOrDefault(v => v.Name == p.Name + "_string_array_ptr" && v.Body == body && body.Variables.Contains(v.Definition))); + EmitStringArrayEpilogue(wrapper, p, body, il, GetGeneratedVariable(generatedVariables, p.Name + "_string_array_ptr", body)); } } } + /// + /// Retrieves a generated variable by searching the given list by the variable's name and associated method body. + /// + /// + /// + /// + /// + static GeneratedVariableIdentifier GetGeneratedVariable(IEnumerable variableIdentifiers, string name, MethodBody body) + { + return variableIdentifiers.FirstOrDefault(v => v.Name == name && v.Body == body && + body.Variables.Contains(v.Definition)); + } + static GeneratedVariableIdentifier EmitStringBuilderParameter(MethodDefinition method, ParameterDefinition parameter, MethodBody body, ILProcessor il) { var p = parameter.ParameterType; -- 2.7.4