You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Alex Harui (JIRA)" <ji...@apache.org> on 2015/12/11 19:31:11 UTC
[jira] [Assigned] (FLEX-34984) for-each loops cross-compile
incorrectly
[ https://issues.apache.org/jira/browse/FLEX-34984?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alex Harui reassigned FLEX-34984:
---------------------------------
Assignee: Alex Harui
> 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
> Assignee: Alex Harui
>
> 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)