зеркало из https://github.com/DeGsoft/maui-linux.git
24 строки
921 B
C#
24 строки
921 B
C#
using Mono.Cecil;
|
|
using Mono.Cecil.Cil;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Xamarin.Forms.Build.Tasks
|
|
{
|
|
static class VariableDefinitionExtensions
|
|
{
|
|
public static IEnumerable<Instruction> LoadAs(this VariableDefinition self, TypeReference type, ModuleDefinition module)
|
|
{
|
|
var implicitOperator = self.VariableType.GetImplicitOperatorTo(type, module);
|
|
|
|
yield return Instruction.Create(OpCodes.Ldloc, self);
|
|
|
|
if (!self.VariableType.InheritsFromOrImplements(type) && implicitOperator != null)
|
|
yield return Instruction.Create(OpCodes.Call, module.ImportReference(implicitOperator));
|
|
else if (self.VariableType.IsValueType && !type.IsValueType)
|
|
yield return Instruction.Create(OpCodes.Box, module.ImportReference(self.VariableType));
|
|
else if (!self.VariableType.IsValueType && type.IsValueType)
|
|
yield return Instruction.Create(OpCodes.Unbox_Any, module.ImportReference(type));
|
|
}
|
|
}
|
|
}
|