- 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:
jfrijters 2012-07-16 15:13:58 +00:00
Родитель 6bbc61f69c
Коммит 2c6ce2c364
1 изменённых файлов: 35 добавлений и 9 удалений

Просмотреть файл

@ -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; }
}
}