Imported Upstream version 5.4.0.167

Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-08-21 15:34:15 +00:00
parent e49d6f06c0
commit 536cd135cc
12856 changed files with 563812 additions and 223249 deletions

View File

@ -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
}

View File

@ -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) {

View File

@ -71,6 +71,9 @@ namespace System.Reflection.Emit {
return _tb.InternalResolve ();
}
internal override Type RuntimeResolve () {
return _tb.RuntimeResolve ();
}
public override Assembly Assembly {
get {

View File

@ -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];
}

View File

@ -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);
}

View File

@ -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) {