Cosmos/source/Indy.IL2CPU/IL/CustomMethodImplementationProxyOp.cs
mterwoord_cp acaa8e0a89
2009-10-17 13:45:47 +00:00

55 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Indy.IL2CPU.IL {
public abstract class CustomMethodImplementationProxyOp: Op {
public readonly MethodInformation MethodInfo;
public CustomMethodImplementationProxyOp(ILReader aReader, MethodInformation aMethodInfo)
: base(aReader, aMethodInfo) {
if(aMethodInfo==null)
{
Console.Write("");
}
MethodInfo = aMethodInfo;
}
public MethodBase ProxiedMethod;
protected abstract void Ldarg(int aIndex);
protected abstract void Ldflda(TypeInformation aType, TypeInformation.Field aField);
protected abstract void CallProxiedMethod();
protected abstract void Ldloc(int index);
public sealed override void DoAssemble() {
//bool isFirst = true;
//int curIndex = 0;
//ParameterInfo[] xParams = ProxiedMethod.GetParameters();
//foreach (var xParam in xParams) {
// if (isFirst && (!MethodInfo.Method.IsStatic)) {
// isFirst = false;
// Ldarg(curIndex++);
// } else {
// FieldAccessAttribute xFieldAccess = (FieldAccessAttribute)xParam.GetCustomAttributes(typeof(FieldAccessAttribute), true).FirstOrDefault();
// if (xFieldAccess != null) {
// Ldarg(0);
// if(MethodInfo==null || MethodInfo.TypeInfo==null || MethodInfo.TypeInfo.Fields==null||xFieldAccess==null)
// {
// Console.Write("");
// }
// if (!MethodInfo.TypeInfo.Fields.ContainsKey(xFieldAccess.Name)) {
// throw new Exception("Field '" + xFieldAccess.Name + "' not found!");
// }
// Ldflda(MethodInfo.TypeInfo, MethodInfo.TypeInfo.Fields[xFieldAccess.Name]);
// } else {
// Ldarg(curIndex++);
// }
// }
//}
//CallProxiedMethod();
throw new NotImplementedException();
}
}
}