annotate dmd/Token.d @ 114:e28b18c23469

added a module dmd.common for commonly used stuff it currently holds code for consistency checking of predefined versions also added a VisualD project file
author Trass3r
date Wed, 01 Sep 2010 18:21:58 +0200
parents 43073c7c7769
children af724d3510d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.Token;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 79
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.TOK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Identifier;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.Utf;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import core.stdc.stdio;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import core.stdc.ctype;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 struct Token
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 Token* next;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 ubyte* ptr; // pointer to first character of this token within buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 TOK value;
79
43073c7c7769 updated to 2.035
Trass3r
parents: 16
diff changeset
17 string blockComment; // doc comment string prior to this token
43073c7c7769 updated to 2.035
Trass3r
parents: 16
diff changeset
18 string lineComment; // doc comment for previous token
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 union
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
22 // Integers
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
23 int int32value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
24 uint uns32value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
25 long int64value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
26 ulong uns64value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
27
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
28 // Floats
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
29 version (IN_GCC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
30 // real_t float80value; // can't use this in a union!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
31 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
32 real float80value;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
33 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
34
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
35 struct
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
36 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
37 const(char)* ustring; // UTF8 string
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
38 uint len;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 ubyte postfix; // 'c', 'w', 'd'
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
40 };
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
41
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
42 Identifier ident;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
43 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
45 version (IN_GCC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 real float80value; // can't use this in a union!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 static string tochars[TOK.TOKMAX];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 /// static void *operator new(size_t sz);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 int isKeyword()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 void print()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
60 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 string toChars()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
64 static char buffer[3 + 3 * value.sizeof + 1];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 string p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68 switch (value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70 case TOK.TOKint32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
71 version (IN_GCC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 sprintf(buffer.ptr,"%d",cast(int)int64value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74 sprintf(buffer.ptr,"%d",int32value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
75 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
76 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
77
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
78 case TOK.TOKuns32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
79 case TOK.TOKcharv:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
80 case TOK.TOKwcharv:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
81 case TOK.TOKdcharv:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
82 version (IN_GCC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
83 sprintf(buffer.ptr,"%uU",cast(uint)uns64value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
85 sprintf(buffer.ptr,"%uU",uns32value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
87 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89 case TOK.TOKint64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90 sprintf(buffer.ptr,"%jdL",int64value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 case TOK.TOKuns64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 sprintf(buffer.ptr,"%juUL",uns64value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 version (IN_GCC) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 case TOK.TOKfloat32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99 case TOK.TOKfloat64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 case TOK.TOKfloat80v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 float80value.format(buffer, sizeof(buffer));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 case TOK.TOKimaginary32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 case TOK.TOKimaginary64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105 case TOK.TOKimaginary80v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 float80value.format(buffer, sizeof(buffer));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 // %% buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 strcat(buffer, "i");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 case TOK.TOKfloat32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 sprintf(buffer.ptr,"%Lgf", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115 case TOK.TOKfloat64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116 sprintf(buffer.ptr,"%Lg", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 case TOK.TOKfloat80v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 sprintf(buffer.ptr,"%LgL", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123 case TOK.TOKimaginary32v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124 sprintf(buffer.ptr,"%Lgfi", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127 case TOK.TOKimaginary64v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128 sprintf(buffer.ptr,"%Lgi", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
130
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
131 case TOK.TOKimaginary80v:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132 sprintf(buffer.ptr,"%LgLi", float80value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
135
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136 case TOK.TOKstring:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
137 version (CSTRINGS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
138 p = string;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
139 } else {
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
140 { OutBuffer buf = new OutBuffer();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
141
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
142 buf.writeByte('"');
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
143 for (size_t i = 0; i < len; )
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 dchar c; ///!
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
147 utf_decodeChar(ustring[0..len], &i, &c);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
148 switch (c)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
149 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 case 0:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
152
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 case '"':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154 case '\\':
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 buf.writeByte('\\');
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157 if (isprint(c))
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158 buf.writeByte(c);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 else if (c <= 0x7F)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160 buf.printf("\\x%02x", c);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 else if (c <= 0xFFFF)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 buf.printf("\\u%04x", c);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164 buf.printf("\\U%08x", c);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
165 continue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 buf.writeByte('"');
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 if (postfix)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 buf.writeByte('"');
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172 buf.writeByte(0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
173 p = buf.extractString();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 case TOK.TOKidentifier:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179 case TOK.TOKenum:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 case TOK.TOKstruct:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 case TOK.TOKimport:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 case TOK.TOKwchar: case TOK.TOKdchar:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183 case TOK.TOKbit: case TOK.TOKbool: case TOK.TOKchar:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184 case TOK.TOKint8: case TOK.TOKuns8:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 case TOK.TOKint16: case TOK.TOKuns16:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 case TOK.TOKint32: case TOK.TOKuns32:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 case TOK.TOKint64: case TOK.TOKuns64:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188 case TOK.TOKfloat32: case TOK.TOKfloat64: case TOK.TOKfloat80:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 case TOK.TOKimaginary32: case TOK.TOKimaginary64: case TOK.TOKimaginary80:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 case TOK.TOKcomplex32: case TOK.TOKcomplex64: case TOK.TOKcomplex80:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191 case TOK.TOKvoid:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 p = ident.toChars();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 default:
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 p = toChars(value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197 break;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 return p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
201
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
202 static string toChars(TOK value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 string p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 static char buffer[3 + 3 * value.sizeof + 1];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207 p = tochars[value];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 if (!p)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
209 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
210 int len = sprintf(buffer.ptr, "TOK%d".ptr, value);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
211 p = buffer[0..len].idup;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
212 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
213
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
214 return p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
215 }
16
5c9b78899f5d Implemented methods for Tuples, fixed some linking issues.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
216 }