Uploaded image for project: 'Apache Flex'
  1. Apache Flex
  2. FLEX-33280

[iOS] Packager compiles boolean condition incorrectly after loop break

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • Adobe Flex SDK 4.6 (Release)
    • None
    • Windows 7 Ultimate
      Adobe Flex SDK 4.6 (build 23201, includes Adobe AIR 3.4 SDK)
      Flash Builder 4.5.1.313231
      iPad 3 (running iOS6.0) / iPad 2 (running iOS6.0)

    Description

      ActionScript codes executes unexpectedly when compiled with Ad-Hoc packaging type, using the Flex Packager for iOS.

      The attached sample program contains a for each loop within another for each loop, that is used to compare two lists of integers. At the start of the outer loop, a variable named "matched" is set to false.

      When a match is found in the inner loop, matched is assigned the value true, and the inner loop issues a break command to early-exit the loop.

      Following the inner loop, an if statement checks the value of the boolean variable, like so:

      if (matched == false)
      {
      ...
      }

      When the code is execute as an adhoc iOS release build on an iPad 3, the code within the if statement is executed even when matched == true.

      Changing the code to the following, works as expected:

      if (!matched)
      {
      ...
      }

      Steps to reproduce:

      1) Run the attached BasicMobile project in the AIR simulator on your desktop
      2) The expected result is:

      1. Using matched == false
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      2. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3. Using no break
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3) Now export a release build for the same project to Apple iOS, using Ad Hoc packaging type.
      4) Install the app on an iPad or iPhone
      5) Run the app. The result is:

      1. Using matched == false
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      UNMATCHED: 2
      Loop
      MATCHED: 3, 3
      UNMATCHED: 3
      Loop
      UNMATCHED: 4

      2. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      3. Using !matched
      ---------------------------
      Loop
      UNMATCHED: 0
      Loop
      UNMATCHED: 1
      Loop
      MATCHED: 2, 2
      Loop
      MATCHED: 3, 3
      Loop
      UNMATCHED: 4

      Notice how in the Adhoc release version, the first case "1. Using matched == false" reports MATCHED and UNMATCHED for items 2 and 3. This indicates that the boolean variable "matched" is passing the test == false, even when its value has been set to true.

      Attachments

        1. BasicMobile.zip
          7 kB
          Ben Crowl

        Activity

          People

            aharui Alex Harui
            mrcrowl Ben Crowl
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: