[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit Assemb
From: |
Rhys Weatherley <address@hidden> |
Subject: |
[Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit AssemblyBuilder.cs,1.5,1.6 ConstructorBuilder.cs,1.4,1.5 EventBuilder.cs,1.4,1.5 FieldBuilder.cs,1.5,1.6 ILGenerator.cs,1.7,1.8 MethodBuilder.cs,1.4,1.5 ModuleBuilder.cs,1.6,1.7 PropertyBuilder.cs,1.5,1.6 SignatureHelper.cs,1.2,1.3 TypeBuilder.cs,1.6,1.7 |
Date: |
Sat, 22 Mar 2003 00:55:16 -0500 |
Update of /cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit
In directory subversions:/tmp/cvs-serv9126/runtime/System/Reflection/Emit
Modified Files:
AssemblyBuilder.cs ConstructorBuilder.cs EventBuilder.cs
FieldBuilder.cs ILGenerator.cs MethodBuilder.cs
ModuleBuilder.cs PropertyBuilder.cs SignatureHelper.cs
TypeBuilder.cs
Log Message:
Harden and secure the Reflection.Emit API against multi-threaded access.
Index: AssemblyBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/AssemblyBuilder.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** AssemblyBuilder.cs 22 Mar 2003 01:33:16 -0000 1.5
--- AssemblyBuilder.cs 22 Mar 2003 05:55:13 -0000 1.6
***************
*** 27,30 ****
--- 27,31 ----
using System;
using System.IO;
+ using System.Collections;
using System.Reflection;
using System.Security;
***************
*** 44,47 ****
--- 45,49 ----
private IntPtr writer;
private ModuleBuilder module;
+ private ArrayList detachList;
// Constructor. Called from AppDomain.DefineDynamicAssembly.
***************
*** 54,69 ****
this.saved = false;
this.entryPoint = null;
Version version = name.Version;
! if(version != null)
{
! this.privateData = ClrAssemblyCreate
! (name.Name, version.Major,
version.Minor,
! version.Build,
version.Revision,
! access, out writer);
! }
! else
! {
! this.privateData = ClrAssemblyCreate
! (name.Name, 0, 0, 0, 0, access,
out writer);
}
if(this.privateData == IntPtr.Zero)
--- 56,75 ----
this.saved = false;
this.entryPoint = null;
+ this.detachList = new ArrayList();
Version version = name.Version;
! lock(typeof(AssemblyBuilder))
{
! if(version != null)
! {
! this.privateData =
ClrAssemblyCreate
! (name.Name,
version.Major, version.Minor,
! version.Build,
version.Revision,
! access, out writer);
! }
! else
! {
! this.privateData =
ClrAssemblyCreate
! (name.Name, 0, 0, 0, 0,
access, out writer);
! }
}
if(this.privateData == IntPtr.Zero)
***************
*** 336,343 ****
(_("Invalid_EntryNotInAssembly"));
}
! /* TODO
!
ClrSetEntryPoint(((MethodBuilder)entryMethod).ClrHandle,
fileKind);
! */
entryPoint = entryMethod;
}
--- 342,352 ----
(_("Invalid_EntryNotInAssembly"));
}
! lock(typeof(AssemblyBuilder))
! {
! /* TODO
!
ClrSetEntryPoint(((MethodBuilder)entryMethod).ClrHandle,
fileKind);
! */
! }
entryPoint = entryMethod;
}
***************
*** 365,368 ****
--- 374,400 ----
{
throw new
NotImplementedException("AddDeclarativeSecurity");
+ }
+
+ // Add an item to this assembly's detach list.
+ internal void AddDetach(IDetachItem item)
+ {
+ lock(typeof(AssemblyBuilder))
+ {
+ detachList.Add(item);
+ }
+ }
+
+ // Detach everything used by this assembly, which ensures that
+ // all pointers to native structures are invalidated.
+ private void Detach()
+ {
+ lock(typeof(AssemblyBuilder))
+ {
+ foreach(IDetachItem item in detachList)
+ {
+ item.Detach();
+ }
+ privateData = IntPtr.Zero;
+ }
}
Index: ConstructorBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/ConstructorBuilder.cs,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** ConstructorBuilder.cs 22 Mar 2003 05:12:30 -0000 1.4
--- ConstructorBuilder.cs 22 Mar 2003 05:55:13 -0000 1.5
***************
*** 33,37 ****
using System.Runtime.CompilerServices;
! public sealed class ConstructorBuilder : ConstructorInfo, IClrProgramItem
{
// Internal state.
--- 33,38 ----
using System.Runtime.CompilerServices;
! public sealed class ConstructorBuilder
! : ConstructorInfo, IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 56,59 ****
--- 57,63 ----
this.initLocals = true;
+ // Register this item to be detached later.
+ type.module.assembly.AddDetach(this);
+
// Create the signature.
helper = SignatureHelper.GetMethodSigHelper
***************
*** 63,69 ****
// Create the constructor method.
! this.privateData = MethodBuilder.ClrMethodCreate
! (((IClrProgramItem)type).ClrHandle,
name,
! attributes, helper.sig);
// Add the constructor to the type for
post-processing.
--- 67,76 ----
// Create the constructor method.
! lock(typeof(AssemblyBuilder))
! {
! this.privateData =
MethodBuilder.ClrMethodCreate
!
(((IClrProgramItem)type).ClrHandle, name,
! attributes, helper.sig);
! }
// Add the constructor to the type for
post-processing.
***************
*** 133,137 ****
public override MethodImplAttributes GetMethodImplementationFlags()
{
! return ClrHelpers.GetImplAttrs(privateData);
}
--- 140,147 ----
public override MethodImplAttributes GetMethodImplementationFlags()
{
! lock(typeof(AssemblyBuilder))
! {
! return
ClrHelpers.GetImplAttrs(privateData);
! }
}
***************
*** 145,156 ****
public override ParameterInfo[] GetParameters()
{
! int param;
! ParameterInfo[] parameters = new ParameterInfo
[numParams];
! for(param = 0; param < numParams; ++param)
{
! parameters[param] =
!
ClrHelpers.GetParameterInfo(this, this, param + 1);
}
- return parameters;
}
--- 155,169 ----
public override ParameterInfo[] GetParameters()
{
! lock(typeof(AssemblyBuilder))
{
! int param;
! ParameterInfo[] parameters = new
ParameterInfo [numParams];
! for(param = 0; param < numParams;
++param)
! {
! parameters[param] =
!
ClrHelpers.GetParameterInfo(this, this, param + 1);
! }
! return parameters;
}
}
***************
*** 158,163 ****
public MethodToken GetToken()
{
! return new MethodToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
--- 171,179 ----
public MethodToken GetToken()
{
! lock(typeof(AssemblyBuilder))
! {
! return new MethodToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
***************
*** 216,221 ****
{
type.StartSync();
! MethodBuilder.ClrMethodSetImplAttrs
! (privateData, attributes);
}
finally
--- 232,240 ----
{
type.StartSync();
! lock(typeof(AssemblyBuilder))
! {
!
MethodBuilder.ClrMethodSetImplAttrs
! (privateData,
attributes);
! }
}
finally
***************
*** 244,249 ****
get
{
! return (MethodAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
}
}
--- 263,271 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return (MethodAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
! }
}
}
***************
*** 285,289 ****
get
{
! return ClrHelpers.GetName(this);
}
}
--- 307,314 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrHelpers.GetName(this);
! }
}
}
***************
*** 329,332 ****
--- 354,363 ----
{
// TODO
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: EventBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/EventBuilder.cs,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** EventBuilder.cs 22 Mar 2003 05:12:30 -0000 1.4
--- EventBuilder.cs 22 Mar 2003 05:55:13 -0000 1.5
***************
*** 30,34 ****
using System.Runtime.CompilerServices;
! public sealed class EventBuilder : IClrProgramItem
{
// Internal state.
--- 30,34 ----
using System.Runtime.CompilerServices;
! public sealed class EventBuilder : IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 50,59 ****
}
// Create the event.
! this.type = type;
! this.privateData = ClrEventCreate
! (((IClrProgramItem)type).ClrHandle,
name,
!
SignatureHelper.CSToILType(type.module, eventType),
! attributes);
}
--- 50,65 ----
}
+ // Register this item to be detached later.
+ type.module.assembly.AddDetach(this);
+
// Create the event.
! lock(typeof(AssemblyBuilder))
! {
! this.type = type;
! this.privateData = ClrEventCreate
!
(((IClrProgramItem)type).ClrHandle, name,
!
SignatureHelper.CSToILType(type.module, eventType),
! attributes);
! }
}
***************
*** 69,75 ****
throw new
ArgumentNullException("mdBuilder");
}
! ClrEventAddSemantics
! (privateData, attr,
!
type.module.GetMethodToken(mdBuilder));
}
finally
--- 75,84 ----
throw new
ArgumentNullException("mdBuilder");
}
! lock(typeof(AssemblyBuilder))
! {
! ClrEventAddSemantics
! (privateData, attr,
!
type.module.GetMethodToken(mdBuilder));
! }
}
finally
***************
*** 88,93 ****
public EventToken GetEventToken()
{
! return new EventToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
--- 97,105 ----
public EventToken GetEventToken()
{
! lock(typeof(AssemblyBuilder))
! {
! return new EventToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
***************
*** 145,148 ****
--- 157,166 ----
return privateData;
}
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: FieldBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/FieldBuilder.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** FieldBuilder.cs 22 Mar 2003 05:12:30 -0000 1.5
--- FieldBuilder.cs 22 Mar 2003 05:55:13 -0000 1.6
***************
*** 30,34 ****
using System.Runtime.CompilerServices;
! public sealed class FieldBuilder : FieldInfo, IClrProgramItem
{
// Internal state.
--- 30,34 ----
using System.Runtime.CompilerServices;
! public sealed class FieldBuilder : FieldInfo, IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 40,48 ****
FieldAttributes attributes)
{
! this.type = type;
! this.privateData = ClrFieldCreate
! (((IClrProgramItem)type).ClrHandle,
name,
!
SignatureHelper.CSToILType(type.module, fieldType),
! attributes);
}
--- 40,55 ----
FieldAttributes attributes)
{
! // Register this item to be detached later.
! type.module.assembly.AddDetach(this);
!
! // Create the field.
! lock(typeof(AssemblyBuilder))
! {
! this.type = type;
! this.privateData = ClrFieldCreate
!
(((IClrProgramItem)type).ClrHandle, name,
!
SignatureHelper.CSToILType(type.module, fieldType),
! attributes);
! }
}
***************
*** 61,66 ****
public FieldToken GetToken()
{
! return new FieldToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
--- 68,76 ----
public FieldToken GetToken()
{
! lock(typeof(AssemblyBuilder))
! {
! return new FieldToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
***************
*** 84,88 ****
type.StartSync();
ValidateConstant(FieldType,
defaultValue);
! ClrFieldSetConstant(privateData,
defaultValue);
}
finally
--- 94,101 ----
type.StartSync();
ValidateConstant(FieldType,
defaultValue);
! lock(typeof(AssemblyBuilder))
! {
!
ClrFieldSetConstant(privateData, defaultValue);
! }
}
finally
***************
*** 130,134 ****
throw new
ArgumentNullException("unmanagedMarshal");
}
! ClrFieldSetMarshal(privateData,
unmanagedMarshal.ToBytes());
}
finally
--- 143,151 ----
throw new
ArgumentNullException("unmanagedMarshal");
}
! lock(typeof(AssemblyBuilder))
! {
! ClrFieldSetMarshal
! (privateData,
unmanagedMarshal.ToBytes());
! }
}
finally
***************
*** 144,148 ****
{
type.StartSync();
! ClrFieldSetOffset(privateData, iOffset);
}
finally
--- 161,168 ----
{
type.StartSync();
! lock(typeof(AssemblyBuilder))
! {
! ClrFieldSetOffset(privateData,
iOffset);
! }
}
finally
***************
*** 166,171 ****
get
{
! return (FieldAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
}
}
--- 186,194 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return (FieldAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
! }
}
}
***************
*** 194,198 ****
get
{
! return
ClrField.GetFieldType(privateData);
}
}
--- 217,224 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return
ClrField.GetFieldType(privateData);
! }
}
}
***************
*** 203,207 ****
get
{
! return ClrHelpers.GetName(this);
}
}
--- 229,236 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrHelpers.GetName(this);
! }
}
}
***************
*** 266,269 ****
--- 295,304 ----
throw new
ArgumentException(_("Emit_InvalidConstant"));
}
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: ILGenerator.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/ILGenerator.cs,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** ILGenerator.cs 22 Mar 2003 05:12:30 -0000 1.7
--- ILGenerator.cs 22 Mar 2003 05:55:13 -0000 1.8
***************
*** 32,36 ****
using System.Runtime.InteropServices;
! public class ILGenerator
{
// Internal state.
--- 32,36 ----
using System.Runtime.InteropServices;
! public class ILGenerator : IDetachItem
{
// Internal state.
***************
*** 124,127 ****
--- 124,128 ----
exceptionListEnd = null;
tokenFixups = null;
+ module.assembly.AddDetach(this);
}
***************
*** 1216,1219 ****
--- 1217,1226 ----
throw new
ArgumentException(_("Emit_NameEmpty"));
}
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ tokenFixups = null;
}
Index: MethodBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/MethodBuilder.cs,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** MethodBuilder.cs 22 Mar 2003 05:12:30 -0000 1.4
--- MethodBuilder.cs 22 Mar 2003 05:55:13 -0000 1.5
***************
*** 33,37 ****
using System.Runtime.CompilerServices;
! public sealed class MethodBuilder : MethodInfo, IClrProgramItem
{
// Internal state.
--- 33,37 ----
using System.Runtime.CompilerServices;
! public sealed class MethodBuilder : MethodInfo, IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 79,82 ****
--- 79,85 ----
?
parameterTypes.Length : 0);
+ // Register this item to be detached later.
+ type.module.assembly.AddDetach(this);
+
// Create the method signature.
helper = SignatureHelper.GetMethodSigHelper
***************
*** 86,92 ****
// Create the method.
! this.privateData = ClrMethodCreate
! (((IClrProgramItem)type).ClrHandle,
name,
! attributes, helper.sig);
// Add the method to the type for
post-processing.
--- 89,98 ----
// Create the method.
! lock(typeof(AssemblyBuilder))
! {
! this.privateData = ClrMethodCreate
!
(((IClrProgramItem)type).ClrHandle, name,
! attributes, helper.sig);
! }
// Add the method to the type for
post-processing.
***************
*** 209,213 ****
public override MethodImplAttributes GetMethodImplementationFlags()
{
! return ClrHelpers.GetImplAttrs(privateData);
}
--- 215,222 ----
public override MethodImplAttributes GetMethodImplementationFlags()
{
! lock(typeof(AssemblyBuilder))
! {
! return
ClrHelpers.GetImplAttrs(privateData);
! }
}
***************
*** 221,232 ****
public override ParameterInfo[] GetParameters()
{
! int param;
! ParameterInfo[] parameters = new ParameterInfo
[numParams];
! for(param = 0; param < numParams; ++param)
{
! parameters[param] =
!
ClrHelpers.GetParameterInfo(this, this, param + 1);
}
- return parameters;
}
--- 230,244 ----
public override ParameterInfo[] GetParameters()
{
! lock(typeof(AssemblyBuilder))
{
! int param;
! ParameterInfo[] parameters = new
ParameterInfo [numParams];
! for(param = 0; param < numParams;
++param)
! {
! parameters[param] =
!
ClrHelpers.GetParameterInfo(this, this, param + 1);
! }
! return parameters;
}
}
***************
*** 234,239 ****
public MethodToken GetToken()
{
! return new MethodToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
--- 246,254 ----
public MethodToken GetToken()
{
! lock(typeof(AssemblyBuilder))
! {
! return new MethodToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
***************
*** 286,290 ****
{
type.StartSync();
! ClrMethodSetImplAttrs(privateData,
attributes);
}
finally
--- 301,308 ----
{
type.StartSync();
! lock(typeof(AssemblyBuilder))
! {
!
ClrMethodSetImplAttrs(privateData, attributes);
! }
}
finally
***************
*** 378,383 ****
get
{
! return (MethodAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
}
}
--- 396,404 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return (MethodAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
! }
}
}
***************
*** 388,392 ****
get
{
! return
ClrHelpers.GetCallConv(privateData);
}
}
--- 409,416 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return
ClrHelpers.GetCallConv(privateData);
! }
}
}
***************
*** 428,432 ****
get
{
! return ClrHelpers.GetName(this);
}
}
--- 452,459 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrHelpers.GetName(this);
! }
}
}
***************
*** 482,485 ****
--- 509,518 ----
{
// TODO
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: ModuleBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/ModuleBuilder.cs,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** ModuleBuilder.cs 22 Mar 2003 01:33:16 -0000 1.6
--- ModuleBuilder.cs 22 Mar 2003 05:55:13 -0000 1.7
***************
*** 34,38 ****
using System.Runtime.CompilerServices;
! public class ModuleBuilder : Module
{
// Internal state.
--- 34,38 ----
using System.Runtime.CompilerServices;
! public class ModuleBuilder : Module, IDetachItem
{
// Internal state.
***************
*** 53,58 ****
this.emitSymbolInfo = emitSymbolInfo;
// Create a new module within the assembly.
! privateData =
ClrModuleCreate(assembly.privateData, name);
// Create the module type for this module.
--- 53,64 ----
this.emitSymbolInfo = emitSymbolInfo;
+ // Register this object for detaching.
+ assembly.AddDetach(this);
+
// Create a new module within the assembly.
! lock(typeof(AssemblyBuilder))
! {
! privateData =
ClrModuleCreate(assembly.privateData, name);
! }
// Create the module type for this module.
***************
*** 398,404 ****
else if(con is ClrConstructor)
{
! return new MethodToken
! (TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrConstructor)con).ClrHandle));
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
--- 404,413 ----
else if(con is ClrConstructor)
{
! lock(typeof(AssemblyBuilder))
! {
! return new MethodToken
!
(TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrConstructor)con).ClrHandle));
! }
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
***************
*** 423,429 ****
else if(field is ClrField)
{
! return new FieldToken
! (TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrField)field).ClrHandle));
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
--- 432,441 ----
else if(field is ClrField)
{
! lock(typeof(AssemblyBuilder))
! {
! return new FieldToken
!
(TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrField)field).ClrHandle));
! }
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
***************
*** 448,454 ****
else if(method is ClrMethod)
{
! return new MethodToken
! (TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrMethod)method).ClrHandle));
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
--- 460,469 ----
else if(method is ClrMethod)
{
! lock(typeof(AssemblyBuilder))
! {
! return new MethodToken
!
(TypeBuilder.ClrTypeImportMember
! (privateData,
((ClrMethod)method).ClrHandle));
! }
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
***************
*** 476,481 ****
throw new ArgumentNullException("str");
}
! return new StringToken
! (ClrModuleCreateString(privateData,
str));
}
--- 491,499 ----
throw new ArgumentNullException("str");
}
! lock(typeof(AssemblyBuilder))
! {
! return new StringToken
!
(ClrModuleCreateString(privateData, str));
! }
}
***************
*** 584,590 ****
(_("Emit_CannotImportRefType"));
}
! return new TypeToken
! (TypeBuilder.ClrTypeImport
! (privateData,
((ClrType)type).ClrHandle));
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
--- 602,611 ----
(_("Emit_CannotImportRefType"));
}
! lock(typeof(AssemblyBuilder))
! {
! return new TypeToken
!
(TypeBuilder.ClrTypeImport
! (privateData,
((ClrType)type).ClrHandle));
! }
}
throw new
InvalidOperationException(_("Emit_CannotImportItem"));
***************
*** 654,657 ****
--- 675,684 ----
EndSync();
}
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: PropertyBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/PropertyBuilder.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** PropertyBuilder.cs 22 Mar 2003 05:12:30 -0000 1.5
--- PropertyBuilder.cs 22 Mar 2003 05:55:13 -0000 1.6
***************
*** 30,34 ****
using System.Runtime.CompilerServices;
! public sealed class PropertyBuilder : PropertyInfo, IClrProgramItem
{
// Internal state.
--- 30,35 ----
using System.Runtime.CompilerServices;
! public sealed class PropertyBuilder
! : PropertyInfo, IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 60,63 ****
--- 61,67 ----
this.setMethod = null;
+ // Register this item to be detached later.
+ type.module.assembly.AddDetach(this);
+
// Create the property signature.
SignatureHelper helper =
***************
*** 66,72 ****
// Create the property.
! this.privateData = ClrPropertyCreate
! (((IClrProgramItem)type).ClrHandle,
name,
! attributes, helper.sig);
}
--- 70,79 ----
// Create the property.
! lock(typeof(AssemblyBuilder))
! {
! this.privateData = ClrPropertyCreate
!
(((IClrProgramItem)type).ClrHandle, name,
! attributes, helper.sig);
! }
}
***************
*** 81,87 ****
throw new
ArgumentNullException("mdBuilder");
}
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Other,
!
type.module.GetMethodToken(mdBuilder));
}
finally
--- 88,97 ----
throw new
ArgumentNullException("mdBuilder");
}
! lock(typeof(AssemblyBuilder))
! {
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Other,
!
type.module.GetMethodToken(mdBuilder));
! }
}
finally
***************
*** 177,181 ****
type.StartSync();
FieldBuilder.ValidateConstant(returnType, defaultValue);
! ClrPropertySetConstant(privateData,
defaultValue);
}
finally
--- 187,194 ----
type.StartSync();
FieldBuilder.ValidateConstant(returnType, defaultValue);
! lock(typeof(AssemblyBuilder))
! {
!
ClrPropertySetConstant(privateData, defaultValue);
! }
}
finally
***************
*** 228,234 ****
(_("Emit_GetAlreadyDefined"));
}
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Getter,
!
type.module.GetMethodToken(mdBuilder));
getMethod = mdBuilder;
}
--- 241,250 ----
(_("Emit_GetAlreadyDefined"));
}
! lock(typeof(AssemblyBuilder))
! {
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Getter,
!
type.module.GetMethodToken(mdBuilder));
! }
getMethod = mdBuilder;
}
***************
*** 254,260 ****
(_("Emit_SetAlreadyDefined"));
}
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Setter,
!
type.module.GetMethodToken(mdBuilder));
setMethod = mdBuilder;
}
--- 270,279 ----
(_("Emit_SetAlreadyDefined"));
}
! lock(typeof(AssemblyBuilder))
! {
! ClrPropertyAddSemantics
! (privateData,
MethodSemanticsAttributes.Setter,
!
type.module.GetMethodToken(mdBuilder));
! }
setMethod = mdBuilder;
}
***************
*** 283,288 ****
get
{
! return (PropertyAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
}
}
--- 302,310 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return (PropertyAttributes)
!
ClrHelpers.GetMemberAttrs(privateData);
! }
}
}
***************
*** 320,324 ****
get
{
! return ClrHelpers.GetName(this);
}
}
--- 342,349 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrHelpers.GetName(this);
! }
}
}
***************
*** 329,334 ****
get
{
! return new PropertyToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
}
--- 354,362 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return new PropertyToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
}
***************
*** 359,362 ****
--- 387,396 ----
return privateData;
}
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
Index: SignatureHelper.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/SignatureHelper.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** SignatureHelper.cs 22 Mar 2003 05:12:30 -0000 1.2
--- SignatureHelper.cs 22 Mar 2003 05:55:13 -0000 1.3
***************
*** 32,36 ****
using System.Runtime.CompilerServices;
! public sealed class SignatureHelper
{
// Internal state.
--- 32,36 ----
using System.Runtime.CompilerServices;
! public sealed class SignatureHelper : IDetachItem
{
// Internal state.
***************
*** 49,52 ****
--- 49,54 ----
this.numArgs = 0;
this.callConv = (CallingConvention)0;
+ ((ModuleBuilder)mod).assembly.AddDetach(this);
+
}
private SignatureHelper(Module mod, IntPtr context, IntPtr sig,
***************
*** 58,61 ****
--- 60,64 ----
this.numArgs = 0;
this.callConv = callConv;
+ ((ModuleBuilder)mod).assembly.AddDetach(this);
}
***************
*** 124,128 ****
internal static IntPtr CSToILType(Module mod, Type type)
{
! return CSToILType(mod, ModuleToContext(mod),
type);
}
--- 127,134 ----
internal static IntPtr CSToILType(Module mod, Type type)
{
! lock(typeof(AssemblyBuilder))
! {
! return CSToILType(mod,
ModuleToContext(mod), type);
! }
}
***************
*** 130,136 ****
public static SignatureHelper GetFieldSigHelper(Module mod)
{
! IntPtr context = ModuleToContext(mod);
! return new SignatureHelper
! (mod, context,
ClrSigCreateField(context));
}
--- 136,145 ----
public static SignatureHelper GetFieldSigHelper(Module mod)
{
! lock(typeof(AssemblyBuilder))
! {
! IntPtr context = ModuleToContext(mod);
! return new SignatureHelper
! (mod, context,
ClrSigCreateField(context));
! }
}
***************
*** 138,144 ****
public static SignatureHelper GetLocalVarSigHelper(Module mod)
{
! IntPtr context = ModuleToContext(mod);
! return new SignatureHelper
! (mod, context,
ClrSigCreateLocal(context));
}
--- 147,156 ----
public static SignatureHelper GetLocalVarSigHelper(Module mod)
{
! lock(typeof(AssemblyBuilder))
! {
! IntPtr context = ModuleToContext(mod);
! return new SignatureHelper
! (mod, context,
ClrSigCreateLocal(context));
! }
}
***************
*** 149,185 ****
Type[] parameterTypes)
{
! // Convert the module into a signature create
context.
! IntPtr context = ModuleToContext(mod);
!
! // Determine the calling convention flags to
use.
! int conv = 0; /* default */
! if((callConv & CallingConventions.VarArgs) != 0)
! {
! conv = 0x05; /* vararg */
! }
! if((callConv & CallingConventions.HasThis) != 0)
! {
! conv |= 0x20; /* hasthis */
! }
! if((callConv & CallingConventions.ExplicitThis)
!= 0)
{
! conv |= 0x40; /* explicitthis */
! }
! // Create the basic signature helper.
! IntPtr sig = ClrSigCreateMethod
! (context, conv, CSToILType(mod,
context, returnType));
! SignatureHelper helper = new SignatureHelper
! (mod, context, sig, unmanagedCallConv);
! // Add the parameters to the helper.
! if(parameterTypes != null)
! {
! foreach(Type type in parameterTypes)
{
! helper.AddArgument(type);
}
}
- return helper;
}
public static SignatureHelper GetMethodSigHelper
--- 161,200 ----
Type[] parameterTypes)
{
! lock(typeof(AssemblyBuilder))
{
! // Convert the module into a signature
create context.
! IntPtr context = ModuleToContext(mod);
!
! // Determine the calling convention
flags to use.
! int conv = 0; /* default */
! if((callConv &
CallingConventions.VarArgs) != 0)
! {
! conv = 0x05; /* vararg */
! }
! if((callConv &
CallingConventions.HasThis) != 0)
! {
! conv |= 0x20; /* hasthis */
! }
! if((callConv &
CallingConventions.ExplicitThis) != 0)
! {
! conv |= 0x40; /* explicitthis
*/
! }
! // Create the basic signature helper.
! IntPtr sig = ClrSigCreateMethod
! (context, conv, CSToILType(mod,
context, returnType));
! SignatureHelper helper = new
SignatureHelper
! (mod, context, sig,
unmanagedCallConv);
! // Add the parameters to the helper.
! if(parameterTypes != null)
{
! foreach(Type type in
parameterTypes)
! {
!
helper.AddArgument(type);
! }
}
+ return helper;
}
}
public static SignatureHelper GetMethodSigHelper
***************
*** 209,216 ****
(Module mod, MethodToken token)
{
! IntPtr context = ModuleToContext(mod);
! IntPtr sig = ClrSigCreateMethodCopy
! (context, mod.privateData, token.Token);
! return new SignatureHelper(mod, context, sig);
}
--- 224,234 ----
(Module mod, MethodToken token)
{
! lock(typeof(AssemblyBuilder))
! {
! IntPtr context = ModuleToContext(mod);
! IntPtr sig = ClrSigCreateMethodCopy
! (context, mod.privateData,
token.Token);
! return new SignatureHelper(mod,
context, sig);
! }
}
***************
*** 219,240 ****
(Module mod, Type returnType, Type[]
parameterTypes)
{
! // Convert the module into a signature create
context.
! IntPtr context = ModuleToContext(mod);
! // Create the basic signature helper.
! IntPtr sig = ClrSigCreateProperty
! (context, CSToILType(mod, context,
returnType));
! SignatureHelper helper = new SignatureHelper
! (mod, context, sig);
! // Add the parameters to the helper.
! if(parameterTypes != null)
! {
! foreach(Type type in parameterTypes)
{
! helper.AddArgument(type);
}
}
- return helper;
}
--- 237,261 ----
(Module mod, Type returnType, Type[]
parameterTypes)
{
! lock(typeof(AssemblyBuilder))
! {
! // Convert the module into a signature
create context.
! IntPtr context = ModuleToContext(mod);
! // Create the basic signature helper.
! IntPtr sig = ClrSigCreateProperty
! (context, CSToILType(mod,
context, returnType));
! SignatureHelper helper = new
SignatureHelper
! (mod, context, sig);
! // Add the parameters to the helper.
! if(parameterTypes != null)
{
! foreach(Type type in
parameterTypes)
! {
!
helper.AddArgument(type);
! }
}
+ return helper;
}
}
***************
*** 242,256 ****
public void AddArgument(Type clsArgument)
{
! if(clsArgument == null)
! {
! throw new
ArgumentNullException("clsArgument");
! }
! IntPtr type = CSToILType(mod, context,
clsArgument);
! if(!ClrSigAddArgument(context, sig, type))
{
! throw new InvalidOperationException
! (_("Emit_InvalidSigArgument"));
}
- ++numArgs;
}
--- 263,280 ----
public void AddArgument(Type clsArgument)
{
! lock(typeof(AssemblyBuilder))
{
! if(clsArgument == null)
! {
! throw new
ArgumentNullException("clsArgument");
! }
! IntPtr type = CSToILType(mod, context,
clsArgument);
! if(!ClrSigAddArgument(context, sig,
type))
! {
! throw new
InvalidOperationException
!
(_("Emit_InvalidSigArgument"));
! }
! ++numArgs;
}
}
***************
*** 258,265 ****
public void AddSentinel()
{
! if(!ClrSigAddSentinel(context, sig))
{
! throw new InvalidOperationException
! (_("Emit_InvalidSigArgument"));
}
}
--- 282,292 ----
public void AddSentinel()
{
! lock(typeof(AssemblyBuilder))
{
! if(!ClrSigAddSentinel(context, sig))
! {
! throw new
InvalidOperationException
!
(_("Emit_InvalidSigArgument"));
! }
}
}
***************
*** 268,279 ****
public override bool Equals(Object obj)
{
! SignatureHelper helper = (obj as
SignatureHelper);
! if(helper != null && helper.mod == mod)
! {
! return ClrSigIdentical(sig, helper.sig);
! }
! else
{
! return false;
}
}
--- 295,309 ----
public override bool Equals(Object obj)
{
! lock(typeof(AssemblyBuilder))
{
! SignatureHelper helper = (obj as
SignatureHelper);
! if(helper != null && helper.mod == mod)
! {
! return ClrSigIdentical(sig,
helper.sig);
! }
! else
! {
! return false;
! }
}
}
***************
*** 282,286 ****
public override int GetHashCode()
{
! return ClrSigGetHashCode(sig);
}
--- 312,319 ----
public override int GetHashCode()
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrSigGetHashCode(sig);
! }
}
***************
*** 288,292 ****
public byte[] GetSignature()
{
! return ClrSigGetBytes(mod.privateData, sig);
}
--- 321,328 ----
public byte[] GetSignature()
{
! lock(typeof(AssemblyBuilder))
! {
! return ClrSigGetBytes(mod.privateData,
sig);
! }
}
***************
*** 314,317 ****
--- 350,360 ----
builder.Append(Environment.NewLine);
return builder.ToString();
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ context = IntPtr.Zero;
+ sig = IntPtr.Zero;
}
Index: TypeBuilder.cs
===================================================================
RCS file:
/cvsroot/dotgnu-pnet/pnetlib/runtime/System/Reflection/Emit/TypeBuilder.cs,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** TypeBuilder.cs 22 Mar 2003 05:12:30 -0000 1.6
--- TypeBuilder.cs 22 Mar 2003 05:55:13 -0000 1.7
***************
*** 34,38 ****
using System.Security.Permissions;
! public sealed class TypeBuilder : Type, IClrProgramItem
{
// Internal state.
--- 34,38 ----
using System.Security.Permissions;
! public sealed class TypeBuilder : Type, IClrProgramItem, IDetachItem
{
// Internal state.
***************
*** 90,106 ****
this.needsDefaultConstructor = true;
// Create the type.
! privateData = ClrTypeCreate
! (((IClrProgramItem)module).ClrHandle,
name,
! (nspace == String.Empty ? null :
nspace), attr,
! (parent == null ? new
System.Reflection.Emit.TypeToken(0)
! :
module.GetTypeToken(parent)));
! if(packingSize != PackingSize.Unspecified)
! {
! ClrTypeSetPackingSize(privateData,
(int)packingSize);
! }
! if(typeSize != UnspecifiedTypeSize)
{
! ClrTypeSetClassSize(privateData,
typeSize);
}
--- 90,113 ----
this.needsDefaultConstructor = true;
+ // Register this item to be detached later.
+ module.assembly.AddDetach(this);
+
// Create the type.
! lock(typeof(AssemblyBuilder))
{
! privateData = ClrTypeCreate
!
(((IClrProgramItem)module).ClrHandle, name,
! (nspace == String.Empty ? null
: nspace), attr,
! (parent == null
! ? new
System.Reflection.Emit.TypeToken(0)
! :
module.GetTypeToken(parent)));
! if(packingSize !=
PackingSize.Unspecified)
! {
!
ClrTypeSetPackingSize(privateData, (int)packingSize);
! }
! if(typeSize != UnspecifiedTypeSize)
! {
!
ClrTypeSetClassSize(privateData, typeSize);
! }
}
***************
*** 219,223 ****
get
{
! return
(PackingSize)(ClrTypeGetPackingSize(privateData));
}
}
--- 226,234 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return (PackingSize)
!
(ClrTypeGetPackingSize(privateData));
! }
}
}
***************
*** 237,241 ****
get
{
! return ClrTypeGetClassSize(privateData);
}
}
--- 248,255 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return
ClrTypeGetClassSize(privateData);
! }
}
}
***************
*** 255,260 ****
get
{
! return new
System.Reflection.Emit.TypeToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
}
}
--- 269,277 ----
get
{
! lock(typeof(AssemblyBuilder))
! {
! return new
System.Reflection.Emit.TypeToken
!
(AssemblyBuilder.ClrGetItemToken(privateData));
! }
}
}
***************
*** 398,402 ****
// Call the runtime engine to add the
interface.
! ClrTypeAddInterface(privateData, token);
}
finally
--- 415,422 ----
// Call the runtime engine to add the
interface.
! lock(typeof(AssemblyBuilder))
! {
!
ClrTypeAddInterface(privateData, token);
! }
}
finally
***************
*** 453,460 ****
// Wrap "privateData" in a "ClrType"
object and return it.
! ClrType clrType = new ClrType();
! clrType.privateData = privateData;
! type = clrType;
! return type;
}
finally
--- 473,488 ----
// Wrap "privateData" in a "ClrType"
object and return it.
! lock(typeof(AssemblyBuilder))
! {
! if(privateData == IntPtr.Zero)
! {
! throw new
InvalidOperationException
!
(_("Emit_TypeInvalid"));
! }
! ClrType clrType = new ClrType();
! clrType.privateData =
privateData;
! type = clrType;
! return type;
! }
}
finally
***************
*** 1088,1092 ****
{
StartSync();
! ClrTypeSetParent(privateData,
module.GetTypeToken(parent));
this.parent = parent;
}
--- 1116,1124 ----
{
StartSync();
! lock(typeof(AssemblyBuilder))
! {
! ClrTypeSetParent
! (privateData,
module.GetTypeToken(parent));
! }
this.parent = parent;
}
***************
*** 1123,1126 ****
--- 1155,1164 ----
{
methods.Add(method);
+ }
+
+ // Detach this item.
+ void IDetachItem.Detach()
+ {
+ privateData = IntPtr.Zero;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnetlib/runtime/System/Reflection/Emit AssemblyBuilder.cs,1.5,1.6 ConstructorBuilder.cs,1.4,1.5 EventBuilder.cs,1.4,1.5 FieldBuilder.cs,1.5,1.6 ILGenerator.cs,1.7,1.8 MethodBuilder.cs,1.4,1.5 ModuleBuilder.cs,1.6,1.7 PropertyBuilder.cs,1.5,1.6 SignatureHelper.cs,1.2,1.3 TypeBuilder.cs,1.6,1.7,
Rhys Weatherley <address@hidden> <=
- Prev by Date:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.758,1.759
- Next by Date:
[Dotgnu-pnet-commits] CVS: pnet config.guess,1.2,1.3 config.sub,1.2,1.3 ChangeLog,1.2258,1.2259
- Previous by thread:
[Dotgnu-pnet-commits] CVS: pnetlib ChangeLog,1.758,1.759
- Next by thread:
[Dotgnu-pnet-commits] CVS: pnet config.guess,1.2,1.3 config.sub,1.2,1.3 ChangeLog,1.2258,1.2259
- Index(es):