This commit is contained in:
jfrijters 2009-03-03 08:12:29 +00:00
Родитель 2b305fcb7e
Коммит a6da072555
4 изменённых файлов: 117 добавлений и 2 удалений

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

@ -203,6 +203,16 @@ namespace IKVM.Reflection.Emit
get { return pseudoToken; }
}
public override Type[] GetOptionalCustomModifiers()
{
return MethodBuilder.Copy(optionalCustomModifiers);
}
public override Type[] GetRequiredCustomModifiers()
{
return MethodBuilder.Copy(requiredCustomModifiers);
}
internal void WriteFieldRecords(MetadataWriter mw)
{
mw.Write((short)attribs);
@ -225,4 +235,92 @@ namespace IKVM.Reflection.Emit
return other.ImportField(typeBuilder, name, fieldType, optionalCustomModifiers, requiredCustomModifiers);
}
}
sealed class FieldInstance : FieldInfo
{
private readonly Type type;
private readonly FieldInfo field;
internal FieldInstance(Type type, FieldInfo field)
{
this.type = type;
this.field = field;
}
public override bool Equals(object obj)
{
FieldInstance other = obj as FieldInstance;
return other != null && other.type == type && other.field == field;
}
public override int GetHashCode()
{
return type.GetHashCode() * 23 + field.GetHashCode();
}
public override FieldAttributes Attributes
{
get { throw new NotImplementedException(); }
}
public override RuntimeFieldHandle FieldHandle
{
get { throw new NotImplementedException(); }
}
public override Type FieldType
{
get { return field.FieldType; }
}
public override object GetValue(object obj)
{
throw new NotImplementedException();
}
public override void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
public override Type DeclaringType
{
get { return type; }
}
public override object[] GetCustomAttributes(Type attributeType, bool inherit)
{
throw new NotImplementedException();
}
public override object[] GetCustomAttributes(bool inherit)
{
throw new NotImplementedException();
}
public override bool IsDefined(Type attributeType, bool inherit)
{
throw new NotImplementedException();
}
public override string Name
{
get { return field.Name; }
}
public override Type ReflectedType
{
get { return type; }
}
public override Type[] GetOptionalCustomModifiers()
{
return field.GetOptionalCustomModifiers();
}
public override Type[] GetRequiredCustomModifiers()
{
return field.GetRequiredCustomModifiers();
}
}
}

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

@ -618,7 +618,14 @@ namespace IKVM.Reflection.Emit
public void Emit(OpCode opc, Type type)
{
Emit(opc);
code.Write(moduleBuilder.GetTypeToken(type).Token);
if (opc.Value == OpCodes.Ldtoken.Value)
{
code.Write(moduleBuilder.GetTypeToken(type).Token);
}
else
{
code.Write(moduleBuilder.GetTypeTokenForMemberRef(type).Token);
}
}
public void EmitCall(OpCode opc, MethodInfo methodInfo, Type[] optionalParameterTypes)

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

@ -395,7 +395,7 @@ namespace IKVM.Reflection.Emit
}
}
private TypeToken GetTypeTokenForMemberRef(Type type)
internal TypeToken GetTypeTokenForMemberRef(Type type)
{
if (type.IsGenericTypeDefinition)
{

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

@ -594,6 +594,11 @@ namespace IKVM.Reflection.Emit
get { return token; }
}
public static FieldInfo GetField(Type type, FieldInfo field)
{
return new FieldInstance(type, field);
}
internal void WriteTypeDefRecord(MetadataWriter mw, ref int fieldList, ref int methodList)
{
mw.Write((int)attribs);
@ -1001,6 +1006,11 @@ namespace IKVM.Reflection.Emit
get { return false; }
}
public override Type GetGenericTypeDefinition()
{
return typeBuilder;
}
internal override int GetTypeToken()
{
if (token == 0)