static ModuleBuilder _module;
- static public Type GenerateMetadataType (Type type, StreamingContext context)
+ static CodeGenerator ()
{
- if (_module == null)
- {
- lock (typeof (ObjectWriter))
- {
- if (_module == null) {
- AppDomain myDomain = System.Threading.Thread.GetDomain();
- AssemblyName myAsmName = new AssemblyName();
- myAsmName.Name = "__MetadataTypes";
-
- AssemblyBuilder myAsmBuilder = myDomain.DefineInternalDynamicAssembly (myAsmName, AssemblyBuilderAccess.Run);
- _module = myAsmBuilder.DefineDynamicModule("__MetadataTypesModule", true);
- }
- }
- }
-
+ AppDomain myDomain = System.Threading.Thread.GetDomain();
+ AssemblyName myAsmName = new AssemblyName();
+ myAsmName.Name = "__MetadataTypes";
+
+ AssemblyBuilder myAsmBuilder = myDomain.DefineInternalDynamicAssembly (myAsmName, AssemblyBuilderAccess.Run);
+ _module = myAsmBuilder.DefineDynamicModule("__MetadataTypesModule", false);
+ }
+
+ static public Type GenerateMetadataType (Type type, StreamingContext context)
+ {
string name = type.Name + "__TypeMetadata";
string sufix = "";
int n = 0;
parameters = new Type[0];
- ConstructorBuilder ctor = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, parameters);
+ ConstructorBuilder ctor = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, parameters);
ConstructorInfo baseCtor = typeof(ClrTypeMetadata).GetConstructor (new Type[] { typeof(Type) });
gen = ctor.GetILGenerator();
{
// EMIT writer.Write (name);
gen.Emit (OpCodes.Ldarg_2);
-
- if (field.DeclaringType == type)
- gen.Emit (OpCodes.Ldstr, field.Name);
- else
- gen.Emit (OpCodes.Ldstr, field.DeclaringType.Name + "+" + field.Name);
+ gen.Emit (OpCodes.Ldstr, field.Name);
EmitWrite (gen, typeof(string));
}