From: Sidney M. <si...@si...> - 2010-03-25 20:49:41
|
Martin Cracauer wrote, On 26/03/10 9:28 AM: > I'm not sure I parsed that completely. Could you clarify? Sorry I wasn't clear. I haven't tried to look at what the compiler is doing, but I notice that the behavior is compatible with it doing the following optimization The "for leg across foo" contains a type check of the value of foo being a sequence. Since the value of foo cannot change from what it is when it is passed in as an argument, the type check can be lifted out of the entire loop form so that the value of foo does not have to be checked every single time you execute the inner loop, just once at the beginning. That appears to be what is happening, but there is a problem as you point out that the result is different when the loop should never be executed at all, and the type check now moved to before the loop, fails. My question is whether there is a reasonable way to have the optimization of lifting the type check out of the inner loops, yet still preserve the behavior that is expected when the loops are not going to be evaluated even once. |