Mercurial > projects > dil
annotate src/dil/semantic/Types.d @ 838:1ecf05e680ba
Changed build configuration.
From now on, the executable will be placed in bin/.
The postbuild.* scripts for Linux and Windows will place important files in
bin/ and bin/data/.
Added hasType() to class Expression.
Added search() to class Scope.
Added DontKnowYet to struct Types.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Wed, 20 Aug 2008 20:39:16 +0200 |
parents | 1d06b4aed7cf |
children |
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 |
804
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
39 /// Returns a dynamic array type using this type as its base. |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
40 TypeDArray arrayOf() |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
41 { |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
42 return new TypeDArray(this); |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
43 } |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
44 |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
45 /// Returns an associative array type using this type as its base. |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
46 /// Params: |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
47 /// key = the key type. |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
48 TypeAArray arrayOf(Type key) |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
49 { |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
50 return new TypeAArray(this, key); |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
51 } |
9e6c6bb73e5f
Implemented visit methods for some type nodes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
798
diff
changeset
|
52 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
53 /// Returns the byte size of this type. |
527 | 54 final size_t sizeOf() |
55 { | |
56 return MITable.getSize(this); | |
57 } | |
58 | |
59 /// Size is not in MITable. Find out via virtual method. | |
60 size_t sizeOf_() | |
61 { | |
62 return sizeOf(); | |
63 } | |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
64 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
65 /// 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
|
66 bool hasSymbol() |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
67 { |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
68 return symbol !is null; |
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
69 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
70 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
71 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
72 /// 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
|
73 class TypeBasic : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
74 { |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
75 this(TYP typ) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
76 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
77 super(null, typ); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
78 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
79 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
80 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
81 /// Dynamic array type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
82 class TypeDArray : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
83 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
84 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
85 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
86 super(next, TYP.DArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
87 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
88 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
89 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
90 /// Associative array type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
91 class TypeAArray : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
92 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
93 Type keyType; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
94 this(Type next, Type keyType) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
95 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
96 super(next, TYP.AArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
97 this.keyType = keyType; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
98 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
99 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
100 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
101 /// Static array type. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
102 class TypeSArray : Type |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
103 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
104 size_t dimension; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
105 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
|
106 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
107 super(next, TYP.SArray); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
108 this.dimension = dimension; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
109 } |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
110 } |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
111 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
112 /// Pointer type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
113 class TypePointer : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
114 { |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
115 this(Type next) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
116 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
117 super(next, TYP.Pointer); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
118 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
119 } |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
120 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
121 /// Reference type. |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
122 class TypeReference : Type |
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
123 { |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
124 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
125 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
126 super(next, TYP.Reference); |
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 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
129 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
130 /// Enum type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
131 class TypeEnum : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
132 { |
820
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
133 this(Symbol symbol) |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
134 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
135 super(baseType, TYP.Enum); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
136 this.symbol = symbol; |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
137 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
138 |
820
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
139 /// Setter for the base type. |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
140 void baseType(Type type) |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
141 { |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
142 next = type; |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
143 } |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
144 |
1d06b4aed7cf
Revised code in the first pass.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
806
diff
changeset
|
145 /// Getter for the base type. |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
146 Type baseType() |
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 return 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 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
151 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
152 /// Struct type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
153 class TypeStruct : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
154 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
155 this(Symbol symbol) |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
156 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
157 super(null, TYP.Struct); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
158 this.symbol = symbol; |
526
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 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
162 /// Class type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
163 class TypeClass : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
164 { |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
165 this(Symbol symbol) |
526
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.Class); |
796
f7688996bf08
Added member symbol to class Type.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
700
diff
changeset
|
168 this.symbol = symbol; |
526
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 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
171 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
172 /// Typedef type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
173 class TypeTypedef : Type |
526
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 this(Type next) |
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 super(next, TYP.Typedef); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
178 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
179 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
180 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
181 /// Function type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
182 class TypeFunction : Type |
526
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 this(Type next) |
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 super(next, TYP.Function); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
187 } |
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 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
190 /// Delegate type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
191 class TypeDelegate : Type |
526
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 this(Type next) |
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 super(next, TYP.Delegate); |
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 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
198 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
199 /// Identifier type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
200 class TypeIdentifier : Type |
526
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 Identifier* ident; |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
203 this(Identifier* ident) |
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 super(null, TYP.Identifier); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
206 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
207 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
208 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
209 /// Template instantiation type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
210 class TypeTemplInstance : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
211 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
212 this() |
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 super(null, TYP.TInstance); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
215 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
216 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
217 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
218 /// Template tuple type. |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
219 class TypeTuple : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
220 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
221 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
222 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
223 super(next, TYP.Tuple); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
224 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
225 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
226 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
227 /// Constant type. D2.0 |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
228 class TypeConst : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
229 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
230 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
231 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
232 super(next, TYP.Const); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
233 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
234 } |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
235 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
236 /// Invariant type. D2.0 |
688
839c0c61af2b
Renamed some semantic types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
617
diff
changeset
|
237 class TypeInvariant : Type |
526
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
238 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
239 this(Type next) |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
240 { |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
241 super(next, TYP.Const); |
ee22dc0ba82c
Added more Type classes to dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
525
diff
changeset
|
242 } |
512
112c17300069
Added module dil.TypeSystem.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
243 } |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
244 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
245 /// 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
|
246 union Value |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
247 { |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
248 void* pvoid; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
249 bool bool_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
250 dchar dchar_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
251 long long_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
252 ulong ulong_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
253 int int_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
254 uint uint_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
255 float float_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
256 double double_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
257 real real_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
258 creal creal_; |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
259 } |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
260 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
261 /// Information related to a Type. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
262 struct TypeMetaInfo |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
263 { |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
264 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
|
265 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
|
266 Value* defaultInit; /// Default initialization value. |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
267 } |
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
268 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
269 /// Namespace for the meta info table. |
527 | 270 struct MITable |
271 { | |
272 static: | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
273 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
|
274 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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 const Value VCNAN = {creal_:creal.nan}; /// Value complex NAN. |
527 | 281 private alias SIZE_NOT_AVAILABLE SNA; |
282 private alias PTR_SIZE PS; | |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
283 /// The meta info table. |
527 | 284 private const TypeMetaInfo metaInfoTable[] = [ |
285 {'?', SNA}, // Error | |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
286 |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
287 {'a', 1, &V0xFF}, // Char |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
288 {'u', 2, &V0xFFFF}, // Wchar |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
289 {'w', 4, &V0xFFFF}, // Dchar |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
290 {'b', 1, &VFALSE}, // Bool |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
291 {'g', 1, &VZERO}, // Byte |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
292 {'h', 1, &VZERO}, // Ubyte |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
293 {'s', 2, &VZERO}, // Short |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
294 {'t', 2, &VZERO}, // Ushort |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
295 {'i', 4, &VZERO}, // Int |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
296 {'k', 4, &VZERO}, // Uint |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
297 {'l', 8, &VZERO}, // Long |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
298 {'m', 8, &VZERO}, // Ulong |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
299 {'?', 16, &VZERO}, // Cent |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
300 {'?', 16, &VZERO}, // Ucent |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
301 {'f', 4, &VNAN}, // Float |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
302 {'d', 8, &VNAN}, // Double |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
303 {'e', 12, &VNAN}, // Real |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
304 {'o', 4, &VNAN}, // Ifloat |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
305 {'p', 8, &VNAN}, // Idouble |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
306 {'j', 12, &VNAN}, // Ireal |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
307 {'q', 8, &VCNAN}, // Cfloat |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
308 {'r', 16, &VCNAN}, // Cdouble |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
309 {'c', 24, &VCNAN}, // Creal |
527 | 310 {'v', 1}, // void |
311 | |
312 {'n', SNA}, // None | |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
313 |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
314 {'A', PS*2, &VNULL}, // Dynamic array |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
315 {'G', PS*2, &VNULL}, // Static array |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
316 {'H', PS*2, &VNULL}, // Associative array |
522
812f497b20dc
Added module dil.TypesEnum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
512
diff
changeset
|
317 |
527 | 318 {'E', SNA}, // Enum |
319 {'S', SNA}, // Struct | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
320 {'C', PS, &VNULL}, // Class |
527 | 321 {'T', SNA}, // Typedef |
322 {'F', PS}, // Function | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
323 {'D', PS*2, &VNULL}, // Delegate |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
324 {'P', PS, &VNULL}, // Pointer |
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
325 {'R', PS, &VNULL}, // Reference |
527 | 326 {'I', SNA}, // Identifier |
327 {'?', SNA}, // Template instance | |
328 {'B', SNA}, // Tuple | |
329 {'x', SNA}, // Const, D2 | |
330 {'y', SNA}, // Invariant, D2 | |
331 ]; | |
548
faf16f4e7fc8
Added union Value and updated metaInfoTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
536
diff
changeset
|
332 static assert(metaInfoTable.length == TYP.max+1); |
527 | 333 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
334 /// Returns the size of a type. |
527 | 335 size_t getSize(Type type) |
336 { | |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
337 auto size = metaInfoTable[type.tid].size; |
527 | 338 if (size == SIZE_NOT_AVAILABLE) |
339 return type.sizeOf_(); | |
340 return size; | |
341 } | |
342 } | |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
343 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
344 /// 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
|
345 struct Types |
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 static: |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
348 /// Predefined basic types. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
349 TypeBasic Char, Wchar, Dchar, Bool, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
350 Byte, Ubyte, Short, Ushort, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
351 Int, Uint, Long, Ulong, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
352 Cent, Ucent, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
353 Float, Double, Real, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
354 Ifloat, Idouble, Ireal, |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
355 Cfloat, Cdouble, Creal, Void; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
356 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
357 TypeBasic Size_t; /// The size type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
358 TypeBasic Ptrdiff_t; /// The pointer difference type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
359 TypePointer Void_ptr; /// The void pointer type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
360 TypeBasic Error; /// The error type. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
361 TypeBasic Undefined; /// The undefined type. |
838
1ecf05e680ba
Changed build configuration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
820
diff
changeset
|
362 TypeBasic DontKnowYet; /// The symbol is undefined but might be resolved. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
363 |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
364 /// 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
|
365 template newTB(char[] typeName) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
366 { |
617
0749f30ef2d0
Added member 'EnumType type' to class Enum.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
615
diff
changeset
|
367 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
|
368 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
369 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
796
diff
changeset
|
370 /// Initializes predefined types. |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
371 static this() |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
372 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
373 newTB!("Char"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
374 newTB!("Wchar"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
375 newTB!("Dchar"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
376 newTB!("Bool"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
377 newTB!("Byte"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
378 newTB!("Ubyte"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
379 newTB!("Short"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
380 newTB!("Ushort"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
381 newTB!("Int"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
382 newTB!("Uint"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
383 newTB!("Long"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
384 newTB!("Ulong"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
385 newTB!("Cent"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
386 newTB!("Ucent"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
387 newTB!("Float"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
388 newTB!("Double"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
389 newTB!("Real"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
390 newTB!("Ifloat"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
391 newTB!("Idouble"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
392 newTB!("Ireal"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
393 newTB!("Cfloat"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
394 newTB!("Cdouble"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
395 newTB!("Creal"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
396 newTB!("Void"); |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
397 version(X86_64) |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
398 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
399 Size_t = Ulong; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
400 Ptrdiff_t = Long; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
401 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
402 else |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
403 { |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
404 Size_t = Uint; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
405 Ptrdiff_t = Int; |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
406 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
407 Void_ptr = Void.ptrTo; |
560
709e223a8eb9
Added code related to symbols.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
548
diff
changeset
|
408 Error = new TypeBasic(TYP.Error); |
536
0781ac288537
Added some semantic() methods.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
527
diff
changeset
|
409 Undefined = new TypeBasic(TYP.Error); |
838
1ecf05e680ba
Changed build configuration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
820
diff
changeset
|
410 DontKnowYet = new TypeBasic(TYP.Error); |
525
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
411 } |
a3f66502ea64
Added struct Types with pre-defined types.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
522
diff
changeset
|
412 } |