annotate dmd/enum.c @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
parents 44b145be2ef5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1606
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
1
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1628
diff changeset
2 // Copyright (c) 1999-2010 by Digital Mars
1606
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"
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1628
diff changeset
17 #include "module.h"
1606
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
18 #include "declaration.h"
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
19
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
20 /********************************* EnumDeclaration ****************************/
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
21
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
22 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
23 : ScopeDsymbol(id)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
24 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
25 this->loc = loc;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
26 type = new TypeEnum(this);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
27 this->memtype = memtype;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
28 maxval = 0;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
29 minval = 0;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
30 defaultval = 0;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
31 #if IN_DMD
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
32 sinit = NULL;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
33 #endif
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
34 isdeprecated = 0;
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
37 Dsymbol *EnumDeclaration::syntaxCopy(Dsymbol *s)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
38 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
39 Type *t = NULL;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
40 if (memtype)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
41 t = memtype->syntaxCopy();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
42
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
43 EnumDeclaration *ed;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
44 if (s)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
45 { ed = (EnumDeclaration *)s;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
46 ed->memtype = t;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
47 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
48 else
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
49 ed = new EnumDeclaration(loc, ident, t);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
50 ScopeDsymbol::syntaxCopy(ed);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
51 return ed;
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
54 void EnumDeclaration::semantic(Scope *sc)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
55 { int i;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
56 uinteger_t number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
57 Type *t;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
58 Scope *sce;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
59
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
60 //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
61 if (!memtype)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
62 memtype = Type::tint32;
1623
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
63
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
64 if (symtab) // if already done
1628
6c36e3f49b28 Merge DMD r324: bugzilla 3663 and 3664 - fwd ref regressions
Leandro Lucarella <llucax@gmail.com>
parents: 1623
diff changeset
65 { if (isdone || !scope)
1623
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
66 return; // semantic() already completed
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
67 }
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
68 else
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
69 symtab = new DsymbolTable();
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
70
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
71 Scope *scx = NULL;
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
72 if (scope)
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
73 { sc = scope;
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
74 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
75 scope = NULL;
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
76 }
1d48eced441f Merge DMD r317: bugzilla 3611 Enum forward referencing regression
Leandro Lucarella <llucax@gmail.com>
parents: 1606
diff changeset
77
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1628
diff changeset
78 unsigned dprogress_save = Module::dprogress;
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1628
diff changeset
79
1606
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
80 if (sc->stc & STCdeprecated)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
81 isdeprecated = 1;
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 parent = sc->scopesym;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
84 memtype = memtype->semantic(loc, sc);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
85
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
86 /* 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
87 */
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
88 if (memtype->ty == Tenum)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
89 { EnumDeclaration *sym = (EnumDeclaration *)memtype->toDsymbol(sc);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
90 if (!sym->memtype)
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 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
93 memtype = Type::tint32;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
94 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
95 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
96
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
97 if (!memtype->isintegral())
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
98 { 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
99 memtype = Type::tint32;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
100 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
101
1628
6c36e3f49b28 Merge DMD r324: bugzilla 3663 and 3664 - fwd ref regressions
Leandro Lucarella <llucax@gmail.com>
parents: 1623
diff changeset
102 isdone = 1;
1630
44b145be2ef5 Merge dmd 1.056.
Robert Clipsham <robert@octarineparrot.com>
parents: 1628
diff changeset
103 Module::dprogress++;
1628
6c36e3f49b28 Merge DMD r324: bugzilla 3663 and 3664 - fwd ref regressions
Leandro Lucarella <llucax@gmail.com>
parents: 1623
diff changeset
104
1606
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
105 t = isAnonymous() ? memtype : type;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
106 symtab = new DsymbolTable();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
107 sce = sc->push(this);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
108 sce->parent = this;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
109 number = 0;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
110 if (!members) // enum ident;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
111 return;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
112 if (members->dim == 0)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
113 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
114 int first = 1;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
115 for (i = 0; i < members->dim; i++)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
116 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
117 EnumMember *em = ((Dsymbol *)members->data[i])->isEnumMember();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
118 Expression *e;
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 if (!em)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
121 /* 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
122 * template instances and function literals.
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 continue;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
125
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
126 //printf("Enum member '%s'\n",em->toChars());
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
127 e = em->value;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
128 if (e)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
129 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
130 assert(e->dyncast() == DYNCAST_EXPRESSION);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
131 e = e->semantic(sce);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
132 e = e->optimize(WANTvalue);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
133 // 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
134 e = e->copy();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
135 e = e->implicitCastTo(sc, memtype);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
136 e = e->optimize(WANTvalue);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
137 number = e->toInteger();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
138 e->type = t;
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 else
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
141 { // Default is the previous number plus 1
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
142
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
143 // Check for overflow
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
144 if (!first)
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 switch (t->toBasetype()->ty)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
147 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
148 case Tbool:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
149 if (number == 2) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
150 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
151
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
152 case Tint8:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
153 if (number == 128) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
154 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
155
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
156 case Tchar:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
157 case Tuns8:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
158 if (number == 256) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
159 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
160
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
161 case Tint16:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
162 if (number == 0x8000) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
163 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
164
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
165 case Twchar:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
166 case Tuns16:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
167 if (number == 0x10000) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
168 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
169
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
170 case Tint32:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
171 if (number == 0x80000000) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
172 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
173
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
174 case Tdchar:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
175 case Tuns32:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
176 if (number == 0x100000000LL) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
177 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
178
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
179 case Tint64:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
180 if (number == 0x8000000000000000LL) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
181 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
182
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
183 case Tuns64:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
184 if (number == 0) goto Loverflow;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
185 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
186
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
187 Loverflow:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
188 error("overflow of enum value");
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
189 break;
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 default:
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
192 assert(0);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
193 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
194 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
195 e = new IntegerExp(em->loc, number, t);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
196 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
197 em->value = e;
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 // 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
200 if (isAnonymous())
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
201 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
202 //sce->enclosing->insert(em);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
203 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
204 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
205 if (scx->scopesym)
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 if (!scx->scopesym->symtab)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
208 scx->scopesym->symtab = new DsymbolTable();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
209 em->addMember(sce, scx->scopesym, 1);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
210 break;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
211 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
212 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
213 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
214 else
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
215 em->addMember(sc, this, 1);
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 if (first)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
218 { first = 0;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
219 defaultval = number;
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 maxval = number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
222 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
223 else if (memtype->isunsigned())
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
224 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
225 if (number < minval)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
226 minval = number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
227 if (number > maxval)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
228 maxval = number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
229 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
230 else
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 if ((sinteger_t)number < (sinteger_t)minval)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
233 minval = number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
234 if ((sinteger_t)number > (sinteger_t)maxval)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
235 maxval = number;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
236 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
237
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
238 number++;
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 //printf("defaultval = %lld\n", defaultval);
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 sce->pop();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
243 //members->print();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
244 }
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 int EnumDeclaration::oneMember(Dsymbol **ps)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
247 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
248 if (isAnonymous())
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
249 return Dsymbol::oneMembers(members, ps);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
250 return Dsymbol::oneMember(ps);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
251 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
252
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
253 void EnumDeclaration::toCBuffer(OutBuffer *buf, HdrGenState *hgs)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
254 { int i;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
255
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
256 buf->writestring("enum ");
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
257 if (ident)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
258 { buf->writestring(ident->toChars());
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
259 buf->writeByte(' ');
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
260 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
261 if (memtype)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
262 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
263 buf->writestring(": ");
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
264 memtype->toCBuffer(buf, NULL, hgs);
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 if (!members)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
267 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
268 buf->writeByte(';');
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
269 buf->writenl();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
270 return;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
271 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
272 buf->writenl();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
273 buf->writeByte('{');
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
274 buf->writenl();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
275 for (i = 0; i < members->dim; i++)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
276 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
277 EnumMember *em = ((Dsymbol *)members->data[i])->isEnumMember();
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
278 if (!em)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
279 continue;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
280 //buf->writestring(" ");
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
281 em->toCBuffer(buf, hgs);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
282 buf->writeByte(',');
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
283 buf->writenl();
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 buf->writeByte('}');
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
286 buf->writenl();
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
289 Type *EnumDeclaration::getType()
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
290 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
291 return type;
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
294 const char *EnumDeclaration::kind()
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
295 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
296 return "enum";
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
299 int EnumDeclaration::isDeprecated()
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
300 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
301 return isdeprecated;
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
304 /********************************* EnumMember ****************************/
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 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
307 : Dsymbol(id)
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 this->value = value;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
310 this->loc = loc;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
311 }
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 Dsymbol *EnumMember::syntaxCopy(Dsymbol *s)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
314 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
315 Expression *e = NULL;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
316 if (value)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
317 e = value->syntaxCopy();
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 EnumMember *em;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
320 if (s)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
321 { em = (EnumMember *)s;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
322 em->loc = loc;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
323 em->value = e;
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
324 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
325 else
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
326 em = new EnumMember(loc, ident, e);
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
327 return em;
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
330 void EnumMember::toCBuffer(OutBuffer *buf, HdrGenState *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 buf->writestring(ident->toChars());
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
333 if (value)
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
334 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
335 buf->writestring(" = ");
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
336 value->toCBuffer(buf, hgs);
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
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
340 const char *EnumMember::kind()
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
341 {
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
342 return "enum member";
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
343 }
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
344
1b24e9c7cc26 Use just \n as end of line
Leandro Lucarella <llucax@gmail.com>
parents: 1195
diff changeset
345