Cosmos/source/Indy.IL2CPU/OpCodeMap.cs
mterwoord_cp d0a3089577
2007-08-29 15:23:08 +00:00

31 lines
No EOL
992 B
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using Indy.IL2CPU.IL;
using Mono.Cecil.Cil;
namespace Indy.IL2CPU {
public class OpCodeMap {
protected SortedList<Code, Op> mMap = new SortedList<Code, Op>();
public void LoadOpMapFromAssembly(string aAssemblyName){
Assembly xA = Assembly.Load(aAssemblyName);
foreach (Type t in (from item in xA.GetTypes()
where item.IsSubclassOf(typeof(Op)) && item.GetCustomAttributes(typeof(OpCodeAttribute), true).Length > 0
select item)) {
Op xOp = Activator.CreateInstance(t) as Op;
object[] xAttribs = t.GetCustomAttributes(typeof(OpCodeAttribute), true);
mMap.Add(((OpCodeAttribute)xAttribs[0]).OpCode, xOp);
}
}
public Op GetOpForOpCode(Code code) {
if (!mMap.ContainsKey(code)) {
throw new NotSupportedException("OpCode '" + code + "' not supported!");
}
return mMap[code];
}
}
}