Mercurial > projects > ldc
diff dmd/struct.c @ 1625:79f64d5fee9e
Merge DMD r319: bugzilla 400 forward reference error...
bugzilla 400 forward reference error; no propety X for type Y (struct
within struct).
---
dmd/class.c | 19 +++++++++++++++++--
dmd/struct.c | 16 ++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:22 -0300 |
parents | ae8a94d87ca9 |
children | 6c36e3f49b28 |
line wrap: on
line diff
--- a/dmd/struct.c Wed Jan 06 15:18:22 2010 -0300 +++ b/dmd/struct.c Wed Jan 06 15:18:22 2010 -0300 @@ -307,6 +307,22 @@ sc2->explicitProtection = 0; int members_dim = members->dim; + + /* Set scope so if there are forward references, we still might be able to + * resolve individual members like enums. + */ + for (int i = 0; i < members_dim; i++) + { Dsymbol *s = (Dsymbol *)members->data[i]; + /* There are problems doing this in the general case because + * Scope keeps track of things like 'offset' + */ + if (s->isEnumDeclaration() || (s->isAggregateDeclaration() && s->ident)) + { + //printf("setScope %s %s\n", s->kind(), s->toChars()); + s->setScope(sc2); + } + } + for (i = 0; i < members_dim; i++) { Dsymbol *s = (Dsymbol *)members->data[i];