bool TryCoreCompile(MethodDefinition initComp, ILRootNode rootnode, string embeddedResourceNameSpace, out Exception exception) { try { var body = new MethodBody(initComp); var module = body.Method.Module; var type = initComp.DeclaringType; MethodDefinition constructorOfRemoveEventsType; TypeDefinition typeOfRemoveEvents = CreateTypeForRemoveEvents(type, out constructorOfRemoveEventsType); var field = type.GetOrCreateField("___Info_Of_RemoveEvent___", FieldAttributes.Private, typeOfRemoveEvents); body.InitLocals = true; var il = body.GetILProcessor(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Newobj, constructorOfRemoveEventsType); il.Emit(OpCodes.Stfld, field); var resourcePath = GetPathForType(module, type); il.Emit(Nop); List <Instruction> insOfAddEvent = new List <Instruction>(); var visitorContext = new ILContext(il, body, insOfAddEvent, module, embeddedResourceNameSpace); rootnode.Accept(new XamlNodeVisitor((node, parent) => node.Parent = parent), null); rootnode.Accept(new ExpandMarkupsVisitor(visitorContext), null); rootnode.Accept(new PruneIgnoredNodesVisitor(), null); rootnode.Accept(new CreateObjectVisitor(visitorContext), null); Set(visitorContext, visitorContext.Variables[rootnode], "IsCreateByXaml", new ValueNode("true", rootnode.NamespaceResolver), null); rootnode.Accept(new SetNamescopesAndRegisterNamesVisitor(visitorContext), null); rootnode.Accept(new SetFieldVisitor(visitorContext), null); rootnode.Accept(new SetResourcesVisitor(visitorContext), null); rootnode.Accept(new SetPropertiesVisitor(visitorContext, true), null); AddInsOfRemoveEvent(il, visitorContext.InsOfAddEvent, typeOfRemoveEvents); il.Emit(Ret); initComp.Body = body; exception = null; return(true); } catch (Exception e) { XamlParseException xamlParseException = e as XamlParseException; if (null != xamlParseException) { XamlParseException ret = new XamlParseException(xamlParseException.Message + "\n" + ReferencePath, xamlParseException.XmlInfo, xamlParseException.InnerException); exception = ret; } else { exception = e; } return(false); } }
bool TryCoreCompile(MethodDefinition initComp, MethodDefinition initCompRuntime, ILRootNode rootnode, out Exception exception) { try { var body = new MethodBody(initComp); var module = body.Method.Module; body.InitLocals = true; var il = body.GetILProcessor(); var resourcePath = GetPathForType(module, initComp.DeclaringType); //resourcePath = null; il.Emit(Nop); if (initCompRuntime != null) { // Generating branching code for the Previewer //First using the ResourceLoader //var nop = Instruction.Create(Nop); //var getResourceProvider = module.ImportPropertyGetterReference((tizenNUIAssemblyName, "Tizen.NUI.XamlBinding.Internals", "ResourceLoader"), "ResourceProvider", isStatic: true); //il.Emit(Call, getResourceProvider); //il.Emit(Brfalse, nop); // il.Emit(Call, getResourceProvider); // //var getResourceProvider123 = module.ImportPropertyGetterReference((tizenNUIAssemblyName, "Tizen.NUI.XamlBinding.Internals", "ResourceLoader"), "ResourceProvider123", isStatic: true); // //il.Emit(Call, getResourceProvider123); // il.Emit(Ldtoken, module.ImportReference(initComp.DeclaringType)); //il.Emit(Call, module.ImportMethodReference(("mscorlib", "System", "Type"), methodName: "GetTypeFromHandle", parameterTypes: new[] { ("mscorlib", "System", "RuntimeTypeHandle") }, isStatic: true)); //il.Emit(Call, module.ImportMethodReference(("mscorlib", "System.Reflection", "IntrospectionExtensions"), methodName: "GetTypeInfo", parameterTypes: new[] { ("mscorlib", "System", "Type") }, isStatic: true)); //il.Emit(Callvirt, module.ImportPropertyGetterReference(("mscorlib", "System.Reflection", "TypeInfo"), propertyName: "Assembly", flatten: true)); //il.Emit(Callvirt, module.ImportMethodReference(("mscorlib", "System.Reflection", "Assembly"), methodName: "GetName", parameterTypes: null)); //assemblyName //il.Emit(Ldstr, resourcePath); //resourcePath //il.Emit(Callvirt, module.ImportMethodReference(("mscorlib", "System", "Func`3"), // methodName: "Invoke", // paramCount: 2, // classArguments: new[] { ("mscorlib", "System.Reflection", "AssemblyName"), ("mscorlib", "System", "String"), ("mscorlib", "System", "String") })); //il.Emit(Brfalse, nop); //il.Emit(Ldarg_0); //il.Emit(Call, initCompRuntime); //il.Emit(Ret); //il.Append(nop); //Or using the deprecated XamlLoader //nop = Instruction.Create(Nop); //var getXamlFileProvider = module.ImportPropertyGetterReference((tizenNUIAssemblyName, "Tizen.NUI.Xaml.Internals", "XamlLoader"), propertyName: "XamlFileProvider", isStatic: true); //il.Emit(Call, getXamlFileProvider); //il.Emit(Brfalse, nop); //il.Emit(Call, getXamlFileProvider); //il.Emit(Ldarg_0); //il.Emit(Call, module.ImportMethodReference(("mscorlib", "System", "Object"), methodName: "GetType", parameterTypes: null)); //il.Emit(Callvirt, module.ImportMethodReference(("mscorlib", "System", "Func`2"), // methodName: "Invoke", // paramCount: 1, // classArguments: new[] { ("mscorlib", "System", "Type"), ("mscorlib", "System", "String") })); //il.Emit(Brfalse, nop); //il.Emit(Ldarg_0); //il.Emit(Call, initCompRuntime); //il.Emit(Ret); //il.Append(nop); } var visitorContext = new ILContext(il, body, module); rootnode.Accept(new XamlNodeVisitor((node, parent) => node.Parent = parent), null); rootnode.Accept(new ExpandMarkupsVisitor(visitorContext), null); rootnode.Accept(new PruneIgnoredNodesVisitor(), null); rootnode.Accept(new CreateObjectVisitor(visitorContext), null); rootnode.Accept(new SetNamescopesAndRegisterNamesVisitor(visitorContext), null); rootnode.Accept(new SetFieldVisitor(visitorContext), null); rootnode.Accept(new SetResourcesVisitor(visitorContext), null); rootnode.Accept(new SetPropertiesVisitor(visitorContext, true), null); il.Emit(Ret); initComp.Body = body; exception = null; return(true); } catch (Exception e) { exception = e; return(false); } }