Mercurial > projects > dil
annotate trunk/src/dil/semantic/Types.d @ 798:c24be8d4f6ab
Added documentation comments.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sat, 01 Mar 2008 02:53:06 +0100 |
parents | f7688996bf08 |
children | 9e6c6bb73e5f |
rev | line source |
---|---|
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 /++ |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 Author: Aziz Köksal |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 License: GPL3 |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
4 +/ |
617
0749f30ef2d0
Added member 'EnumType type' to class Enum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
615
diff
changeset
|
5 module dil.semantic.Types; |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
6 |
700
8e252b7c1459
Resolved cyclic dependency of dil.semantic.Types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
692
diff
changeset
|
7 import dil.semantic.Symbol; |
595
f6e5bff58b10
Moved dil.TypesEnum to dil.semantic.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
589
diff
changeset
|
8 import dil.semantic.TypesEnum; |
600
041eae272362
Moved dil.Identifier to dil.lexer.Identifier.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
595
diff
changeset
|
9 import dil.lexer.Identifier; |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
10 import dil.CompilerInfo; |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
11 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
12 /// The base type for all type structures. |
615
a05457530ac2
Added member ident to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
600
diff
changeset
|
13 abstract class Type/* : Symbol*/ |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
14 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
15 Type next; /// The next type in the type structure. |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
16 TYP tid; /// The ID of the type. |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
17 Symbol symbol; /// Not null if this type has a symbol. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
18 |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
19 this(){} |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
20 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
21 /// Constructs a Type object. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
22 /// Params: |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
23 /// next = the type's next type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
24 /// tid = the type's ID. |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
25 this(Type next, TYP tid) |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
26 { |
615
a05457530ac2
Added member ident to class Symbol.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
600
diff
changeset
|
27 // this.sid = SYM.Type; |
560
709e223a8eb9
Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
548
diff
changeset
|
28 |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
29 this.next = next; |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
30 this.tid = tid; |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
31 } |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
32 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
33 /// Returns a pointer type to this type. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
34 TypePointer ptrTo() |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
35 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
36 return new TypePointer(this); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
37 } |
527 | 38 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
39 /// Returns the byte size of this type. |
527 | 40 final size_t sizeOf() |
41 { | |
42 return MITable.getSize(this); | |
43 } | |
44 | |
45 /// Size is not in MITable. Find out via virtual method. | |
46 size_t sizeOf_() | |
47 { | |
48 return sizeOf(); | |
49 } | |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
50 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
51 /// Returns true if this type has a symbol. |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
52 bool hasSymbol() |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
53 { |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
54 return symbol !is null; |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
55 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
57 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
58 /// All basic types. E.g.: int, char, real etc. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
59 class TypeBasic : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
60 { |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
61 this(TYP typ) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
62 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
63 super(null, typ); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
64 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
66 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
67 /// Dynamic array type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
68 class TypeDArray : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
69 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
70 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
71 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
72 super(next, TYP.DArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
73 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
74 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
75 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
76 /// Associative array type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
77 class TypeAArray : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
78 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
79 Type keyType; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
80 this(Type next, Type keyType) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
81 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
82 super(next, TYP.AArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
83 this.keyType = keyType; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
84 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
85 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
86 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
87 /// Static array type. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
88 class TypeSArray : Type |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
89 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
90 size_t dimension; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
91 this(Type next, size_t dimension) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
92 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
93 super(next, TYP.SArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
94 this.dimension = dimension; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
95 } |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
96 } |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
97 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
98 /// Pointer type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
99 class TypePointer : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
100 { |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
101 this(Type next) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
102 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
103 super(next, TYP.Pointer); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
104 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
105 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
106 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
107 /// Reference type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
108 class TypeReference : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
109 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
110 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
111 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
112 super(next, TYP.Reference); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
113 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
114 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
115 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
116 /// Enum type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
117 class TypeEnum : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
118 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
119 this(Symbol symbol, Type baseType) |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
120 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
121 super(baseType, TYP.Enum); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
122 this.symbol = symbol; |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
123 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
124 |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
125 Type baseType() |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
126 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
127 return next; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
128 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
129 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
130 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
131 /// Struct type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
132 class TypeStruct : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
133 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
134 this(Symbol symbol) |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
135 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
136 super(null, TYP.Struct); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
137 this.symbol = symbol; |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
138 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
139 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
140 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
141 /// Class type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
142 class TypeClass : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
143 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
144 this(Symbol symbol) |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
145 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
146 super(null, TYP.Class); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
147 this.symbol = symbol; |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
148 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
149 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
150 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
151 /// Typedef type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
152 class TypeTypedef : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
153 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
154 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
155 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
156 super(next, TYP.Typedef); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
157 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
158 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
159 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
160 /// Function type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
161 class TypeFunction : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
162 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
163 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
164 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
165 super(next, TYP.Function); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
166 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
167 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
168 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
169 /// Delegate type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
170 class TypeDelegate : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
171 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
172 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
173 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
174 super(next, TYP.Delegate); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
175 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
176 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
177 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
178 /// Identifier type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
179 class TypeIdentifier : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
180 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
181 Identifier* ident; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
182 this(Identifier* ident) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
183 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
184 super(null, TYP.Identifier); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
185 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
186 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
187 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
188 /// Template instantiation type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
189 class TypeTemplInstance : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
190 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
191 this() |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
192 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
193 super(null, TYP.TInstance); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
194 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
195 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
196 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
197 /// Template tuple type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
198 class TypeTuple : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
199 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
200 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
201 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
202 super(next, TYP.Tuple); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
203 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
204 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
205 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
206 /// Constant type. D2.0 |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
207 class TypeConst : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
208 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
209 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
210 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
211 super(next, TYP.Const); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
212 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
213 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
214 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
215 /// Invariant type. D2.0 |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
216 class TypeInvariant : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
217 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
218 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
219 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
220 super(next, TYP.Const); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
221 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
222 } |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
223 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
224 /// Represents a value related to a Type. |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
225 union Value |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
226 { |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
227 void* pvoid; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
228 bool bool_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
229 dchar dchar_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
230 long long_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
231 ulong ulong_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
232 int int_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
233 uint uint_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
234 float float_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
235 double double_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
236 real real_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
237 creal creal_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
238 } |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
239 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
240 /// Information related to a Type. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
241 struct TypeMetaInfo |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
242 { |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
243 char mangle; /// Mangle character of the type. |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
244 ushort size; /// Byte size of the type. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
245 Value* defaultInit; /// Default initialization value. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
246 } |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
247 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
248 /// Namespace for the meta info table. |
527 | 249 struct MITable |
250 { | |
251 static: | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
252 const ushort SIZE_NOT_AVAILABLE = 0; /// Size not available. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
253 const Value VZERO = {int_:0}; /// Value 0. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
254 const Value VNULL = {pvoid:null}; /// Value null. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
255 const Value V0xFF = {dchar_:0xFF}; /// Value 0xFF. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
256 const Value V0xFFFF = {dchar_:0xFFFF}; /// Value 0xFFFF. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
257 const Value VFALSE = {bool_:false}; /// Value false. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
258 const Value VNAN = {float_:float.nan}; /// Value NAN. |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
259 const Value VCNAN = {creal_:creal.nan}; /// Value complex NAN. |
527 | 260 private alias SIZE_NOT_AVAILABLE SNA; |
261 private alias PTR_SIZE PS; | |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
262 /// The meta info table. |
527 | 263 private const TypeMetaInfo metaInfoTable[] = [ |
264 {'?', SNA}, // Error | |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
265 |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
266 {'a', 1, &V0xFF}, // Char |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
267 {'u', 2, &V0xFFFF}, // Wchar |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
268 {'w', 4, &V0xFFFF}, // Dchar |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
269 {'b', 1, &VFALSE}, // Bool |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
270 {'g', 1, &VZERO}, // Byte |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
271 {'h', 1, &VZERO}, // Ubyte |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
272 {'s', 2, &VZERO}, // Short |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
273 {'t', 2, &VZERO}, // Ushort |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
274 {'i', 4, &VZERO}, // Int |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
275 {'k', 4, &VZERO}, // Uint |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
276 {'l', 8, &VZERO}, // Long |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
277 {'m', 8, &VZERO}, // Ulong |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
278 {'?', 16, &VZERO}, // Cent |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
279 {'?', 16, &VZERO}, // Ucent |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
280 {'f', 4, &VNAN}, // Float |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
281 {'d', 8, &VNAN}, // Double |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
282 {'e', 12, &VNAN}, // Real |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
283 {'o', 4, &VNAN}, // Ifloat |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
284 {'p', 8, &VNAN}, // Idouble |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
285 {'j', 12, &VNAN}, // Ireal |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
286 {'q', 8, &VCNAN}, // Cfloat |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
287 {'r', 16, &VCNAN}, // Cdouble |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
288 {'c', 24, &VCNAN}, // Creal |
527 | 289 {'v', 1}, // void |
290 | |
291 {'n', SNA}, // None | |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
292 |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
293 {'A', PS*2, &VNULL}, // Dynamic array |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
294 {'G', PS*2, &VNULL}, // Static array |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
295 {'H', PS*2, &VNULL}, // Associative array |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
296 |
527 | 297 {'E', SNA}, // Enum |
298 {'S', SNA}, // Struct | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
299 {'C', PS, &VNULL}, // Class |
527 | 300 {'T', SNA}, // Typedef |
301 {'F', PS}, // Function | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
302 {'D', PS*2, &VNULL}, // Delegate |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
303 {'P', PS, &VNULL}, // Pointer |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
304 {'R', PS, &VNULL}, // Reference |
527 | 305 {'I', SNA}, // Identifier |
306 {'?', SNA}, // Template instance | |
307 {'B', SNA}, // Tuple | |
308 {'x', SNA}, // Const, D2 | |
309 {'y', SNA}, // Invariant, D2 | |
310 ]; | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
311 static assert(metaInfoTable.length == TYP.max+1); |
527 | 312 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
313 /// Returns the size of a type. |
527 | 314 size_t getSize(Type type) |
315 { | |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
316 auto size = metaInfoTable[type.tid].size; |
527 | 317 if (size == SIZE_NOT_AVAILABLE) |
318 return type.sizeOf_(); | |
319 return size; | |
320 } | |
321 } | |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
322 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
323 /// Namespace for a set of predefined types. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
324 struct Types |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
325 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
326 static: |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
327 /// Predefined basic types. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
328 TypeBasic Char, Wchar, Dchar, Bool, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
329 Byte, Ubyte, Short, Ushort, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
330 Int, Uint, Long, Ulong, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
331 Cent, Ucent, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
332 Float, Double, Real, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
333 Ifloat, Idouble, Ireal, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
334 Cfloat, Cdouble, Creal, Void; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
335 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
336 TypeBasic Size_t; /// The size type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
337 TypeBasic Ptrdiff_t; /// The pointer difference type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
338 TypePointer Void_ptr; /// The void pointer type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
339 TypeBasic Error; /// The error type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
340 TypeBasic Undefined; /// The undefined type. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
341 |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
342 /// Allocates an instance of TypeBasic and assigns it to typeName. |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
343 template newTB(char[] typeName) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
344 { |
617
0749f30ef2d0
Added member 'EnumType type' to class Enum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
615
diff
changeset
|
345 const newTB = mixin(typeName~" = new TypeBasic(TYP."~typeName~")"); |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
346 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
347 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
348 /// Initializes predefined types. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
349 static this() |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
350 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
351 newTB!("Char"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
352 newTB!("Wchar"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
353 newTB!("Dchar"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
354 newTB!("Bool"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
355 newTB!("Byte"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
356 newTB!("Ubyte"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
357 newTB!("Short"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
358 newTB!("Ushort"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
359 newTB!("Int"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
360 newTB!("Uint"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
361 newTB!("Long"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
362 newTB!("Ulong"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
363 newTB!("Cent"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
364 newTB!("Ucent"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
365 newTB!("Float"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
366 newTB!("Double"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
367 newTB!("Real"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
368 newTB!("Ifloat"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
369 newTB!("Idouble"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
370 newTB!("Ireal"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
371 newTB!("Cfloat"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
372 newTB!("Cdouble"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
373 newTB!("Creal"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
374 newTB!("Void"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
375 version(X86_64) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
376 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
377 Size_t = Ulong; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
378 Ptrdiff_t = Long; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
379 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
380 else |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
381 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
382 Size_t = Uint; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
383 Ptrdiff_t = Int; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
384 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
385 Void_ptr = Void.ptrTo; |
560
709e223a8eb9
Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
548
diff
changeset
|
386 Error = new TypeBasic(TYP.Error); |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
387 Undefined = new TypeBasic(TYP.Error); |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
388 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
389 } |