http://d.puremagic.com/issues/show_bug.cgi?id=3131
--- Comment #2 from david <dav...@126.com> 2009-07-03 16:33:30 PDT --- (In reply to comment #1) > No. This is working as intended. What you're doing here is shadowing the > global 'c' with a local 'c'. Symbol lookup in D is simple: it looks in > enclosing scopes until it finds a symbol of the given name, no matter how > you're using that name. If you're porting code from another language, you're > going to have to expect some translation work. And besides, what's so > difficult about "c c = new c;", or better yet, _not doing it in the first > place_? c c = new c; <-- this is the only 1 case that trigger this issue. Sometimes you can have class ClassType1 { } class ClassType2 { ClassType1 ClassType1; void func(ClassType1 t){} // this ClassType1 is clearly referring to the type of "ClassType1" } And it's not hard to make this work. I see no reason to ignore this one. My own dmd gets several other features patched. So it's somewhat troublesome to isolate the patch to this particular bug. The idea is pretty simple, when you try to tell the user the error, firstly try to resolve the type upper scope A roughly patch: Type *TypeIdentifier::semantic(Loc loc, Scope *sc) { Type *t; Expression *e; Dsymbol *s; +++ bool tried = false; +++ Scope *sce = sc -> enclosing; //printf("TypeIdentifier::semantic(%s)\n", toChars()); resolve(loc, sc, &e, &t, &s); +++ L1: if (t) { //printf("\tit's a type %d, %s, %s\n", t->ty, t->toChars(), t->deco); if (t->ty == Ttypedef) { TypeTypedef *tt = (TypeTypedef *)t; if (tt->sym->sem == 1) error(loc, "circular reference of typedef %s", tt->toChars()); } t = t->addMod(mod); } else { +++ if ( sce != NULL) +++ { +++ resolve(loc, sce, &e, &t, &s); +++ sce = sce -> enclosing; +++ goto L1; +++ } #ifdef DEBUG if (!global.gag) printf("1: "); #endif if (s) { s->error(loc, "is used as a type"); //halt(); } else error(loc, "%s is used as a type", toChars()); t = tvoid; } //t->print(); return t; } You see, it's simple. I think it should be enhanced. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------