You've already forked linux-packaging-mono
Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
parent
e49d6f06c0
commit
536cd135cc
@ -35,6 +35,7 @@ namespace System.Reflection.Emit
|
||||
[ComVisible (true)]
|
||||
[Serializable]
|
||||
[Flags]
|
||||
#region Sync with sre-internals.h
|
||||
public enum AssemblyBuilderAccess {
|
||||
Run = 1,
|
||||
Save = 2,
|
||||
@ -42,4 +43,5 @@ namespace System.Reflection.Emit
|
||||
ReflectionOnly = 6,
|
||||
RunAndCollect = 9
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ namespace System.Reflection.Emit {
|
||||
}
|
||||
|
||||
[MethodImplAttribute(MethodImplOptions.InternalCall)]
|
||||
private extern void create_dynamic_method (DynamicMethod m);
|
||||
private static extern void create_dynamic_method (DynamicMethod m);
|
||||
|
||||
private void CreateDynMethod () {
|
||||
if (mhandle.Value == IntPtr.Zero) {
|
||||
|
@ -71,6 +71,9 @@ namespace System.Reflection.Emit {
|
||||
return _tb.InternalResolve ();
|
||||
}
|
||||
|
||||
internal override Type RuntimeResolve () {
|
||||
return _tb.RuntimeResolve ();
|
||||
}
|
||||
|
||||
public override Assembly Assembly {
|
||||
get {
|
||||
|
@ -87,7 +87,7 @@ namespace System.Reflection.Emit
|
||||
internal override Type InternalResolve ()
|
||||
{
|
||||
if (mbuilder != null)
|
||||
return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal).GetGenericArguments () [index];
|
||||
return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal, mbuilder.TypeBuilder.InternalResolve ().TypeHandle).GetGenericArguments () [index];
|
||||
return tbuilder.InternalResolve ().GetGenericArguments () [index];
|
||||
}
|
||||
|
||||
|
@ -814,7 +814,7 @@ namespace System.Reflection.Emit {
|
||||
make_room (6);
|
||||
ll_emit (opcode);
|
||||
int token = token_gen.GetToken (cls, opcode != OpCodes.Ldtoken);
|
||||
if (cls is TypeBuilderInstantiation || cls is SymbolType || cls is TypeBuilder || cls is GenericTypeParameterBuilder)
|
||||
if (cls is TypeBuilderInstantiation || cls is SymbolType || cls is TypeBuilder || cls is GenericTypeParameterBuilder || cls is EnumBuilder)
|
||||
add_token_fixup (cls);
|
||||
emit_int (token);
|
||||
}
|
||||
|
@ -77,6 +77,8 @@ namespace System.Reflection.Emit {
|
||||
Hashtable resource_writers;
|
||||
ISymbolWriter symbolWriter;
|
||||
|
||||
static bool has_warned_about_symbolWriter;
|
||||
|
||||
[MethodImplAttribute(MethodImplOptions.InternalCall)]
|
||||
private static extern void basic_init (ModuleBuilder ab);
|
||||
|
||||
@ -107,11 +109,22 @@ namespace System.Reflection.Emit {
|
||||
|
||||
if (emitSymbolInfo) {
|
||||
Assembly asm = Assembly.LoadWithPartialName ("Mono.CompilerServices.SymbolWriter");
|
||||
if (asm == null)
|
||||
throw new TypeLoadException ("The assembly for default symbol writer cannot be loaded");
|
||||
|
||||
Type t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl", true);
|
||||
symbolWriter = (ISymbolWriter) Activator.CreateInstance (t, new object[] { this });
|
||||
Type t = null;
|
||||
if (asm != null)
|
||||
t = asm.GetType ("Mono.CompilerServices.SymbolWriter.SymbolWriterImpl");
|
||||
|
||||
if (t == null) {
|
||||
WarnAboutSymbolWriter ("Failed to load the default Mono.CompilerServices.SymbolWriter assembly");
|
||||
} else {
|
||||
try {
|
||||
symbolWriter = (ISymbolWriter) Activator.CreateInstance (t, new object[] { this });
|
||||
} catch (System.MissingMethodException) {
|
||||
WarnAboutSymbolWriter ("The default Mono.CompilerServices.SymbolWriter is not available on this platform");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
string fileName = fqname;
|
||||
if (assemblyb.AssemblyDir != null)
|
||||
fileName = Path.Combine (assemblyb.AssemblyDir, fileName);
|
||||
@ -119,6 +132,15 @@ namespace System.Reflection.Emit {
|
||||
}
|
||||
}
|
||||
|
||||
static void WarnAboutSymbolWriter (string message)
|
||||
{
|
||||
if (has_warned_about_symbolWriter)
|
||||
return;
|
||||
|
||||
has_warned_about_symbolWriter = true;
|
||||
Console.Error.WriteLine ("WARNING: {0}", message);
|
||||
}
|
||||
|
||||
public override string FullyQualifiedName {get { return fqname;}}
|
||||
|
||||
public bool IsTransient () {
|
||||
@ -727,6 +749,14 @@ namespace System.Reflection.Emit {
|
||||
token = typedef_tokengen --;
|
||||
else
|
||||
token = typeref_tokengen --;
|
||||
} else if (member is EnumBuilder) {
|
||||
token = GetPseudoToken ((member as EnumBuilder).GetTypeBuilder(), create_open_instance);
|
||||
if (create_open_instance)
|
||||
inst_tokens_open[member] = token;
|
||||
else
|
||||
inst_tokens[member] = token;
|
||||
// n.b. don't register with the runtime, the TypeBuilder already did it.
|
||||
return token;
|
||||
} else if (member is ConstructorBuilder) {
|
||||
if (member.Module == this && !(member as ConstructorBuilder).TypeBuilder.ContainsGenericParameters)
|
||||
token = methoddef_tokengen --;
|
||||
@ -757,7 +787,8 @@ namespace System.Reflection.Emit {
|
||||
}
|
||||
|
||||
internal int GetToken (MemberInfo member, bool create_open_instance) {
|
||||
if (member is TypeBuilderInstantiation || member is FieldOnTypeBuilderInst || member is ConstructorOnTypeBuilderInst || member is MethodOnTypeBuilderInst || member is SymbolType || member is FieldBuilder || member is TypeBuilder || member is ConstructorBuilder || member is MethodBuilder || member is GenericTypeParameterBuilder)
|
||||
if (member is TypeBuilderInstantiation || member is FieldOnTypeBuilderInst || member is ConstructorOnTypeBuilderInst || member is MethodOnTypeBuilderInst || member is SymbolType || member is FieldBuilder || member is TypeBuilder || member is ConstructorBuilder || member is MethodBuilder || member is GenericTypeParameterBuilder ||
|
||||
member is EnumBuilder)
|
||||
return GetPseudoToken (member, create_open_instance);
|
||||
return getToken (this, member, create_open_instance);
|
||||
}
|
||||
@ -850,6 +881,8 @@ namespace System.Reflection.Emit {
|
||||
finished = (member as FieldBuilder).RuntimeResolve ();
|
||||
} else if (member is TypeBuilder) {
|
||||
finished = (member as TypeBuilder).RuntimeResolve ();
|
||||
} else if (member is EnumBuilder) {
|
||||
finished = (member as EnumBuilder).RuntimeResolve ();
|
||||
} else if (member is ConstructorBuilder) {
|
||||
finished = (member as ConstructorBuilder).RuntimeResolve ();
|
||||
} else if (member is MethodBuilder) {
|
||||
|
Reference in New Issue
Block a user