зеркало из https://github.com/mono/ikvm-fork.git
- Fixed GenericTypeParameterBuilder.IsBaked (should also work for type parameters on methods).
- Implemented GenericTypeParameterBuilder.MetadataToken (after the type has been baked it should return the token). - Implemented GenericTypeParameterBuilder.GetCurrentToken() to allow custom attributes to be queried.
This commit is contained in:
Родитель
6bbc61f69c
Коммит
2c6ce2c364
|
@ -140,18 +140,23 @@ namespace IKVM.Reflection.Emit
|
|||
{
|
||||
get
|
||||
{
|
||||
if (type != null)
|
||||
{
|
||||
type.CheckBaked();
|
||||
}
|
||||
else
|
||||
{
|
||||
method.CheckBaked();
|
||||
}
|
||||
CheckBaked();
|
||||
return attr;
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckBaked()
|
||||
{
|
||||
if (type != null)
|
||||
{
|
||||
type.CheckBaked();
|
||||
}
|
||||
else
|
||||
{
|
||||
method.CheckBaked();
|
||||
}
|
||||
}
|
||||
|
||||
private void AddConstraint(Type type)
|
||||
{
|
||||
GenericParamConstraintTable.Record rec = new GenericParamConstraintTable.Record();
|
||||
|
@ -191,6 +196,15 @@ namespace IKVM.Reflection.Emit
|
|||
SetCustomAttribute(new CustomAttributeBuilder(con, binaryAttribute));
|
||||
}
|
||||
|
||||
public override int MetadataToken
|
||||
{
|
||||
get
|
||||
{
|
||||
CheckBaked();
|
||||
return (GenericParamTable.Index << 24) | paramPseudoIndex;
|
||||
}
|
||||
}
|
||||
|
||||
internal override int GetModuleBuilderToken()
|
||||
{
|
||||
if (typeToken == 0)
|
||||
|
@ -214,9 +228,21 @@ namespace IKVM.Reflection.Emit
|
|||
}
|
||||
}
|
||||
|
||||
internal override int GetCurrentToken()
|
||||
{
|
||||
if (this.ModuleBuilder.IsSaved)
|
||||
{
|
||||
return (GenericParamTable.Index << 24) | this.Module.GenericParam.GetIndexFixup()[paramPseudoIndex - 1] + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (GenericParamTable.Index << 24) | paramPseudoIndex;
|
||||
}
|
||||
}
|
||||
|
||||
internal override bool IsBaked
|
||||
{
|
||||
get { return type.IsBaked; }
|
||||
get { return ((MemberInfo)type ?? method).IsBaked; }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче