Merge pull request #4246 from Unity-Technologies/mcs-generic-constraint-enumerator
[mono.git] / mcs / ilasm / codegen / Types.cs
1 // Types.cs\r
2 // (C) Sergey Chaban (serge@wildwestsoftware.com)\r
3 \r
4 using System;\r
5 using System.Collections;\r
6 using System.Reflection;\r
7 \r
8 namespace Mono.ILASM {\r
9 \r
10         public class Types {\r
11 \r
12                 // maps default types to their library equivalents\r
13                 private static Hashtable defaultTypes;\r
14                 private static readonly object dummy;\r
15                 private Hashtable userTypes;\r
16 \r
17                 static Types ()\r
18                 {\r
19                         dummy = new Object ();\r
20 \r
21                         defaultTypes = new Hashtable ();\r
22                         Hashtable t = defaultTypes;\r
23 \r
24                         t ["object"]  = Type.GetType ("System.Object");\r
25                         t ["string"]  = Type.GetType ("System.String");\r
26                         t ["char"]    = Type.GetType ("System.Char");\r
27                         t ["void"]    = Type.GetType ("System.Void");\r
28                         t ["bool"]    = Type.GetType ("System.Boolean");\r
29                         t ["int8"]    = Type.GetType ("System.Byte");\r
30                         t ["int16"]   = Type.GetType ("System.Int16");\r
31                         t ["int32"]   = Type.GetType ("System.Int32");\r
32                         t ["int64"]   = Type.GetType ("System.Int64");\r
33                         t ["float32"] = Type.GetType ("System.Single");\r
34                         t ["float64"] = Type.GetType ("System.Double");\r
35                         t ["uint8"]   = Type.GetType ("System.SByte");\r
36                         t ["uint16"]  = Type.GetType ("System.UInt16");\r
37                         t ["uint32"]  = Type.GetType ("System.UInt32");\r
38                         t ["uint64"]  = Type.GetType ("System.UInt64");\r
39                 }\r
40 \r
41 \r
42                 /// <summary>\r
43                 /// </summary>\r
44                 public Types ()\r
45                 {\r
46                 }\r
47 \r
48 \r
49                 /// <summary>\r
50                 /// </summary>\r
51                 /// <param name="typeName"></param>\r
52                 /// <returns></returns>\r
53                 public Type Lookup (string typeName)\r
54                 {\r
55                         Type res = defaultTypes [typeName] as Type;\r
56                         return res;\r
57                 }\r
58 \r
59 \r
60                 /// <summary>\r
61                 /// </summary>\r
62                 /// <param name="name"></param>\r
63                 /// <param name="type"></param>\r
64                 public void Add (string name, Type type)\r
65                 {\r
66                         if (defaultTypes.Contains (name)) return;\r
67 \r
68                         if (userTypes == null) userTypes = new Hashtable ();\r
69                         userTypes [name] = (type != null) ? type : dummy;\r
70                 }\r
71 \r
72 \r
73                 /// <summary>\r
74                 /// </summary>\r
75                 /// <param name="name"></param>\r
76                 public void Add (string name){\r
77                         Add (name, null);\r
78                 }\r
79 \r
80         }\r
81 }\r
82 \r