The latest compiler changes exposed a problem:

for(var i:int=0;i<len;i++){
        var foo:Object;
        if(someCondition(thingy[i]){
                foo = calculateFoo(thingy[i]);
        }
        doSomethingWithFoo(foo);
}

Compiles to:
for(var i=0;i<len;i++){
        var foo = null;
        if(someCondition(thingy[i]){
                foo = calculateFoo(thingy[i]);
        }
        doSomethingWithFoo(foo);
}

This is a change from the intended behavior and foo is nullified in each step 
of the loop. This can cause doSomethingWithFoo(null) even when foo was a valid 
value in a previous iteration.

I’d suggest two things:

1. I don’t see the value of initializing Objects to null at all. I’m not sure 
why that became the default. I’d vote for not defaulting to initializing 
Objects (just other types).
2. Local values of any type should not be initialized in a loop.

Harbs

Reply via email to