annotate dmd/lexer.h @ 1138:4c8bb03e4fbc

Update DtoConstFP() to be correct after LLVM r67562, which changed the way the APFloat constructor expects its i80 APInts to be formatted. (They're now actually consistent with the x87 format)
author Frits van Bommel <fvbommel wxs.nl>
date Tue, 24 Mar 2009 15:24:59 +0100
parents a26b0c5d5942
children 226c07c71967
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
717
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
1
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
2 // Compiler implementation of the D programming language
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
3 // Copyright (c) 1999-2008 by Digital Mars
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
4 // All Rights Reserved
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
5 // written by Walter Bright
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
6 // http://www.digitalmars.com
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
7 // License for redistribution is by either the Artistic License
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
9 // See the included readme.txt for details.
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
10
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
11 #ifndef DMD_LEXER_H
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
12 #define DMD_LEXER_H
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
13
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
14 #ifdef __DMC__
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
15 #pragma once
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
16 #endif /* __DMC__ */
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
17
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
18 #include "root.h"
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
19 #include "mars.h"
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
20
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
21 struct StringTable;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
22 struct Identifier;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
23 struct Module;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
24
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
25 /* Tokens:
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
26 ( )
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
27 [ ]
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
28 { }
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
29 < > <= >= == != === !==
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
30 << >> <<= >>= >>> >>>=
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
31 + - += -=
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
32 * / % *= /= %=
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
33 & | ^ &= |= ^=
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
34 = ! ~
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
35 ++ --
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
36 . -> : ,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
37 ? && ||
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
38 */
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
39
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
40 enum TOK
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
41 {
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
42 TOKreserved,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
43
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
44 // Other
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
45 TOKlparen, TOKrparen,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
46 TOKlbracket, TOKrbracket,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
47 TOKlcurly, TOKrcurly,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
48 TOKcolon, TOKneg,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
49 TOKsemicolon, TOKdotdotdot,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
50 TOKeof, TOKcast,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
51 TOKnull, TOKassert,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
52 TOKtrue, TOKfalse,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
53 TOKarray, TOKcall,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
54 TOKaddress, TOKtypedot,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
55 TOKtype, TOKthrow,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
56 TOKnew, TOKdelete,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
57 TOKstar, TOKsymoff,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
58 TOKvar, TOKdotvar,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
59 TOKdotti, TOKdotexp,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
60 TOKdottype, TOKslice,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
61 TOKarraylength, TOKversion,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
62 TOKmodule, TOKdollar,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
63 TOKtemplate, TOKdottd,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
64 TOKdeclaration, TOKtypeof,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
65 TOKpragma, TOKdsymbol,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
66 TOKtypeid, TOKuadd,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
67 TOKremove,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
68 TOKnewanonclass, TOKcomment,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
69 TOKarrayliteral, TOKassocarrayliteral,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
70 TOKstructliteral,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
71
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
72 // Operators
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
73 TOKlt, TOKgt,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
74 TOKle, TOKge,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
75 TOKequal, TOKnotequal,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
76 TOKidentity, TOKnotidentity,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
77 TOKindex, TOKis,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
78 TOKtobool,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
79
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
80 // 60
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
81 // NCEG floating point compares
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
82 // !<>= <> <>= !> !>= !< !<= !<>
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
83 TOKunord,TOKlg,TOKleg,TOKule,TOKul,TOKuge,TOKug,TOKue,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
84
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
85 TOKshl, TOKshr,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
86 TOKshlass, TOKshrass,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
87 TOKushr, TOKushrass,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
88 TOKcat, TOKcatass, // ~ ~=
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
89 TOKadd, TOKmin, TOKaddass, TOKminass,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
90 TOKmul, TOKdiv, TOKmod,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
91 TOKmulass, TOKdivass, TOKmodass,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
92 TOKand, TOKor, TOKxor,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
93 TOKandass, TOKorass, TOKxorass,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
94 TOKassign, TOKnot, TOKtilde,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
95 TOKplusplus, TOKminusminus, TOKconstruct, TOKblit,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
96 TOKdot, TOKarrow, TOKcomma,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
97 TOKquestion, TOKandand, TOKoror,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
98
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
99 // 104
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
100 // Numeric literals
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
101 TOKint32v, TOKuns32v,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
102 TOKint64v, TOKuns64v,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
103 TOKfloat32v, TOKfloat64v, TOKfloat80v,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
104 TOKimaginary32v, TOKimaginary64v, TOKimaginary80v,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
105
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
106 // Char constants
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
107 TOKcharv, TOKwcharv, TOKdcharv,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
108
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
109 // Leaf operators
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
110 TOKidentifier, TOKstring,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
111 TOKthis, TOKsuper,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
112 TOKhalt, TOKtuple,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
113
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
114 // Basic types
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
115 TOKvoid,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
116 TOKint8, TOKuns8,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
117 TOKint16, TOKuns16,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
118 TOKint32, TOKuns32,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
119 TOKint64, TOKuns64,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
120 TOKfloat32, TOKfloat64, TOKfloat80,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
121 TOKimaginary32, TOKimaginary64, TOKimaginary80,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
122 TOKcomplex32, TOKcomplex64, TOKcomplex80,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
123 TOKchar, TOKwchar, TOKdchar, TOKbit, TOKbool,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
124 TOKcent, TOKucent,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
125
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
126 // Aggregates
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
127 TOKstruct, TOKclass, TOKinterface, TOKunion, TOKenum, TOKimport,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
128 TOKtypedef, TOKalias, TOKoverride, TOKdelegate, TOKfunction,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
129 TOKmixin,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
130
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
131 TOKalign, TOKextern, TOKprivate, TOKprotected, TOKpublic, TOKexport,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
132 TOKstatic, /*TOKvirtual,*/ TOKfinal, TOKconst, TOKabstract, TOKvolatile,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
133 TOKdebug, TOKdeprecated, TOKin, TOKout, TOKinout, TOKlazy,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
134 TOKauto, TOKpackage, TOKmanifest,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
135
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
136 // Statements
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
137 TOKif, TOKelse, TOKwhile, TOKfor, TOKdo, TOKswitch,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
138 TOKcase, TOKdefault, TOKbreak, TOKcontinue, TOKwith,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
139 TOKsynchronized, TOKreturn, TOKgoto, TOKtry, TOKcatch, TOKfinally,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
140 TOKasm, TOKforeach, TOKforeach_reverse,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
141 TOKscope,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
142 TOKon_scope_exit, TOKon_scope_failure, TOKon_scope_success,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
143
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
144 // Contracts
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
145 TOKbody, TOKinvariant,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
146
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
147 // Testing
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
148 TOKunittest,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
149
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
150 // Added after 1.0
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
151 TOKref,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
152 TOKmacro,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
153 #if DMDV2
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
154 TOKtraits,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
155 TOKoverloadset,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
156 TOKpure,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
157 TOKnothrow,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
158 TOKtls,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
159 TOKline,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
160 TOKfile,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
161 TOKshared,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
162 #endif
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
163
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
164 // LDC specific
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
165 #if IN_LLVM
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
166 TOKgep,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
167 #endif
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
168
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
169 TOKMAX
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
170 };
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
171
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
172 #define CASE_BASIC_TYPES \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
173 case TOKwchar: case TOKdchar: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
174 case TOKbit: case TOKbool: case TOKchar: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
175 case TOKint8: case TOKuns8: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
176 case TOKint16: case TOKuns16: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
177 case TOKint32: case TOKuns32: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
178 case TOKint64: case TOKuns64: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
179 case TOKfloat32: case TOKfloat64: case TOKfloat80: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
180 case TOKimaginary32: case TOKimaginary64: case TOKimaginary80: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
181 case TOKcomplex32: case TOKcomplex64: case TOKcomplex80: \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
182 case TOKvoid
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
183
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
184 #define CASE_BASIC_TYPES_X(t) \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
185 case TOKvoid: t = Type::tvoid; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
186 case TOKint8: t = Type::tint8; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
187 case TOKuns8: t = Type::tuns8; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
188 case TOKint16: t = Type::tint16; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
189 case TOKuns16: t = Type::tuns16; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
190 case TOKint32: t = Type::tint32; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
191 case TOKuns32: t = Type::tuns32; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
192 case TOKint64: t = Type::tint64; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
193 case TOKuns64: t = Type::tuns64; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
194 case TOKfloat32: t = Type::tfloat32; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
195 case TOKfloat64: t = Type::tfloat64; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
196 case TOKfloat80: t = Type::tfloat80; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
197 case TOKimaginary32: t = Type::timaginary32; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
198 case TOKimaginary64: t = Type::timaginary64; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
199 case TOKimaginary80: t = Type::timaginary80; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
200 case TOKcomplex32: t = Type::tcomplex32; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
201 case TOKcomplex64: t = Type::tcomplex64; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
202 case TOKcomplex80: t = Type::tcomplex80; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
203 case TOKbit: t = Type::tbit; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
204 case TOKbool: t = Type::tbool; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
205 case TOKchar: t = Type::tchar; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
206 case TOKwchar: t = Type::twchar; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
207 case TOKdchar: t = Type::tdchar; goto LabelX; \
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
208 LabelX
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
209
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
210 struct Token
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
211 {
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
212 Token *next;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
213 unsigned char *ptr; // pointer to first character of this token within buffer
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
214 enum TOK value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
215 unsigned char *blockComment; // doc comment string prior to this token
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
216 unsigned char *lineComment; // doc comment for previous token
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
217 union
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
218 {
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
219 // Integers
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
220 d_int32 int32value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
221 d_uns32 uns32value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
222 d_int64 int64value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
223 d_uns64 uns64value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
224
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
225 // Floats
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
226 #ifdef IN_GCC
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
227 // real_t float80value; // can't use this in a union!
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
228 #else
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
229 d_float80 float80value;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
230 #endif
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
231
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
232 struct
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
233 { unsigned char *ustring; // UTF8 string
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
234 unsigned len;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
235 unsigned char postfix; // 'c', 'w', 'd'
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
236 };
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
237
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
238 Identifier *ident;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
239 };
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
240 #ifdef IN_GCC
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
241 real_t float80value; // can't use this in a union!
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
242 #endif
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
243
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
244 static const char *tochars[TOKMAX];
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
245 static void *operator new(size_t sz);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
246
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
247 int isKeyword();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
248 void print();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
249 const char *toChars();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
250 static const char *toChars(enum TOK);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
251 };
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
252
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
253 struct Lexer
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
254 {
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
255 static StringTable stringtable;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
256 static OutBuffer stringbuffer;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
257 static Token *freelist;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
258
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
259 Loc loc; // for error messages
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
260
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
261 unsigned char *base; // pointer to start of buffer
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
262 unsigned char *end; // past end of buffer
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
263 unsigned char *p; // current character
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
264 Token token;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
265 Module *mod;
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
266 int doDocComment; // collect doc comment information
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
267 int anyToken; // !=0 means seen at least one token
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
268 int commentToken; // !=0 means comments are TOKcomment's
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
269
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
270 Lexer(Module *mod,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
271 unsigned char *base, unsigned begoffset, unsigned endoffset,
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
272 int doDocComment, int commentToken);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
273
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
274 static void initKeywords();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
275 static Identifier *idPool(const char *s);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
276 static Identifier *uniqueId(const char *s);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
277 static Identifier *uniqueId(const char *s, int num);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
278
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
279 TOK nextToken();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
280 TOK peekNext();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
281 void scan(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
282 Token *peek(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
283 Token *peekPastParen(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
284 unsigned escapeSequence();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
285 TOK wysiwygStringConstant(Token *t, int tc);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
286 TOK hexStringConstant(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
287 #if DMDV2
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
288 TOK delimitedStringConstant(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
289 TOK tokenStringConstant(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
290 #endif
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
291 TOK escapeStringConstant(Token *t, int wide);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
292 TOK charConstant(Token *t, int wide);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
293 void stringPostfix(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
294 unsigned wchar(unsigned u);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
295 TOK number(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
296 TOK inreal(Token *t);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
297 void error(const char *format, ...);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
298 void error(Loc loc, const char *format, ...);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
299 void pragma();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
300 unsigned decodeUTF();
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
301 void getDocComment(Token *t, unsigned lineComment);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
302
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
303 static int isValidIdentifier(char *p);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
304 static unsigned char *combineComments(unsigned char *c1, unsigned char *c2);
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
305 };
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
306
a26b0c5d5942 Merged DMD 1.036.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 664
diff changeset
307 #endif /* DMD_LEXER_H */