http://d.puremagic.com/issues/show_bug.cgi?id=2484
nfx...@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch --- Comment #8 from nfx...@gmail.com 2010-04-24 08:24:31 PDT --- Here's a partial patch against dmd 1.057: diff --git a/dsymbol.c b/dsymbol.c index 7614e13..5fca88e 100644 --- a/dsymbol.c +++ b/dsymbol.c @@ -715,6 +715,20 @@ ScopeDsymbol::ScopeDsymbol(Identifier *id) prots = NULL; } +void ScopeDsymbol::addLocalClass(ClassDeclarations * aclasses) { + //???????????????????????? + if (!members) + return; + + //printf("members->dim = %d\n", members->dim); + for (int i = 0; i < members->dim; i++) + { Dsymbol *member = (Dsymbol *)members->data[i]; + + //printf("\tmember '%s'\n", member->toChars()); + member->addLocalClass(aclasses); + } +} + Dsymbol *ScopeDsymbol::syntaxCopy(Dsymbol *s) { //printf("ScopeDsymbol::syntaxCopy('%s')\n", toChars()); diff --git a/dsymbol.h b/dsymbol.h index e566515..49f8750 100644 --- a/dsymbol.h +++ b/dsymbol.h @@ -270,6 +270,8 @@ struct ScopeDsymbol : Dsymbol static Dsymbol *getNth(Array *members, size_t nth, size_t *pn = NULL); ScopeDsymbol *isScopeDsymbol() { return this; } + + void addLocalClass(ClassDeclarations *); }; // With statement scope diff --git a/template.h b/template.h index 90b5161..ecbd04e 100644 --- a/template.h +++ b/template.h @@ -87,6 +87,9 @@ struct TemplateDeclaration : ScopeDsymbol int isOverloadable(); void makeParamNamesVisibleInConstraint(Scope *paramscope); + + // don't add uninstantiated template classes + void addLocalClass(ClassDeclarations *) {} }; struct TemplateParameter diff --git a/toobj.c b/toobj.c index e2d2403..1431e0e 100644 --- a/toobj.c +++ b/toobj.c @@ -92,13 +92,7 @@ void Module::genmoduleinfo() ClassDeclarations aclasses; - //printf("members->dim = %d\n", members->dim); - for (int i = 0; i < members->dim; i++) - { Dsymbol *member = (Dsymbol *)members->data[i]; - - //printf("\tmember '%s'\n", member->toChars()); - member->addLocalClass(&aclasses); - } + addLocalClass(&aclasses); // importedModules[] int aimports_dim = aimports.dim; Here's a test case: import tango.io.Stdout; class This {} struct X { class Foo { } } class C(T) { } void main() { class Goo { } //not detected auto z = new Goo(); C!(int) x = new C!(int); ClassInfo cobj = Object.classinfo; foreach (ModuleInfo m; ModuleInfo) { foreach (ClassInfo ci; m.localClasses) { if (ci is This.classinfo) { foreach (c; m.localClasses) Stdout.formatln("{}", c.name); } } } It prints: d.This d.X.Foo d.C!(int).C As can be seen, class Goo is still missing. It seems the patch doesn't search through functions. Maybe there are other cases where it still fails. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------