2010-05-19 Jb Evain <jbevain@novell.com>
[mcs.git] / ilasm / scanner / ILToken.cs
blob78cabb6cd076f3502005a34ee5d9b4779318f71a
1 // ILToken.cs
2 // Author: Sergey Chaban (serge@wildwestsoftware.com)
5 using System;
7 namespace Mono.ILASM {
9 public class ILToken : ICloneable {
10 internal int token;
11 internal object val;
13 public static readonly ILToken Invalid;
14 public static readonly ILToken EOF;
16 public static readonly ILToken Dot;
18 public static readonly ILToken OpenBrace;
19 public static readonly ILToken CloseBrace;
20 public static readonly ILToken OpenBracket;
21 public static readonly ILToken CloseBracket;
22 public static readonly ILToken OpenParens;
23 public static readonly ILToken CloseParens;
24 public static readonly ILToken Comma;
25 public static readonly ILToken Colon;
26 public static readonly ILToken DoubleColon;
27 public static readonly ILToken Semicolon;
28 public static readonly ILToken Assign;
29 public static readonly ILToken Star;
30 public static readonly ILToken Ampersand;
31 public static readonly ILToken Plus;
32 public static readonly ILToken Slash;
33 public static readonly ILToken Bang;
34 public static readonly ILToken Ellipsis;
35 public static readonly ILToken Dash;
36 public static readonly ILToken OpenAngleBracket;
37 public static readonly ILToken CloseAngleBracket;
39 private static readonly ILToken [] punctuations;
41 /// <summary>
42 /// </summary>
43 static ILToken ()
45 Invalid = new ILToken (-1, "invalid");
46 EOF = new ILToken (Token.EOF, "eof");
48 Dot = new ILToken (Token.DOT, ".");
49 OpenBrace = new ILToken (Token.OPEN_BRACE, "{");
50 CloseBrace = new ILToken (Token.CLOSE_BRACE, "}");
51 OpenBracket = new ILToken (Token.OPEN_BRACKET, "[");
52 CloseBracket = new ILToken (Token.CLOSE_BRACKET, "]");
53 OpenParens = new ILToken (Token.OPEN_PARENS, "(");
54 CloseParens = new ILToken (Token.CLOSE_PARENS, ")");
55 Comma = new ILToken (Token.COMMA, ",");
56 Colon = new ILToken (Token.COLON, ":");
57 DoubleColon = new ILToken (Token.DOUBLE_COLON, "::");
58 Semicolon = new ILToken (Token.SEMICOLON, ";");
59 Assign = new ILToken (Token.ASSIGN, "=");
60 Star = new ILToken (Token.STAR, "*");
61 Ampersand = new ILToken (Token.AMPERSAND, "&");
62 Plus = new ILToken (Token.PLUS, "+");
63 Slash = new ILToken (Token.SLASH, "/");
64 Bang = new ILToken (Token.BANG, "!");
65 Ellipsis = new ILToken (Token.ELLIPSIS, "...");
66 Dash = new ILToken (Token.DASH, "-");
67 OpenAngleBracket = new ILToken (Token.OPEN_ANGLE_BRACKET, "<");
68 CloseAngleBracket = new ILToken (Token.CLOSE_ANGLE_BRACKET, ">");
70 punctuations = new ILToken [] {
71 OpenBrace, CloseBrace,
72 OpenBracket, CloseBracket,
73 OpenParens, CloseParens,
74 Comma, Colon, Semicolon,
75 Assign, Star, Ampersand,
76 Plus, Slash, Bang,
77 OpenAngleBracket, CloseAngleBracket
81 /// <summary>
82 /// </summary>
83 public ILToken ()
87 /// <summary>
88 /// </summary>
89 /// <param name="token"></param>
90 /// <param name="val"></param>
91 public ILToken (int token, object val)
93 this.token = token;
94 this.val = val;
98 /// <summary>
99 /// </summary>
100 /// <param name="that"></param>
101 public ILToken (ILToken that)
103 this.token = that.token;
104 this.val = that.val;
109 /// <summary>
110 /// </summary>
111 public int TokenId {
112 get {
113 return token;
117 /// <summary>
118 /// </summary>
119 public object Value {
120 get {
121 return val;
126 /// <summary>
127 /// </summary>
128 /// <param name="that"></param>
129 public virtual void CopyFrom (ILToken that)
131 this.token = that.token;
132 this.val = that.val;
136 /// <summary>
137 /// </summary>
138 /// <returns></returns>
139 public virtual object Clone ()
141 return new ILToken (this);
145 /// <summary>
146 /// </summary>
147 /// <returns></returns>
148 public override int GetHashCode ()
150 int h = token;
151 if (val != null) h ^= val.GetHashCode ();
152 return h;
156 /// <summary>
157 /// </summary>
158 /// <returns></returns>
159 public override string ToString ()
161 return (token.ToString() + " : " + (val != null ? val.ToString () : "<null>"));
165 /// <summary>
166 /// </summary>
167 /// <param name="o"></param>
168 /// <returns></returns>
169 public override bool Equals (object o)
171 bool res = (o != null);
173 if (res) {
174 res = Object.ReferenceEquals (this, o);
175 if (!res) {
176 res = o is ILToken;
177 if (res) {
178 ILToken that = o as ILToken;
179 res = (this.token == that.token) && (this.val.Equals (that.val));
184 return res;
188 private static bool EqImpl (ILToken t1, ILToken t2)
190 bool res = false;
191 if ((t1 as object) != null) {
192 res = t1.Equals (t2);
193 } else {
194 res = ((t2 as object) == null);
197 return res;
201 /// <summary>
202 /// </summary>
203 /// <param name="t1"></param>
204 /// <param name="t2"></param>
205 /// <returns></returns>
206 public static bool operator == (ILToken t1, ILToken t2)
208 return EqImpl (t1, t2);
211 /// <summary>
212 /// </summary>
213 /// <param name="t1"></param>
214 /// <param name="t2"></param>
215 /// <returns></returns>
216 public static bool operator != (ILToken t1, ILToken t2)
218 return !EqImpl (t1, t2);
223 /// <summary>
224 /// </summary>
225 /// <param name="ch"></param>
226 /// <returns></returns>
227 public static ILToken GetPunctuation (int ch)
229 int id = "{}[](),:;=*&+/!<>".IndexOf ((char) ch);
230 ILToken res = null;
232 if (id != -1) {
233 res = punctuations [id];
236 return res;