Mercurial > projects > ldc
annotate dmd/enum.c @ 1626:8fa4ab3dcc88
Merge DMD r320: refactor
---
dmd/expression.c | 7 +++----
dmd/expression.h | 2 +-
dmd/mtype.c | 34 ++++++++--------------------------
3 files changed, 12 insertions(+), 31 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:23 -0300 |
parents | 1d48eced441f |
children | 6c36e3f49b28 |
rev | line source |
---|---|
1606
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
1 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
2 // Copyright (c) 1999-2009 by Digital Mars |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
3 // All Rights Reserved |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
4 // written by Walter Bright |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
5 // http://www.digitalmars.com |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
6 // License for redistribution is by either the Artistic License |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
7 // in artistic.txt, or the GNU General Public License in gnu.txt. |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
8 // See the included readme.txt for details. |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
9 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
10 #include <stdio.h> |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
11 #include <assert.h> |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
12 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
13 #include "root.h" |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
14 #include "enum.h" |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
15 #include "mtype.h" |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
16 #include "scope.h" |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
17 #include "declaration.h" |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
18 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
19 /********************************* EnumDeclaration ****************************/ |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
20 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
21 EnumDeclaration::EnumDeclaration(Loc loc, Identifier *id, Type *memtype) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
22 : ScopeDsymbol(id) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
23 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
24 this->loc = loc; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
25 type = new TypeEnum(this); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
26 this->memtype = memtype; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
27 maxval = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
28 minval = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
29 defaultval = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
30 #if IN_DMD |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
31 sinit = NULL; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
32 #endif |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
33 isdeprecated = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
34 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
35 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
36 Dsymbol *EnumDeclaration::syntaxCopy(Dsymbol *s) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
37 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
38 Type *t = NULL; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
39 if (memtype) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
40 t = memtype->syntaxCopy(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
41 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
42 EnumDeclaration *ed; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
43 if (s) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
44 { ed = (EnumDeclaration *)s; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
45 ed->memtype = t; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
46 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
47 else |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
48 ed = new EnumDeclaration(loc, ident, t); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
49 ScopeDsymbol::syntaxCopy(ed); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
50 return ed; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
51 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
52 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
53 void EnumDeclaration::semantic(Scope *sc) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
54 { int i; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
55 uinteger_t number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
56 Type *t; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
57 Scope *sce; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
58 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
59 //printf("EnumDeclaration::semantic(sd = %p, '%s')\n", sc->scopesym, sc->scopesym->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
60 if (!memtype) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
61 memtype = Type::tint32; |
1623
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
62 |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
63 if (symtab) // if already done |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
64 { if (!scope) |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
65 return; // semantic() already completed |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
66 } |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
67 else |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
68 symtab = new DsymbolTable(); |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
69 |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
70 Scope *scx = NULL; |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
71 if (scope) |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
72 { sc = scope; |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
73 scx = scope; // save so we don't make redundant copies |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
74 scope = NULL; |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
75 } |
1d48eced441f
Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents:
1606
diff
changeset
|
76 |
1606
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
77 if (sc->stc & STCdeprecated) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
78 isdeprecated = 1; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
79 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
80 parent = sc->scopesym; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
81 memtype = memtype->semantic(loc, sc); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
82 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
83 /* Check to see if memtype is forward referenced |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
84 */ |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
85 if (memtype->ty == Tenum) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
86 { EnumDeclaration *sym = (EnumDeclaration *)memtype->toDsymbol(sc); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
87 if (!sym->memtype) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
88 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
89 error("base enum %s is forward referenced", sym->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
90 memtype = Type::tint32; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
91 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
92 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
93 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
94 if (!memtype->isintegral()) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
95 { error("base type must be of integral type, not %s", memtype->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
96 memtype = Type::tint32; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
97 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
98 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
99 t = isAnonymous() ? memtype : type; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
100 symtab = new DsymbolTable(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
101 sce = sc->push(this); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
102 sce->parent = this; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
103 number = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
104 if (!members) // enum ident; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
105 return; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
106 if (members->dim == 0) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
107 error("enum %s must have at least one member", toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
108 int first = 1; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
109 for (i = 0; i < members->dim; i++) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
110 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
111 EnumMember *em = ((Dsymbol *)members->data[i])->isEnumMember(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
112 Expression *e; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
113 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
114 if (!em) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
115 /* The e->semantic(sce) can insert other symbols, such as |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
116 * template instances and function literals. |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
117 */ |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
118 continue; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
119 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
120 //printf("Enum member '%s'\n",em->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
121 e = em->value; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
122 if (e) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
123 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
124 assert(e->dyncast() == DYNCAST_EXPRESSION); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
125 e = e->semantic(sce); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
126 e = e->optimize(WANTvalue); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
127 // Need to copy it because we're going to change the type |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
128 e = e->copy(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
129 e = e->implicitCastTo(sc, memtype); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
130 e = e->optimize(WANTvalue); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
131 number = e->toInteger(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
132 e->type = t; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
133 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
134 else |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
135 { // Default is the previous number plus 1 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
136 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
137 // Check for overflow |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
138 if (!first) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
139 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
140 switch (t->toBasetype()->ty) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
141 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
142 case Tbool: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
143 if (number == 2) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
144 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
145 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
146 case Tint8: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
147 if (number == 128) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
148 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
149 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
150 case Tchar: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
151 case Tuns8: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
152 if (number == 256) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
153 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
154 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
155 case Tint16: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
156 if (number == 0x8000) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
157 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
158 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
159 case Twchar: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
160 case Tuns16: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
161 if (number == 0x10000) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
162 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
163 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
164 case Tint32: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
165 if (number == 0x80000000) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
166 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
167 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
168 case Tdchar: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
169 case Tuns32: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
170 if (number == 0x100000000LL) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
171 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
172 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
173 case Tint64: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
174 if (number == 0x8000000000000000LL) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
175 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
176 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
177 case Tuns64: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
178 if (number == 0) goto Loverflow; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
179 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
180 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
181 Loverflow: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
182 error("overflow of enum value"); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
183 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
184 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
185 default: |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
186 assert(0); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
187 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
188 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
189 e = new IntegerExp(em->loc, number, t); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
190 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
191 em->value = e; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
192 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
193 // Add to symbol table only after evaluating 'value' |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
194 if (isAnonymous()) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
195 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
196 //sce->enclosing->insert(em); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
197 for (Scope *scx = sce->enclosing; scx; scx = scx->enclosing) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
198 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
199 if (scx->scopesym) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
200 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
201 if (!scx->scopesym->symtab) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
202 scx->scopesym->symtab = new DsymbolTable(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
203 em->addMember(sce, scx->scopesym, 1); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
204 break; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
205 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
206 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
207 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
208 else |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
209 em->addMember(sc, this, 1); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
210 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
211 if (first) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
212 { first = 0; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
213 defaultval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
214 minval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
215 maxval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
216 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
217 else if (memtype->isunsigned()) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
218 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
219 if (number < minval) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
220 minval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
221 if (number > maxval) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
222 maxval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
223 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
224 else |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
225 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
226 if ((sinteger_t)number < (sinteger_t)minval) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
227 minval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
228 if ((sinteger_t)number > (sinteger_t)maxval) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
229 maxval = number; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
230 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
231 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
232 number++; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
233 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
234 //printf("defaultval = %lld\n", defaultval); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
235 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
236 sce->pop(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
237 //members->print(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
238 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
239 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
240 int EnumDeclaration::oneMember(Dsymbol **ps) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
241 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
242 if (isAnonymous()) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
243 return Dsymbol::oneMembers(members, ps); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
244 return Dsymbol::oneMember(ps); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
245 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
246 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
247 void EnumDeclaration::toCBuffer(OutBuffer *buf, HdrGenState *hgs) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
248 { int i; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
249 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
250 buf->writestring("enum "); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
251 if (ident) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
252 { buf->writestring(ident->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
253 buf->writeByte(' '); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
254 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
255 if (memtype) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
256 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
257 buf->writestring(": "); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
258 memtype->toCBuffer(buf, NULL, hgs); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
259 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
260 if (!members) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
261 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
262 buf->writeByte(';'); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
263 buf->writenl(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
264 return; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
265 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
266 buf->writenl(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
267 buf->writeByte('{'); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
268 buf->writenl(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
269 for (i = 0; i < members->dim; i++) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
270 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
271 EnumMember *em = ((Dsymbol *)members->data[i])->isEnumMember(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
272 if (!em) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
273 continue; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
274 //buf->writestring(" "); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
275 em->toCBuffer(buf, hgs); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
276 buf->writeByte(','); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
277 buf->writenl(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
278 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
279 buf->writeByte('}'); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
280 buf->writenl(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
281 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
282 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
283 Type *EnumDeclaration::getType() |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
284 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
285 return type; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
286 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
287 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
288 const char *EnumDeclaration::kind() |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
289 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
290 return "enum"; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
291 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
292 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
293 int EnumDeclaration::isDeprecated() |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
294 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
295 return isdeprecated; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
296 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
297 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
298 /********************************* EnumMember ****************************/ |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
299 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
300 EnumMember::EnumMember(Loc loc, Identifier *id, Expression *value) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
301 : Dsymbol(id) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
302 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
303 this->value = value; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
304 this->loc = loc; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
305 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
306 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
307 Dsymbol *EnumMember::syntaxCopy(Dsymbol *s) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
308 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
309 Expression *e = NULL; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
310 if (value) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
311 e = value->syntaxCopy(); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
312 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
313 EnumMember *em; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
314 if (s) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
315 { em = (EnumMember *)s; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
316 em->loc = loc; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
317 em->value = e; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
318 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
319 else |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
320 em = new EnumMember(loc, ident, e); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
321 return em; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
322 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
323 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
324 void EnumMember::toCBuffer(OutBuffer *buf, HdrGenState *hgs) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
325 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
326 buf->writestring(ident->toChars()); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
327 if (value) |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
328 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
329 buf->writestring(" = "); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
330 value->toCBuffer(buf, hgs); |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
331 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
332 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
333 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
334 const char *EnumMember::kind() |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
335 { |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
336 return "enum member"; |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
337 } |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
338 |
1b24e9c7cc26
Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents:
1195
diff
changeset
|
339 |