public bool Initialize() { MethodInfo mi = typeof(ILGenerator).GetMethod( "Mono_GetCurrentOffset", BindingFlags.Static | BindingFlags.NonPublic); if (mi == null) { return(false); } get_il_offset_func = (GetILOffsetFunc)System.Delegate.CreateDelegate( typeof(GetILOffsetFunc), mi); mi = typeof(ModuleBuilder).GetMethod( "Mono_GetGuid", BindingFlags.Static | BindingFlags.NonPublic); if (mi == null) { return(false); } get_guid_func = (GetGuidFunc)System.Delegate.CreateDelegate( typeof(GetGuidFunc), mi); Location.DefineSymbolDocuments(this); return(true); }
public virtual void Emit() { if (Compiler.Settings.Target == Target.Module) { module_target_attrs = new AssemblyAttributesPlaceholder(module, name); module_target_attrs.CreateType(); module_target_attrs.DefineType(); module_target_attrs.Define(); module.AddCompilerGeneratedClass(module_target_attrs); } else if (added_modules != null) { ReadModulesAssemblyAttributes(); } if (Compiler.Settings.GenerateDebugInfo) { symbol_writer = new MonoSymbolWriter(file_name); // TODO: global variables Location.DefineSymbolDocuments(symbol_writer); SymbolWriter.symwriter = symbol_writer; } module.Emit(); if (module.HasExtensionMethod) { var pa = module.PredefinedAttributes.Extension; if (pa.IsDefined) { SetCustomAttribute(pa.Constructor, AttributeEncoder.Empty); } } if (!wrap_non_exception_throws_custom) { PredefinedAttribute pa = module.PredefinedAttributes.RuntimeCompatibility; if (pa.IsDefined && pa.ResolveBuilder()) { var prop = pa.GetProperty("WrapNonExceptionThrows", TypeManager.bool_type, Location.Null); if (prop != null) { AttributeEncoder encoder = new AttributeEncoder(); encoder.EncodeNamedPropertyArgument(prop, new BoolLiteral(true, Location.Null)); SetCustomAttribute(pa.Constructor, encoder.ToArray()); } } } // if (declarative_security != null) { //#if STATIC // foreach (var entry in declarative_security) { // Builder.__AddDeclarativeSecurity (entry); // } //#else // var args = new PermissionSet[3]; // declarative_security.TryGetValue (SecurityAction.RequestMinimum, out args[0]); // declarative_security.TryGetValue (SecurityAction.RequestOptional, out args[1]); // declarative_security.TryGetValue (SecurityAction.RequestRefuse, out args[2]); // builder_extra.AddPermissionRequests (args); //#endif // } CheckReferencesPublicToken(); SetEntryPoint(); }