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