Merge pull request #5675 from mono/glib-debug-symbols
[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 #pragma warning disable 618\r
60                                 case OperandType.InlinePhi:\r
61                                         token = Token.INSTR_PHI;\r
62                                         break;\r
63 #pragma warning restore 618\r
64 \r
65                                 case OperandType.InlineR:\r
66                                 case OperandType.ShortInlineR:\r
67                                         token = Token.INSTR_R;\r
68                                         break;\r
69 \r
70                                 /*\r
71                                 case OperandType.InlineRVA:\r
72                                         token = Token.INSTR_RVA;\r
73                                         break;\r
74                                 */\r
75 \r
76                                 case OperandType.InlineSig:\r
77                                         token = Token.INSTR_SIG;\r
78                                         break;\r
79 \r
80                                 case OperandType.InlineString:\r
81                                         token = Token.INSTR_STRING;\r
82                                         break;\r
83 \r
84                                 case OperandType.InlineSwitch:\r
85                                         token = Token.INSTR_SWITCH;\r
86                                         break;\r
87 \r
88                                 case OperandType.InlineTok:\r
89                                         token = Token.INSTR_TOK;\r
90                                         break;\r
91 \r
92                                 case OperandType.InlineType:\r
93                                         token = Token.INSTR_TYPE;\r
94                                         break;\r
95 \r
96                                 case OperandType.InlineVar:\r
97                                 case OperandType.ShortInlineVar:\r
98                                         token = Token.INSTR_VAR;\r
99                                         break;\r
100                         }\r
101 \r
102                         return token;\r
103                 }\r
104 \r
105 \r
106         }\r
107 \r
108 }\r
109 \r
110 #endif\r