static switch

Tofu Ninja emmons0 at purdue.edu
Thu Mar 6 04:49:16 PST 2014


On Wednesday, 5 March 2014 at 22:54:38 UTC, Andrei Alexandrescu 
wrote:
> On 3/5/14, 11:40 AM, Tofu Ninja wrote:
>> On Wednesday, 5 March 2014 at 18:58:49 UTC, Andrei 
>> Alexandrescu wrote:
>>>
>>> The one difficulty is figuring how to allow for all 
>>> iterations to stay
>>> in the same scope, yet not have duplicate definitions of the 
>>> iteration
>>> symbol. Probably worth a DIP. Other than that, we're a go.
>>>
>>> Andrei
>>
>> Do you have an idea of how to solve that? If not I have an 
>> idea but it
>> is a little silly and it would introduce a new feature so I 
>> would rather
>> wait and hear if there are any other solutions.
>
> My idea revolves around replacing the iteration variable(s) 
> with the respective literal(s) before doing semantic analysis. 
> This is probably unprecedented.
>
> Andrei

Forgive me if this has a real name, but what I think is needed is 
some kind of partial scope construct. A way to declare a scope 
for a specific symbol whilst still using it in the outside scope. 
I think an example would make more sense than me trying to 
explain it.

partial_scope
{
      /*block A*/
      //Things declared here are available in A and B
      int val = 5;
}
{
      /*block B*/
      //Things declared here are available in B and the outside 
scope
      int x = val;
}

int y;
y = x; // works
y = val; // fails

Things declared in block A are available in block A and block B. 
Anything declared in block B would be available in block B and 
the outside scope. Things declared in block A are not available 
in the outside scope.

With something like this, each iteration of the static foreach 
would just be rewritten as a partial_scope with the iterator 
declared in block A.


More information about the Digitalmars-d mailing list