annotate dmd/Token.d @ 79:43073c7c7769

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