D Compiler as a Library

Marco Leise Marco.Leise at gmx.de
Sat Apr 21 08:46:55 PDT 2012


I'll answer you both here...

Am Sat, 21 Apr 2012 16:11:02 +0200
schrieb Artur Skawina <art.08.09 at gmail.com>:

> On 04/21/12 15:32, Marco Leise wrote:
> > Am Thu, 19 Apr 2012 18:58:26 +0200
> > schrieb "Roman D. Boiko" <rb at d-coding.com>:
> > 
> >> I doubt specifying symbol it would be any better than location. 
> >> For example, you would not be able to rename a local variable or 
> >> any other symbol nested in a function.
> > 
> > Yes you can! Try to compile this:
> > 
> > 	void x() {
> > 		int i = 1;
> > 		void y() {
> > 			int i = 2;
> > 			{
> > 				int i = 3;
> > 			}
> > 		}
> > 	}
> > 
> > Prints: Error: shadowing declaration x.y.i is deprecated
> > Local variables have unique names and creating duplicate names is deprecated since a while.
> 
>    void x() {
>       int i = 1;
>       {
>          int i = 2;
>          writeln(i);
>       }
>       writeln(i);
>    }
> 
> artur

That gives the same error message as before for me. I'm using GDC with DMD 2.057 frontend. Maybe the behavoir has changed. :-(

Am Sat, 21 Apr 2012 16:28:15 +0200
schrieb "Roman D. Boiko" <rb at d-coding.com>:

> On Saturday, 21 April 2012 at 13:32:28 UTC, Marco Leise wrote:
> > Am Thu, 19 Apr 2012 18:58:26 +0200
> > schrieb "Roman D. Boiko" <rb at d-coding.com>:
> >
> >> I doubt specifying symbol it would be any better than 
> >> location. For example, you would not be able to rename a local 
> >> variable or any other symbol nested in a function.
> >
> > Yes you can! Try to compile this:
> >
> > 	void x() {
> > 		int i = 1;
> > 		void y() {
> > 			int i = 2;
> > 			{
> > 				int i = 3;
> > 			}
> > 		}
> > 	}
> >
> > Prints: Error: shadowing declaration x.y.i is deprecated
> > Local variables have unique names and creating duplicate names 
> > is deprecated since a while.
> 
> I guess x.y.i is just a convenience naming used by DMD, and it 
> does not appear in specification.
> 
> Also, Artur Skawina provided a nice counter-example where it 
> would not work.

I just returned from the toilet where I flushed down this idea, because it doesn't work with overloads:

void x(int i) { ... }

void x(float i) { ... }

"x.i" is ambiguous to the refactoring tool. It would only work on the mangled names and before I go into the depths of what to do with extern(C) and so on... we can just go with the line/column lookup of symbols.

-- 
Marco



More information about the Digitalmars-d mailing list