Merge pull request #1909 from esdrubal/reflection
authorMarcos Henrich <marcoshenrich@gmail.com>
Mon, 27 Jul 2015 11:43:38 +0000 (12:43 +0100)
committerMarcos Henrich <marcoshenrich@gmail.com>
Mon, 27 Jul 2015 11:43:38 +0000 (12:43 +0100)
[SRE] Implemented missing SRE features.

1  2 
mcs/class/corlib/Test/System.Reflection.Emit/ModuleBuilderTest.cs
mcs/class/corlib/corlib.dll.sources
mono/metadata/icall-def.h
mono/metadata/icall.c

index d9292c16ad2733324e1ec08b5321cd636d1f1213,fa8e0af5972947f84830404de56ae23d836d8c4a..aa6f1ba35833bdb3b1c4bf28e54fedd5b0a83718
@@@ -136,7 -136,6 +136,7 @@@ namespace MonoTests.System.Reflection.E
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_Name_Null ()
                {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_Name_Empty ()
                {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_Name_NullChar ()
                {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_InterfaceNotAbstract ()
                {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_Parent_Interface ()
                {
                        TypeBuilder tb;
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DefineType_TypeSize ()
                {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                [ExpectedException (typeof (ArgumentException))]
                public void DuplicateTypeName () {
                        AssemblyBuilder ab = genAssembly ();
                }
  
                [Test]
 +              [Category ("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter assembly
                public void DuplicateSymbolDocument ()
                {
                        AssemblyBuilder ab = genAssembly ();
                        catch (ArgumentException) {
                        }
                }
+               [Test]
+               public void GetMethodTokenNullParam ()
+               {
+                       AssemblyName an = genAssemblyName ();
+                       AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an, AssemblyBuilderAccess.Run);
+                       ModuleBuilder module = ab.DefineDynamicModule ("mod");
+                       var method = typeof (object).GetMethod ("GetType");
+                       // ArgumentNullException should not occur.
+                       module.GetMethodToken (method, null);
+               }
+               [Test]
+               public void GetConstructorTokenNullParam ()
+               {
+                       AssemblyName an = genAssemblyName ();
+                       AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (an, AssemblyBuilderAccess.Run);
+                       ModuleBuilder module = ab.DefineDynamicModule ("mod");
+                       var method = typeof (object).GetConstructor (Type.EmptyTypes);
+                       // ArgumentNullException should not occur.
+                       module.GetConstructorToken (method, null);
+               }
        }
  }
index 391aedc68728cec206a4cc6a5758c199b5cf143c,05a327773a2ca0a16bfe88481f61ed4a65169066..961c6928149290423fac42911fc9ce51e50093b4
@@@ -77,7 -77,6 +77,7 @@@ Mono.Xml/SmallXmlParser.c
  Mono.Xml/SecurityParser.cs
  System/ActivationContext.cs
  System/AndroidPlatform.cs
 +System/AppContext.cs
  System/AppDomain.cs
  System/AppDomainInitializer.cs
  System/AppDomainManager.cs
@@@ -233,7 -232,6 +233,6 @@@ System.Reflection/CustomAttributeNamedA
  System.Reflection/CustomAttributeTypedArgument.cs
  System.Reflection/EventInfo.cs
  System.Reflection/ExceptionHandlingClause.cs
- System.Reflection/ExceptionHandlingClauseOptions.cs
  System.Reflection/FieldInfo.cs
  System.Reflection/ImageFileMachine.cs
  System.Reflection/LocalVariableInfo.cs
@@@ -1224,6 -1222,7 +1223,7 @@@ ReferenceSources/SecurityContext.c
  ../../../external/referencesource/mscorlib/system/reflection/membertypes.cs
  ../../../external/referencesource/mscorlib/system/reflection/methodattributes.cs
  ../../../external/referencesource/mscorlib/system/reflection/methodbase.cs
+ ../../../external/referencesource/mscorlib/system/reflection/methodbody.cs
  ../../../external/referencesource/mscorlib/system/reflection/methodimplattributes.cs
  ../../../external/referencesource/mscorlib/system/reflection/missing.cs
  ../../../external/referencesource/mscorlib/system/reflection/obfuscateassemblyattribute.cs
  ../../../external/referencesource/mscorlib/system/reflection/typefilter.cs
  ../../../external/referencesource/mscorlib/system/reflection/typeinfo.cs
  
+ ../../../external/referencesource/mscorlib/system/reflection/emit/methodbuilder.cs
  ../../../external/referencesource/mscorlib/system/resources/__fastresourcecomparer.cs
  ../../../external/referencesource/mscorlib/system/resources/__hresults.cs
  ../../../external/referencesource/mscorlib/system/resources/filebasedresourcegroveler.cs
  
  ReferenceSources/String.cs
  ReferenceSources/Type.cs
 +
 +coreclr/AsyncLocal.cs
 +coreclr/DisablePrivateReflectionAttribute.cs
 +coreclr/EncodingProvider.cs
 +coreclr/FormattableString.cs
 +coreclr/FormattableStringFactory.cs
 +coreclr/WaitHandleExtensions.cs
index 2dfe551cf1448b7bffaf2c6944759bc79e41c88e,38cac7aa4f91a9a180feba2a30f3fdbd939b2f84..677769c97e54d7930a40f7071b20d2b16412ae1d
@@@ -203,9 -203,6 +203,9 @@@ ICALL(PROCESS_14M, "Times", ves_icall_S
  ICALL(PROCESS_15, "WaitForExit_internal(intptr,int)", ves_icall_System_Diagnostics_Process_WaitForExit_internal)
  ICALL(PROCESS_16, "WaitForInputIdle_internal(intptr,int)", ves_icall_System_Diagnostics_Process_WaitForInputIdle_internal)
  
 +ICALL_TYPE (PROCESSREADER, "System.Diagnostics.Process/ProcessAsyncReader", PROCESSREADER_1)
 +ICALL (PROCESSREADER_1, "RemoveFromIOThreadPool", ves_icall_System_Diagnostics_Process_ProcessAsyncReader_RemoveFromIOThreadPool)
 +
  ICALL_TYPE (PROCESSHANDLE, "System.Diagnostics.Process/ProcessWaitHandle", PROCESSHANDLE_1)
  ICALL (PROCESSHANDLE_1, "ProcessHandle_close(intptr)", ves_icall_System_Diagnostics_Process_ProcessHandle_close)
  ICALL (PROCESSHANDLE_2, "ProcessHandle_duplicate(intptr)", ves_icall_System_Diagnostics_Process_ProcessHandle_duplicate)
@@@ -288,6 -285,9 +288,6 @@@ ICALL_TYPE(REGINF, "System.Globalizatio
  ICALL(REGINF_1, "construct_internal_region_from_lcid", ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_lcid)
  ICALL(REGINF_2, "construct_internal_region_from_name", ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name)
  
 -ICALL_TYPE(TXTINF, "System.Globalization.TextInfo", TXTINF_1)
 -ICALL(TXTINF_1, "GetDataTablePointersLite", ves_icall_System_Globalization_TextInfo_GetDataTablePointersLite)
 -
  #ifndef PLATFORM_NO_DRIVEINFO
  ICALL_TYPE(IODRIVEINFO, "System.IO.DriveInfo", IODRIVEINFO_1)
  ICALL(IODRIVEINFO_1, "GetDiskFreeSpaceInternal", ves_icall_System_IO_DriveInfo_GetDiskFreeSpace)
@@@ -512,7 -512,8 +512,8 @@@ ICALL(GPARB_1, "initialize", mono_refle
  ICALL_TYPE(METHODB, "System.Reflection.Emit.MethodBuilder", METHODB_1)
  ICALL(METHODB_1, "MakeGenericMethod", mono_reflection_bind_generic_method_parameters)
  
- ICALL_TYPE(MODULEB, "System.Reflection.Emit.ModuleBuilder", MODULEB_8)
+ ICALL_TYPE(MODULEB, "System.Reflection.Emit.ModuleBuilder", MODULEB_10)
+ ICALL(MODULEB_10, "GetRegisteredToken", ves_icall_ModuleBuilder_GetRegisteredToken)
  ICALL(MODULEB_8, "RegisterToken", ves_icall_ModuleBuilder_RegisterToken)
  ICALL(MODULEB_1, "WriteToFile", ves_icall_ModuleBuilder_WriteToFile)
  ICALL(MODULEB_2, "basic_init", mono_image_module_basic_init)
@@@ -702,7 -703,6 +703,7 @@@ ICALL(ACTS_2, "EnableProxyActivation", 
  
  ICALL_TYPE(CONTEXT, "System.Runtime.Remoting.Contexts.Context", CONTEXT_1)
  ICALL(CONTEXT_1, "RegisterContext", ves_icall_System_Runtime_Remoting_Contexts_Context_RegisterContext)
 +ICALL(CONTEXT_2, "ReleaseContext", ves_icall_System_Runtime_Remoting_Contexts_Context_ReleaseContext)
  
  ICALL_TYPE(ARES, "System.Runtime.Remoting.Messaging.AsyncResult", ARES_1)
  ICALL(ARES_1, "Invoke", ves_icall_System_Runtime_Remoting_Messaging_AsyncResult_Invoke)
diff --combined mono/metadata/icall.c
index a02b4674ef135e3bca20e5b93ef16d9be483038d,08c162f4d0b5e2c5fadc05c7d7edfaec7daed5d5..6ab999ba126cb69b9da05f76c2ad1ba78591dc3a
@@@ -65,6 -65,7 +65,6 @@@
  #include <mono/metadata/profiler-private.h>
  #include <mono/metadata/locales.h>
  #include <mono/metadata/filewatcher.h>
 -#include <mono/metadata/char-conversions.h>
  #include <mono/metadata/security.h>
  #include <mono/metadata/mono-config.h>
  #include <mono/metadata/cil-coff.h>
@@@ -1161,6 -1162,18 +1161,18 @@@ ves_icall_ModuleBuilder_RegisterToken (
        mono_image_register_token (mb->dynamic_image, token, obj);
  }
  
+ ICALL_EXPORT MonoObject*
+ ves_icall_ModuleBuilder_GetRegisteredToken (MonoReflectionModuleBuilder *mb, guint32 token)
+ {
+       gpointer obj;
+       mono_loader_lock ();
+       obj = mono_g_hash_table_lookup (mb->dynamic_image->tokens, GUINT_TO_POINTER (token));
+       mono_loader_unlock ();
+       return obj;
+ }
  static gboolean
  get_caller (MonoMethod *m, gint32 no, gint32 ilo, gboolean managed, gpointer data)
  {
@@@ -6823,6 -6836,20 +6835,6 @@@ ves_icall_System_NumberFormatter_GetFor
        *decHexDigits = Formatter_DecHexDigits;
  }
  
 -/* These parameters are "readonly" in corlib/System/Globalization/TextInfo.cs */
 -ICALL_EXPORT void
 -ves_icall_System_Globalization_TextInfo_GetDataTablePointersLite (
 -                                          guint16 const **to_lower_data_low,
 -                                          guint16 const **to_lower_data_high,
 -                                          guint16 const **to_upper_data_low,
 -                                          guint16 const **to_upper_data_high)
 -{
 -      *to_lower_data_low = ToLowerDataLow;
 -      *to_lower_data_high = ToLowerDataHigh;
 -      *to_upper_data_low = ToUpperDataLow;
 -      *to_upper_data_high = ToUpperDataHigh;
 -}
 -
  /*
   * We return NULL for no modifiers so the corlib code can return Type.EmptyTypes
   * and avoid useless allocations.