// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+#if !FULL_AOT_RUNTIME
using System;
using System.IO;
using System.Collections;
internal class CodeGenerator
{
// Code generation
+
+ static object monitor = new object ();
static ModuleBuilder _module;
_module = myAsmBuilder.DefineDynamicModule("__MetadataTypesModule", false);
}
- static public Type GenerateMetadataType (Type type, StreamingContext context)
+ static public Type GenerateMetadataType (Type type, StreamingContext context) {
+ /* SRE is not thread safe */
+ lock (monitor) {
+ return GenerateMetadataTypeInternal (type, context);
+ }
+ }
+
+ static public Type GenerateMetadataTypeInternal (Type type, StreamingContext context)
{
string name = type.Name + "__TypeMetadata";
string sufix = "";
// *********************
// METHOD public constructor (Type t): base (t);
- parameters = new Type[0];
+ parameters = Type.EmptyTypes;
ConstructorBuilder ctor = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, parameters);
ConstructorInfo baseCtor = typeof(ClrTypeMetadata).GetConstructor (new Type[] { typeof(Type) });
ig.Emit (OpCodes.Ldind_Ref);
}
- public static void EmitWriteTypeSpec (ILGenerator gen, Type type, string member)
+ static void EmitWriteTypeSpec (ILGenerator gen, Type type, string member)
{
// WARNING Keep in sync with WriteTypeSpec
break;
case TypeCode.DateTime:
- gen.EmitCall (OpCodes.Call, typeof(DateTime).GetProperty("Ticks").GetGetMethod(), null);
+ gen.EmitCall (OpCodes.Call, typeof(DateTime).GetMethod("ToBinary", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance), null);
EmitWrite (gen, typeof(long));
break;
}
}
+#endif