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