Annoyance: 'Shadowing declaration is deprecated'+ mixins

Tristam MacDonald swiftcoder at gmail.com
Tue Jul 24 11:09:30 PDT 2007


Bill Baxter Wrote:
> Don Clugston wrote:
> > Is there any chance of getting the 'shadowing declaration is deprecated' 
> > error message disabled, for code inserted via a mixin?
> > 
> > It means that if you inject a 'for' loop into the current function, it 
> > appears to work, but will fail if another variable with the same name 
> > already exists.
> > 
> > void main()
> > {
> > // double i=300.0;
> >    mixin("for (int i=0; i<10; ++i) { func(i); }");
> > }
> > 
> > When such code is generated by a mixin, the shadowing does not indicate 
> > a probable error.
> > 
> > This is proving to be quite annoying for my BLADE rewrite.
> 
> I guess one obvious solution is to give your counter variables some 
> names that are more likely to be unique:
> 
>      mixin("for (int __i8473=0; __i8473<10; ++__i8473) { func(__i8473); }");
>

Hmm... This looks like a prime candidate for something like Scheme's 'gensym' call (which basically alliases an unique, un-named, and un-nameable symbol). Does anyone know of a way to accomplish the same at compile time in D?



More information about the Digitalmars-d mailing list