annotate dmd2/aliasthis.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 638d16625da2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1452
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
1
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
2 // Compiler implementation of the D programming language
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
3 // Copyright (c) 2009-2009 by Digital Mars
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
4 // All Rights Reserved
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
5 // written by Walter Bright
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
6 // http://www.digitalmars.com
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
7 // License for redistribution is by either the Artistic License
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
8 // in artistic.txt, or the GNU General Public License in gnu.txt.
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
9 // See the included readme.txt for details.
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
10
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
11 #include <stdio.h>
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
12 #include <assert.h>
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
13
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
14 #include "mars.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
15 #include "identifier.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
16 #include "aliasthis.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
17 #include "scope.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
18 #include "aggregate.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
19 #include "dsymbol.h"
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
20
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
21 #if DMDV2
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
22
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
23
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
24 AliasThis::AliasThis(Loc loc, Identifier *ident)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
25 : Dsymbol(NULL) // it's anonymous (no identifier)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
26 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
27 this->loc = loc;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
28 this->ident = ident;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
29 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
30
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
31 Dsymbol *AliasThis::syntaxCopy(Dsymbol *s)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
32 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
33 assert(!s);
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
34 /* Since there is no semantic information stored here,
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
35 * we don't need to copy it.
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
36 */
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
37 return this;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
38 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
39
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
40 void AliasThis::semantic(Scope *sc)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
41 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
42 Dsymbol *parent = sc->parent;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
43 if (parent)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
44 parent = parent->pastMixin();
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
45 AggregateDeclaration *ad = NULL;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
46 if (parent)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
47 ad = parent->isAggregateDeclaration();
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
48 if (ad)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
49 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
50 if (ad->aliasthis)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
51 error("there can be only one alias this");
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
52 assert(ad->members);
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
53 Dsymbol *s = ad->search(loc, ident, 0);
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
54 ad->aliasthis = s;
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
55 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
56 else
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
57 error("alias this can only appear in struct or class declaration, not %s", parent ? parent->toChars() : "nowhere");
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
58 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
59
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
60 const char *AliasThis::kind()
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
61 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
62 return "alias this";
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
63 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
64
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
65 void AliasThis::toCBuffer(OutBuffer *buf, HdrGenState *hgs)
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
66 {
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
67 buf->writestring("alias ");
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
68 buf->writestring(ident->toChars());
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
69 buf->writestring(" this;\n");
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
70 }
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
71
638d16625da2 LDC 2 compiles again.
Robert Clipsham <robert@octarineparrot.com>
parents:
diff changeset
72 #endif