summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Build.Tasks
diff options
context:
space:
mode:
authorkingces95 <kingces95@users.noreply.github.com>2017-04-10 02:48:54 -0400
committerStephane Delcroix <stephane@delcroix.org>2017-04-10 08:48:54 +0200
commit0f57733a38b9b9cacadcc885685c3eaa543f064e (patch)
tree7a5067580ac35286f1adb305dfb2db1d0eaef9c8 /Xamarin.Forms.Build.Tasks
parent5ea000a76d03a5328fe18761fbdf8b05e26a170b (diff)
downloadxamarin-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.cs2
-rw-r--r--Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs4
-rw-r--r--Xamarin.Forms.Build.Tasks/TypeDefinitionExtensions.cs1
-rw-r--r--Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs3
-rw-r--r--Xamarin.Forms.Build.Tasks/XamlCTask.cs3
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);