2 // Author: Sergey Chaban (serge@wildwestsoftware.com)
\r
7 using System.Reflection.Emit;
\r
9 namespace Mono.ILASM {
\r
11 public class InstrToken : ILToken {
\r
16 public InstrToken (OpCode opcode)
\r
19 token = GetInstrType (opcode);
\r
25 /// <param name="opcode"></param>
\r
26 /// <returns></returns>
\r
27 public static int GetInstrType (OpCode opcode)
\r
29 OperandType t = opcode.OperandType;
\r
30 int token = Token.UNKNOWN;
\r
34 case OperandType.InlineBrTarget:
\r
35 case OperandType.ShortInlineBrTarget:
\r
36 token = Token.INSTR_BRTARGET;
\r
39 case OperandType.InlineField:
\r
40 token = Token.INSTR_FIELD;
\r
43 case OperandType.InlineI:
\r
44 case OperandType.ShortInlineI:
\r
45 token = Token.INSTR_I;
\r
48 case OperandType.InlineI8:
\r
49 token = Token.INSTR_I8;
\r
52 case OperandType.InlineMethod:
\r
53 token = Token.INSTR_METHOD;
\r
56 case OperandType.InlineNone:
\r
57 token = Token.INSTR_NONE;
\r
60 case OperandType.InlinePhi:
\r
61 token = Token.INSTR_PHI;
\r
64 case OperandType.InlineR:
\r
65 case OperandType.ShortInlineR:
\r
66 token = Token.INSTR_R;
\r
70 case OperandType.InlineRVA:
\r
71 token = Token.INSTR_RVA;
\r
75 case OperandType.InlineSig:
\r
76 token = Token.INSTR_SIG;
\r
79 case OperandType.InlineString:
\r
80 token = Token.INSTR_STRING;
\r
83 case OperandType.InlineSwitch:
\r
84 token = Token.INSTR_SWITCH;
\r
87 case OperandType.InlineTok:
\r
88 token = Token.INSTR_TOK;
\r
91 case OperandType.InlineType:
\r
92 token = Token.INSTR_TYPE;
\r
95 case OperandType.InlineVar:
\r
96 case OperandType.ShortInlineVar:
\r
97 token = Token.INSTR_VAR;
\r