annotate dmd/mtype.h @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents 465a77c904d4
children 46f6365a50d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
1
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
2 // Compiler implementation of the D programming language
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
3 // Copyright (c) 1999-2007 by Digital Mars
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
4 // All Rights Reserved
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
5 // written by Walter Bright
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
6 // http://www.digitalmars.com
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
7 // License for redistribution is by either the Artistic License
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
9 // See the included readme.txt for details.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
10
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
11 #ifndef DMD_MTYPE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
12 #define DMD_MTYPE_H
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
13
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
14 #ifdef __DMC__
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
15 #pragma once
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
16 #endif /* __DMC__ */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
17
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
18 #include "root.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
19 #include "stringtable.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
20
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
21 #include "arraytypes.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
22 #include "expression.h"
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
23
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
24 #if IN_LLVM
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 162
diff changeset
25 // llvm
1184
a6dbd571d417 Moved ir/irtype.* into ir/irdtype.*.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1147
diff changeset
26 #include "../ir/irdtype.h"
1051
dc608dc33081 Make IrFuncTy a member of TypeFunction. Reset between modules compiled in the
Christian Kamm <kamm incasoftware de>
parents: 1029
diff changeset
27 #include "../ir/irfuncty.h"
938
a904cc9bc064 Convert struct arg to integer when passing inreg to make sure LLVM doesn't
Christian Kamm <kamm incasoftware de>
parents: 930
diff changeset
28 namespace llvm { class Type; }
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
29 struct Ir;
1192
3251ce06c820 Started seperating type resolution from the rest of codegen again, the merge had too many regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1184
diff changeset
30
3251ce06c820 Started seperating type resolution from the rest of codegen again, the merge had too many regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1184
diff changeset
31 class IrType;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
32 #endif
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 162
diff changeset
33
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
34 struct Scope;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
35 struct Identifier;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
36 struct Expression;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
37 struct StructDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
38 struct ClassDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
39 struct VarDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
40 struct EnumDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
41 struct TypedefDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
42 struct TypeInfoDeclaration;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
43 struct Dsymbol;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
44 struct TemplateInstance;
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
45 struct CppMangleState;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
46 enum LINK;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
47
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
48 struct TypeBasic;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
49 struct HdrGenState;
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
50 struct Argument;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
51
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
52 // Back end
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
53 #if IN_GCC
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
54 union tree_node; typedef union tree_node TYPE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
55 typedef TYPE type;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
56 #endif
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
57
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
58 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
59 typedef struct TYPE type;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
60 struct Symbol;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
61 #endif
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
62
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
63 enum TY
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
64 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
65 Tarray, // dynamic array
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
66 Tsarray, // static array
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
67 Taarray, // associative array
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
68 Tpointer,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
69 Treference,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
70 Tfunction,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
71 Tident,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
72 Tclass,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
73 Tstruct,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
74 Tenum,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
75 Ttypedef,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
76 Tdelegate,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
77
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
78 Tnone,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
79 Tvoid,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
80 Tint8,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
81 Tuns8,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
82 Tint16,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
83 Tuns16,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
84 Tint32,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
85 Tuns32,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
86 Tint64,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
87 Tuns64,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
88 Tfloat32,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
89 Tfloat64,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
90 Tfloat80,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
91
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
92 Timaginary32,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
93 Timaginary64,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
94 Timaginary80,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
95
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
96 Tcomplex32,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
97 Tcomplex64,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
98 Tcomplex80,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
99
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
100 Tbit,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
101 Tbool,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
102 Tchar,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
103 Twchar,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
104 Tdchar,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
105
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
106 Terror,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
107 Tinstance,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
108 Ttypeof,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
109 Ttuple,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
110 Tslice,
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
111 Treturn,
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
112 TMAX
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
113 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
114
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
115 #define Tascii Tchar
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
116
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
117 extern int Tsize_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
118 extern int Tptrdiff_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
119
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
120
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
121 struct Type : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
122 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
123 TY ty;
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
124 unsigned char mod; // modifiers MODxxxx
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
125 /* pick this order of numbers so switch statements work better
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
126 */
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
127 #define MODconst 1 // type is const
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
128 #define MODinvariant 4 // type is invariant
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
129 #define MODshared 2 // type is shared
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
130 char *deco;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
131 Type *pto; // merged pointer to this type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
132 Type *rto; // reference to this type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
133 Type *arrayof; // array of this type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
134 TypeInfoDeclaration *vtinfo; // TypeInfo object for this Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
135
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
136 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
137 type *ctype; // for back end
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
138 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
139
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
140 #define tvoid basic[Tvoid]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
141 #define tint8 basic[Tint8]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
142 #define tuns8 basic[Tuns8]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
143 #define tint16 basic[Tint16]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
144 #define tuns16 basic[Tuns16]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
145 #define tint32 basic[Tint32]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
146 #define tuns32 basic[Tuns32]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
147 #define tint64 basic[Tint64]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
148 #define tuns64 basic[Tuns64]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
149 #define tfloat32 basic[Tfloat32]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
150 #define tfloat64 basic[Tfloat64]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
151 #define tfloat80 basic[Tfloat80]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
152
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
153 #define timaginary32 basic[Timaginary32]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
154 #define timaginary64 basic[Timaginary64]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
155 #define timaginary80 basic[Timaginary80]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
156
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
157 #define tcomplex32 basic[Tcomplex32]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
158 #define tcomplex64 basic[Tcomplex64]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
159 #define tcomplex80 basic[Tcomplex80]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
160
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
161 #define tbit basic[Tbit]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
162 #define tbool basic[Tbool]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
163 #define tchar basic[Tchar]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
164 #define twchar basic[Twchar]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
165 #define tdchar basic[Tdchar]
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
166
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
167 // Some special types
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
168 #define tshiftcnt tint32 // right side of shift expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
169 // #define tboolean tint32 // result of boolean expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
170 #define tboolean tbool // result of boolean expression
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
171 #define tindex tint32 // array/ptr index
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
172 static Type *tvoidptr; // void*
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
173 #define terror basic[Terror] // for error recovery
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
174
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
175 #define tsize_t basic[Tsize_t] // matches size_t alias
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
176 #define tptrdiff_t basic[Tptrdiff_t] // matches ptrdiff_t alias
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
177 #define thash_t tsize_t // matches hash_t alias
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
178
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
179 static ClassDeclaration *typeinfo;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
180 static ClassDeclaration *typeinfoclass;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
181 static ClassDeclaration *typeinfointerface;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
182 static ClassDeclaration *typeinfostruct;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
183 static ClassDeclaration *typeinfotypedef;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
184 static ClassDeclaration *typeinfopointer;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
185 static ClassDeclaration *typeinfoarray;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
186 static ClassDeclaration *typeinfostaticarray;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
187 static ClassDeclaration *typeinfoassociativearray;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
188 static ClassDeclaration *typeinfoenum;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
189 static ClassDeclaration *typeinfofunction;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
190 static ClassDeclaration *typeinfodelegate;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
191 static ClassDeclaration *typeinfotypelist;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
192
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
193 static Type *basic[TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
194 static unsigned char mangleChar[TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
195 static StringTable stringtable;
1245
465a77c904d4 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
196 #if IN_LLVM
465a77c904d4 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
197 static StringTable deco_stringtable;
465a77c904d4 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
198 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
199
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
200 // These tables are for implicit conversion of binary ops;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
201 // the indices are the type of operand one, followed by operand two.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
202 static unsigned char impcnvResult[TMAX][TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
203 static unsigned char impcnvType1[TMAX][TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
204 static unsigned char impcnvType2[TMAX][TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
205
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
206 // If !=0, give warning on implicit conversion
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
207 static unsigned char impcnvWarn[TMAX][TMAX];
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
208
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
209 Type(TY ty, Type *next);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
210 virtual Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
211 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
212 int dyncast() { return DYNCAST_TYPE; } // kludge for template.isType()
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
213 int covariant(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
214 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
215 static char needThisPrefix();
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
216 #if IN_LLVM
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
217 static void init(Ir*);
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
218 #else
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
219 static void init();
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
220 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
221 d_uns64 size();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
222 virtual d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
223 virtual unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
224 virtual Type *semantic(Loc loc, Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
225 // append the mangleof or a string uniquely identifying this type to buf
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
226 virtual void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
227 Type *merge();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
228 virtual void toCBuffer(OutBuffer *buf, Identifier *ident, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
229 virtual void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
230 void toCBuffer3(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
231 virtual int isbit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
232 virtual int isintegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
233 virtual int isfloating(); // real, imaginary, or complex
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
234 virtual int isreal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
235 virtual int isimaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
236 virtual int iscomplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
237 virtual int isscalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
238 virtual int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
239 virtual int isauto();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
240 virtual int isString();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
241 virtual int checkBoolean(); // if can be converted to boolean value
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
242 void checkDeprecated(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
243 Type *pointerTo();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
244 Type *referenceTo();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
245 Type *arrayOf();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
246 virtual Dsymbol *toDsymbol(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
247 virtual Type *toBasetype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
248 virtual int isBaseOf(Type *t, int *poffset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
249 virtual MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
250 virtual ClassDeclaration *isClassHandle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
251 virtual Expression *getProperty(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
252 virtual Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
253 virtual unsigned memalign(unsigned salign);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
254 virtual Expression *defaultInit(Loc loc = 0);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
255 virtual int isZeroInit(); // if initializer is 0
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
256 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
257 virtual dt_t **toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
258 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
259 Identifier *getTypeInfoIdent(int internal);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
260 virtual MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
261 virtual void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
262 Expression *getInternalTypeInfo(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
263 Expression *getTypeInfo(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
264 virtual TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
265 virtual int builtinTypeInfo();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
266 virtual Type *reliesOnTident();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
267 virtual Expression *toExpression();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
268 virtual int hasPointers();
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
269 Type *next;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
270 Type *nextOf() { return next; }
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
271
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
272 static void error(Loc loc, const char *format, ...);
1103
b30fe7e1dbb9 - Updated to DMD frontend 1.041.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1051
diff changeset
273 static void warning(Loc loc, const char *format, ...);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
274
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
275 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
276 // For backend
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
277 virtual unsigned totym();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
278 virtual type *toCtype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
279 virtual type *toCParamtype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
280 virtual Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
281 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
282
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
283 // For eliminating dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
284 virtual TypeBasic *isTypeBasic();
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents: 162
diff changeset
285
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
286 #if IN_LLVM
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 658
diff changeset
287 // LDC
1184
a6dbd571d417 Moved ir/irtype.* into ir/irdtype.*.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1147
diff changeset
288 IrDType ir;
1147
dbe4af57b240 Changed use of toObjFile to a new codegen method.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1146
diff changeset
289 static Ir* sir;
1192
3251ce06c820 Started seperating type resolution from the rest of codegen again, the merge had too many regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1184
diff changeset
290
3251ce06c820 Started seperating type resolution from the rest of codegen again, the merge had too many regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1184
diff changeset
291 IrType* irtype;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
292 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
293 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
294
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
295 struct TypeBasic : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
296 {
658
50383e476c7e Upgraded frontend to DMD 1.035
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 508
diff changeset
297 const char *dstring;
50383e476c7e Upgraded frontend to DMD 1.035
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 508
diff changeset
298 const char *cstring;
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
299 unsigned flags;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
300
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
301 TypeBasic(TY ty);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
302 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
303 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
304 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
305 Expression *getProperty(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
306 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
307 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
308 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
309 int isintegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
310 int isbit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
311 int isfloating();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
312 int isreal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
313 int isimaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
314 int iscomplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
315 int isscalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
316 int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
317 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
318 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
319 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
320 int builtinTypeInfo();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
321
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
322 // For eliminating dynamic_cast
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
323 TypeBasic *isTypeBasic();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
324 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
325
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
326 struct TypeArray : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
327 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
328 TypeArray(TY ty, Type *next);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
329 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
330 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
331
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
332 // Static array, one with a fixed dimension
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
333 struct TypeSArray : TypeArray
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
334 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
335 Expression *dim;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
336
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
337 TypeSArray(Type *t, Expression *dim);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
338 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
339 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
340 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
341 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
342 void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
343 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
344 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
345 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
346 int isString();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
347 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
348 unsigned memalign(unsigned salign);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
349 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
350 Expression *defaultInit(Loc loc);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
351 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
352 dt_t **toDt(dt_t **pdt);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
353 dt_t **toDtElem(dt_t **pdt, Expression *e);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
354 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
355 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
356 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
357 Expression *toExpression();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
358 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
359
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
360 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
361 type *toCtype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
362 type *toCParamtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
363 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
364 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
365
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
366 // Dynamic array, no dimension
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
367 struct TypeDArray : TypeArray
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
368 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
369 TypeDArray(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
370 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
371 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
372 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
373 Type *semantic(Loc loc, Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
374 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
375 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
376 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
377 int isString();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
378 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
379 int checkBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
380 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
381 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
382 int builtinTypeInfo();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
383 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
384 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
385
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
386 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
387 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
388 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
389 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
390
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
391 struct TypeAArray : TypeArray
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
392 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
393 Type *index; // key type for type checking
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
394 Type *key; // actual key type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
395
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
396 TypeAArray(Type *t, Type *index);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
397 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
398 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
399 Type *semantic(Loc loc, Scope *sc);
336
aaade6ded589 [svn r357] Merged DMD 1.033
lindquist
parents: 217
diff changeset
400 void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
401 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
402 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
403 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
404 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
405 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
211
f66219e0d530 [svn r227] Fixed: crash in lifetime.d when resizing array of AAs by .length assignment.
lindquist
parents: 173
diff changeset
406 int isZeroInit();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
407 int checkBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
408 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
409 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
410
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
411 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
412 // Back end
758
f04dde6e882c Added initial D2 support, D2 frontend and changes to codegen to make things compile.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 723
diff changeset
413 Symbol *aaGetSymbol(const char *func, int flags);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
414
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
415 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
416 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
417 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
418
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
419 struct TypePointer : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
420 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
421 TypePointer(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
422 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
423 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
424 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
425 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
426 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
427 int isscalar();
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 658
diff changeset
428 // LDC: pointers are unsigned
411
3545f9eddbfc Switch TypePointer::isunsigned from false to true, so CmpExp::toElem chooses the right operand for pointer comparisons.
Christian Kamm <kamm incasoftware de>
parents: 379
diff changeset
429 int isunsigned() { return TRUE; };
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
430 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
431 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
432 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
433 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
434
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
435 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
436 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
437 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
438 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
439
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
440 struct TypeReference : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
441 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
442 TypeReference(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
443 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
444 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
445 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
446 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
447 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
448 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
449 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
450
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
451 enum RET
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
452 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
453 RETregs = 1, // returned in registers
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
454 RETstack = 2, // returned on stack
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
455 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
456
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
457 struct TypeFunction : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
458 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
459 Arguments *parameters; // function parameters
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
460 int varargs; // 1: T t, ...) style for variable number of arguments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
461 // 2: T t ...) style for variable number of arguments
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
462 enum LINK linkage; // calling convention
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
463
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
464 int inuse;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
465
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
466 TypeFunction(Arguments *parameters, Type *treturn, int varargs, enum LINK linkage);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
467 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
468 Type *semantic(Loc loc, Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
469 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
470 void toCBuffer(OutBuffer *buf, Identifier *ident, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
471 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
472 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
473 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
474 Type *reliesOnTident();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
475
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
476 int callMatch(Expressions *toargs);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
477 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
478 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
479 #endif
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
480
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
481 enum RET retStyle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
482
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
483 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
484 unsigned totym();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
485 #elif IN_LLVM
663
6aaa3d3c1183 First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents: 658
diff changeset
486 // LDC
1051
dc608dc33081 Make IrFuncTy a member of TypeFunction. Reset between modules compiled in the
Christian Kamm <kamm incasoftware de>
parents: 1029
diff changeset
487 IrFuncTy fty;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
488
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
489 FuncDeclaration* funcdecl;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
490 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
491 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
492
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
493 struct TypeDelegate : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
494 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
495 TypeDelegate(Type *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
496 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
497 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
498 d_uns64 size(Loc loc);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 758
diff changeset
499 unsigned alignsize(); // added in LDC
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
500 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
501 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
502 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
503 int checkBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
504 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
505 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
506 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
507
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
508 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
509 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
510 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
511 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
512
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
513 struct TypeQualified : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
514 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
515 Loc loc;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
516 Array idents; // array of Identifier's representing ident.ident.ident etc.
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
517
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
518 TypeQualified(TY ty, Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
519 void syntaxCopyHelper(TypeQualified *t);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
520 void addIdent(Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
521 void toCBuffer2Helper(OutBuffer *buf, HdrGenState *hgs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
522 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
523 void resolveHelper(Loc loc, Scope *sc, Dsymbol *s, Dsymbol *scopesym,
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
524 Expression **pe, Type **pt, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
525 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
526
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
527 struct TypeIdentifier : TypeQualified
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
528 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
529 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
530
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
531 TypeIdentifier(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
532 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
533 //char *toChars();
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
534 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
535 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
536 void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
537 Dsymbol *toDsymbol(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
538 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
539 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
540 Type *reliesOnTident();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
541 Expression *toExpression();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
542 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
543
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
544 /* Similar to TypeIdentifier, but with a TemplateInstance as the root
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
545 */
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
546 struct TypeInstance : TypeQualified
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
547 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
548 TemplateInstance *tempinst;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
549
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
550 TypeInstance(Loc loc, TemplateInstance *tempinst);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
551 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
552 //char *toChars();
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
553 //void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
554 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
555 void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
556 Type *semantic(Loc loc, Scope *sc);
875
330f999ade44 Merged DMD 1.038
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 797
diff changeset
557 Dsymbol *toDsymbol(Scope *sc);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
558 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
559 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
560
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
561 struct TypeTypeof : TypeQualified
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
562 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
563 Expression *exp;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
564
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
565 TypeTypeof(Loc loc, Expression *exp);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
566 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
567 Dsymbol *toDsymbol(Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
568 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
569 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
570 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
571 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
572
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
573 struct TypeStruct : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
574 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
575 StructDeclaration *sym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
576
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
577 TypeStruct(StructDeclaration *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
578 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
579 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
580 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
581 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
582 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
583 Dsymbol *toDsymbol(Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
584 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
585 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
586 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
587 unsigned memalign(unsigned salign);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
588 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
589 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
590 int checkBoolean();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
591 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
592 dt_t **toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
593 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
594 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
595 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
596 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
597
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
598 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
599 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
600 #elif IN_LLVM
1029
4d366a75d95f Added hasUnalignedFields helper to check if a type has unaligned fields - as per request from fvbommel. Result is cached in TypeStruct.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 1024
diff changeset
601 // LDC
4d366a75d95f Added hasUnalignedFields helper to check if a type has unaligned fields - as per request from fvbommel. Result is cached in TypeStruct.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 1024
diff changeset
602 // cache the hasUnalignedFields check
4d366a75d95f Added hasUnalignedFields helper to check if a type has unaligned fields - as per request from fvbommel. Result is cached in TypeStruct.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 1024
diff changeset
603 // 0 = not checked, 1 = aligned, 2 = unaligned
4d366a75d95f Added hasUnalignedFields helper to check if a type has unaligned fields - as per request from fvbommel. Result is cached in TypeStruct.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 1024
diff changeset
604 int unaligned;
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
605 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
606 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
607
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
608 struct TypeEnum : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
609 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
610 EnumDeclaration *sym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
611
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
612 TypeEnum(EnumDeclaration *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
613 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
614 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
615 char *toChars();
486
a34078905d01 Added pragma(llvmdc, "string") for misc per-module compiler configuration, currently "string" can only be "verbose" which forces -vv for module it appears in.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 445
diff changeset
616 Type *syntaxCopy();
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
617 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
618 Dsymbol *toDsymbol(Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
619 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
620 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
621 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
622 Expression *getProperty(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
623 int isintegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
624 int isfloating();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
625 int isscalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
626 int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
627 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
628 Type *toBasetype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
629 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
630 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
631 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
632 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
633 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
634
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
635 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
636 type *toCtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
637 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
638 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
639
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
640 struct TypeTypedef : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
641 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
642 TypedefDeclaration *sym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
643
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
644 TypeTypedef(TypedefDeclaration *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
645 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
646 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
647 unsigned alignsize();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
648 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
649 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
650 Dsymbol *toDsymbol(Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
651 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
652 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
653 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
654 Expression *getProperty(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
655 int isbit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
656 int isintegral();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
657 int isfloating();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
658 int isreal();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
659 int isimaginary();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
660 int iscomplex();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
661 int isscalar();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
662 int isunsigned();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
663 int checkBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
664 Type *toBasetype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
665 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
666 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
667 int isZeroInit();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
668 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
669 dt_t **toDt(dt_t **pdt);
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
670 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
671 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
672 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
673 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
674
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
675 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
676 type *toCtype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
677 type *toCParamtype();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
678 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
679 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
680
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
681 struct TypeClass : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
682 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
683 ClassDeclaration *sym;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
684
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
685 TypeClass(ClassDeclaration *sym);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
686 d_uns64 size(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
687 char *toChars();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
688 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
689 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
690 Dsymbol *toDsymbol(Scope *sc);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
691 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
692 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
693 Expression *dotExp(Scope *sc, Expression *e, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
694 ClassDeclaration *isClassHandle();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
695 int isBaseOf(Type *t, int *poffset);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
696 MATCH implicitConvTo(Type *to);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
697 Expression *defaultInit(Loc loc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
698 int isZeroInit();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
699 MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
700 int isauto();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
701 int checkBoolean();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
702 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
703 int hasPointers();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
704
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
705 #if IN_DMD
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
706 type *toCtype();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
707
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
708 Symbol *toSymbol();
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1103
diff changeset
709 #endif
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
710 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
711
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
712 struct TypeTuple : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
713 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
714 Arguments *arguments; // types making up the tuple
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
715
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
716 TypeTuple(Arguments *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
717 TypeTuple(Expressions *exps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
718 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
719 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
720 int equals(Object *o);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
721 Type *reliesOnTident();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
722 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
723 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
724 Expression *getProperty(Loc loc, Identifier *ident);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
725 TypeInfoDeclaration *getTypeInfoDeclaration();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
726 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
727
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
728 struct TypeSlice : Type
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
729 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
730 Expression *lwr;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
731 Expression *upr;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
732
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
733 TypeSlice(Type *next, Expression *lwr, Expression *upr);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
734 Type *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
735 Type *semantic(Loc loc, Scope *sc);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
736 void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
737 void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
738 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
739
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
740 /**************************************************************/
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
741
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
742 //enum InOut { None, In, Out, InOut, Lazy };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
743
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
744 struct Argument : Object
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
745 {
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
746 //enum InOut inout;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
747 unsigned storageClass;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
748 Type *type;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
749 Identifier *ident;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
750 Expression *defaultArg;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
751
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
752 Argument(unsigned storageClass, Type *type, Identifier *ident, Expression *defaultArg);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
753 Argument *syntaxCopy();
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
754 Type *isLazyArray();
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
755 void toDecoBuffer(OutBuffer *buf, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
756 static Arguments *arraySyntaxCopy(Arguments *args);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
757 static char *argsTypesToChars(Arguments *args, int varargs);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
758 static void argsToCBuffer(OutBuffer *buf, HdrGenState *hgs, Arguments *arguments, int varargs);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1192
diff changeset
759 static void argsToDecoBuffer(OutBuffer *buf, Arguments *arguments, bool mangle);
159
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
760 static size_t dim(Arguments *arguments);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
761 static Argument *getNth(Arguments *arguments, size_t nth, size_t *pn = NULL);
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
762 };
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
763
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
764 extern int PTRSIZE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
765 extern int REALSIZE;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
766 extern int REALPAD;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
767 extern int Tsize_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
768 extern int Tptrdiff_t;
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
769
5acec6b2eef8 [svn r175] merged dmd 1.029
ChristianK
parents: 157
diff changeset
770 #endif /* DMD_MTYPE_H */