2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / ilasm / scanner / InstrToken.cs
1 // InstrToken.cs\r
2 // Author: Sergey Chaban (serge@wildwestsoftware.com)\r
3 \r
4 using System;\r
5 using System.Reflection.Emit;\r
6 \r
7 namespace Mono.ILASM {\r
8 \r
9         public class InstrToken : ILToken {\r
10 \r
11 \r
12                 /// <summary>\r
13                 /// </summary>\r
14                 public InstrToken (OpCode opcode)\r
15                 {\r
16                         this.val = opcode;\r
17                         token = GetInstrType (opcode);\r
18                 }\r
19 \r
20 \r
21                 /// <summary>\r
22                 /// </summary>\r
23                 /// <param name="opcode"></param>\r
24                 /// <returns></returns>\r
25                 public static int GetInstrType (OpCode opcode)\r
26                 {\r
27                         OperandType t = opcode.OperandType;\r
28                         int token = Token.UNKNOWN;\r
29 \r
30                         switch (t) {\r
31 \r
32                                 case OperandType.InlineBrTarget:\r
33                                 case OperandType.ShortInlineBrTarget:\r
34                                         token = Token.INSTR_BRTARGET;\r
35                                         break;\r
36 \r
37                                 case OperandType.InlineField:\r
38                                         token = Token.INSTR_FIELD;\r
39                                         break;\r
40 \r
41                                 case OperandType.InlineI:\r
42                                 case OperandType.ShortInlineI:\r
43                                         token = Token.INSTR_I;\r
44                                         break;\r
45 \r
46                                 case OperandType.InlineI8:\r
47                                         token = Token.INSTR_I8;\r
48                                         break;\r
49 \r
50                                 case OperandType.InlineMethod:\r
51                                         token = Token.INSTR_METHOD;\r
52                                         break;\r
53 \r
54                                 case OperandType.InlineNone:\r
55                                         token = Token.INSTR_NONE;\r
56                                         break;\r
57 \r
58                                 case OperandType.InlinePhi:\r
59                                         token = Token.INSTR_PHI;\r
60                                         break;\r
61 \r
62                                 case OperandType.InlineR:\r
63                                 case OperandType.ShortInlineR:\r
64                                         token = Token.INSTR_R;\r
65                                         break;\r
66 \r
67                                 /*\r
68                                 case OperandType.InlineRVA:\r
69                                         token = Token.INSTR_RVA;\r
70                                         break;\r
71                                 */\r
72 \r
73                                 case OperandType.InlineSig:\r
74                                         token = Token.INSTR_SIG;\r
75                                         break;\r
76 \r
77                                 case OperandType.InlineString:\r
78                                         token = Token.INSTR_STRING;\r
79                                         break;\r
80 \r
81                                 case OperandType.InlineSwitch:\r
82                                         token = Token.INSTR_SWITCH;\r
83                                         break;\r
84 \r
85                                 case OperandType.InlineTok:\r
86                                         token = Token.INSTR_TOK;\r
87                                         break;\r
88 \r
89                                 case OperandType.InlineType:\r
90                                         token = Token.INSTR_TYPE;\r
91                                         break;\r
92 \r
93                                 case OperandType.InlineVar:\r
94                                 case OperandType.ShortInlineVar:\r
95                                         token = Token.INSTR_VAR;\r
96                                         break;\r
97                         }\r
98 \r
99                         return token;\r
100                 }\r
101 \r
102 \r
103         }\r
104 \r
105 }\r