diff options
author | kingces95 <kingces95@users.noreply.github.com> | 2017-04-10 02:48:54 -0400 |
---|---|---|
committer | Stephane Delcroix <stephane@delcroix.org> | 2017-04-10 08:48:54 +0200 |
commit | 0f57733a38b9b9cacadcc885685c3eaa543f064e (patch) | |
tree | 7a5067580ac35286f1adb305dfb2db1d0eaef9c8 /Xamarin.Forms.Build.Tasks | |
parent | 5ea000a76d03a5328fe18761fbdf8b05e26a170b (diff) | |
download | xamarin-forms-0f57733a38b9b9cacadcc885685c3eaa543f064e.tar.gz xamarin-forms-0f57733a38b9b9cacadcc885685c3eaa543f064e.tar.bz2 xamarin-forms-0f57733a38b9b9cacadcc885685c3eaa543f064e.zip |
Do not emit implict_op if from/to are same type (#862)
Diffstat (limited to 'Xamarin.Forms.Build.Tasks')
-rw-r--r-- | Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs | 2 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs | 4 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs | 1 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs | 3 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/XamlCTask.cs | 3 |
5 files changed, 13 insertions, 0 deletions
diff --git a/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs b/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs index 1e441c97..5544b7ef 100644 --- a/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs +++ b/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs @@ -73,6 +73,7 @@ namespace Xamarin.Forms.Build.Tasks if (initCompRuntime == null) { Logger.LogString(2, " Creating empty {0}.__InitComponentRuntime ...", typeDef.Name); initCompRuntime = new MethodDefinition("__InitComponentRuntime", initComp.Attributes, initComp.ReturnType); + initCompRuntime.Body.InitLocals = true; Logger.LogLine(2, "done."); Logger.LogString(2, " Copying body of InitializeComponent to __InitComponentRuntime ...", typeDef.Name); initCompRuntime.Body = new MethodBody(initCompRuntime); @@ -116,6 +117,7 @@ namespace Xamarin.Forms.Build.Tasks } var body = new MethodBody(altCtor); + body.InitLocals = true; var il = body.GetILProcessor(); var br2 = Instruction.Create(OpCodes.Ldarg_0); var ret = Instruction.Create(OpCodes.Ret); diff --git a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs index 6f07b375..5cbf075d 100644 --- a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs +++ b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs @@ -480,6 +480,7 @@ namespace Xamarin.Forms.Build.Tasks new CustomAttribute (context.Module.ImportReference(compilerGeneratedCtor)) } }; + getter.Body.InitLocals = true; var il = getter.Body.GetILProcessor(); il.Emit(OpCodes.Ldarg_0); @@ -550,6 +551,7 @@ namespace Xamarin.Forms.Build.Tasks new CustomAttribute (module.ImportReference(compilerGeneratedCtor)) } }; + setter.Body.InitLocals = true; var il = setter.Body.GetILProcessor(); var lastProperty = properties.LastOrDefault(); @@ -640,6 +642,7 @@ namespace Xamarin.Forms.Build.Tasks new CustomAttribute (context.Module.ImportReference(compilerGeneratedCtor)) } }; + partGetter.Body.InitLocals = true; var il = partGetter.Body.GetILProcessor(); il.Emit(OpCodes.Ldarg_0); for (int j = 0; j < i; j++) { @@ -1142,6 +1145,7 @@ namespace Xamarin.Forms.Build.Tasks var loadTemplate = new MethodDefinition("LoadDataTemplate", MethodAttributes.Assembly | MethodAttributes.HideBySig, module.TypeSystem.Object); + loadTemplate.Body.InitLocals = true; anonType.Methods.Add(loadTemplate); var parentValues = new FieldDefinition("parentValues", FieldAttributes.Assembly, module.ImportReference(typeof (object[]))); diff --git a/Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs b/Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs index bd0b4b49..40bf3746 100644 --- a/Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs @@ -42,6 +42,7 @@ namespace Xamarin.Forms.Build.Tasks CallingConvention = MethodCallingConvention.Default, ImplAttributes = (MethodImplAttributes.IL | MethodImplAttributes.Managed) }; + ctor.Body.InitLocals = true; var IL = ctor.Body.GetILProcessor(); diff --git a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs index f862de3e..bc26b5ec 100644 --- a/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs @@ -246,6 +246,9 @@ namespace Xamarin.Forms.Build.Tasks public static MethodReference GetImplicitOperatorTo(this TypeReference fromType, TypeReference toType, ModuleDefinition module) { + if (TypeRefComparer.Default.Equals(fromType, toType)) + return null; + var implicitOperatorsOnFromType = fromType.GetMethods(md => md.IsPublic && md.IsStatic && md.IsSpecialName && md.Name == "op_Implicit", module); var implicitOperatorsOnToType = toType.GetMethods(md => md.IsPublic && md.IsStatic && md.IsSpecialName && md.Name == "op_Implicit", module); var implicitOperators = implicitOperatorsOnFromType.Concat(implicitOperatorsOnToType).ToList(); diff --git a/Xamarin.Forms.Build.Tasks/XamlCTask.cs b/Xamarin.Forms.Build.Tasks/XamlCTask.cs index 5503ccf0..f72c6558 100644 --- a/Xamarin.Forms.Build.Tasks/XamlCTask.cs +++ b/Xamarin.Forms.Build.Tasks/XamlCTask.cs @@ -152,6 +152,7 @@ namespace Xamarin.Forms.Build.Tasks else { Logger.LogString(2, " Creating empty {0}.__InitComponentRuntime ...", typeDef.Name); initCompRuntime = new MethodDefinition("__InitComponentRuntime", initComp.Attributes, initComp.ReturnType); + initCompRuntime.Body.InitLocals = true; Logger.LogLine(2, "done."); Logger.LogString(2, " Copying body of InitializeComponent to __InitComponentRuntime ...", typeDef.Name); initCompRuntime.Body = new MethodBody(initCompRuntime); @@ -160,6 +161,7 @@ namespace Xamarin.Forms.Build.Tasks iCRIl.Append(instr); initComp.Body.Instructions.Clear(); initComp.Body.GetILProcessor().Emit(OpCodes.Ret); + initComp.Body.InitLocals = true; typeDef.Methods.Add(initCompRuntime); Logger.LogLine(2, "done."); } @@ -245,6 +247,7 @@ namespace Xamarin.Forms.Build.Tasks try { var body = new MethodBody(initComp); var module = body.Method.Module; + body.InitLocals = true; var il = body.GetILProcessor(); il.Emit(OpCodes.Nop); |