[ https://issues.apache.org/jira/browse/FLEX-34984?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15053155#comment-15053155 ]
Alex Harui commented on FLEX-34984: ----------------------------------- ok makes sense. > for-each loops cross-compile incorrectly > ---------------------------------------- > > Key: FLEX-34984 > URL: https://issues.apache.org/jira/browse/FLEX-34984 > Project: Apache Flex > Issue Type: Bug > Components: Falcon, FlexJS > Affects Versions: Apache FlexJS 0.5.0 > Reporter: Andy Dufilie > > When you write a for-each loop, the iterable gets re-evaluated on every > iteration. > Example code: > {code} > for each (var item:Object in Test.getItems()) { > Test.doSomething(item); > } > {code} > Cross-compiled: > {code} > for (var foreachiter0 in Test.getItems()) > { > var item = Test.getItems()[foreachiter0]; > { > Test.doSomething(item); > }} > {code} > It should not call Test.getItems() on every loop iteration. Instead, it > should generate a new local variable prior to entering the loop to store the > result. > I can see problematic code in three places: > * JSGeneratingReducer.java: > https://github.com/apache/flex-falcon/blob/develop/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSGeneratingReducer.java#L3426 > * ForEachEmitter.java: > https://github.com/apache/flex-falcon/blob/develop/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java > * JSVF2JSEmitter.java: > https://github.com/apache/flex-falcon/blob/develop/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java#L1708 > Another solution would be to use a for...of loop, Standard in ES6, though > that won't work in Internet Explorer: > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of -- This message was sent by Atlassian JIRA (v6.3.4#6332)