[NUI] Add Tizen.NUI.XamlBuild module
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / public / XamlBuild / CompiledConverters / ConstraintTypeConverter.cs
1 using System.Collections.Generic;
2 using System.Data;
3 using System.Globalization;
4
5 using Mono.Cecil.Cil;
6
7 using Tizen.NUI.Xaml;
8 using Tizen.NUI.Xaml.Build.Tasks;
9
10 using static Mono.Cecil.Cil.Instruction;
11 using static Mono.Cecil.Cil.OpCodes;
12
13 namespace Tizen.NUI.Xaml.Core.XamlC
14 {
15     class ConstraintTypeConverter : ICompiledTypeConverter
16     {
17         public IEnumerable<Instruction> ConvertFromString(string value, ILContext context, BaseNode node)
18         {
19             var module = context.Body.Method.Module;
20
21             double size;
22
23             if (string.IsNullOrEmpty(value) || !double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out size))
24                 throw new XamlParseException($"Cannot convert \"{value}\" into {typeof(Constraint)}", node);
25
26             yield return Create(Ldc_R8, size);
27             yield return Create(Call, module.ImportMethodReference((XamlTask.nuiAssemblyName, XamlTask.nuiNameSpace, "Constraint"),
28                                                                    methodName: "Constant",
29                                                                    parameterTypes: new[] { ("mscorlib", "System", "Double") },
30                                                                    isStatic: true));
31         }
32     }
33 }