History | Log In     View a printable version of the current page.  
Issue Details (XML)

Key: ASC-2906
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: None None
Assignee: Erik Tierney
Reporter: Paul Colby
Votes: 1
Watchers: 2
Operations

If you were logged in you would be able to see more operations.
ActionScript

Compiler errors when function contains early return statement.

Created: 10/30/07 10:26 PM   Updated: 06/27/08 09:19 AM
Component/s: Compiler Error
Security Level: Public (All JIRA Users )

Severity: Non Functioning
Reproducibility: Every Time
Discoverability: Medium
Found in Version: Flex 3 - Beta 2
Milestone: Player 10 - Code Complete
Affected OS(s): Windows - XP
Steps to Reproduce:
Steps to reproduce:
  Try to compile the following application:

<?xml version="1.0" encoding="utf-8" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
    <![CDATA[
      
      private var maxY:Object = new Object;
      private var dp:Array = new Array;
      
      private function getMaxValue():Number {
        return 100;
        var maxValue:int = 0;
        for each (var row:Object in dp) {
          // blah
        }
        if (maxY.value > maxValue)
          maxValue = maxY.value;
        return maxValue;
      }
      
  ]]>
  </mx:Script>
</mx:Application>
 
Actual Results:
As you keep trying to compile the application, the Flex Builder IDE alternates between the following two error messages:
  1131: Classes must not be nested.
  An internal build error has occurred. Check the Eclipse error log for more details.
 
Expected Results:
  Should compile cleanly.

Yes, I know that the code is somewhat redundant... it came about because I wanted to test the getMaxValue() function's caller, so I forced the function to return a fixed value. This is a pretty normal thing to do, and normally does not produce any errors. The above example does seem to be a pretty special case... if you vary just about anything, then it will work; but in that exact case it fails.

Also, if you see the first error message (1131), then fix the problem by, for example, removing the first return statement, then the subsequent compile will still fail with the second message (An internal build error)... ie, you need to try to rebuild yet again, before it succeeds... something odd is happening here ;)
Language Found: English
Bugbase Id: none
Triaged: Yes
Regression: No
Resolved by: Erik Tierney
Fixed Version: Flex 4 - Next Build
Participants: Boy Carper, Brent Baker, Erik Tierney, Paul Colby and Vijay Myneni
JDK: Sun 1.5.x


 All   Comments      Sort Order:
Brent Baker - [11/08/07 01:18 PM ]
Try compiling:
var maxY:Object = new Object;
var dp:Array = new Array;
      
function getMaxValue():Number {
   return 100;
        var maxValue:int = 0;
        for each (var row:Object in dp) {
          // blah
        }
        if (maxY.value > maxValue)
          maxValue = maxY.value;
        return maxValue;
      }

Stacktrace:
Exception in thread "main" java.lang.NullPointerException
        at macromedia.asc.util.Context.getDefType(Unknown Source)
        at macromedia.asc.semantics.ReferenceValue.getType(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.GetExpressionNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.MemberExpressionNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.ListNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.ReturnStatementNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.FunctionCommonNode.evaluate(Unknown Source)
        at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
        at macromedia.asc.parser.ProgramNode.evaluate(Unknown Source)
        at macromedia.asc.embedding.Compiler.compile(Unknown Source)
        at macromedia.asc.embedding.Compiler.doCompile(Unknown Source)
        at macromedia.asc.embedding.Compiler.doCompile(Unknown Source)
        at macromedia.asc.embedding.Main.handleFile(Unknown Source)
        at macromedia.asc.embedding.Main.main(Unknown Source)

Brent Baker - [11/08/07 01:19 PM ]
I needed to have both the early return statement and the for each loop in order to get the stacktrace

Vijay Myneni - [03/18/08 04:49 PM ]
I am getting a similar compiler error (copied below). I don't know what part of my code is causing it though. This is the first time I'm trying to compile my code in Flex Builder 3 (it was working fine in Flex Builder 2). What's the status of this bug?

!ENTRY com.adobe.flexbuilder.project 4 43 2008-03-18 14:34:18.179
!MESSAGE Uncaught exception in compiler
!STACK 0
java.lang.NullPointerException
at macromedia.asc.util.Context.getDefType(Unknown Source)
at macromedia.asc.semantics.ReferenceValue.getType(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.SetExpressionNode.evaluate(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.MemberExpressionNode.evaluate(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.ListNode.evaluate(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.ExpressionStatementNode.evaluate(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.ClassDefinitionNode.evaluate(Unknown Source)
at macromedia.asc.semantics.ConstantEvaluator.evaluate(Unknown Source)
at macromedia.asc.parser.ProgramNode.evaluate(Unknown Source)
at flex2.compiler.as3.Compiler.analyze4(Compiler.java:597)
at flex2.compiler.mxml.InterfaceCompiler.analyze4(InterfaceCompiler.java:395)
at flex2.compiler.mxml.Compiler.analyze4(Compiler.java:153)
at flex2.compiler.API.analyze(API.java:2533)
at flex2.compiler.API.analyze(API.java:2423)
at flex2.compiler.API.batch2(API.java:409)
at flex2.compiler.API.batch(API.java:1108)
at flex2.compiler.API.compile(API.java:1281)
at flex2.tools.oem.Application.compile(Application.java:1028)
at flex2.tools.oem.Application.recompile(Application.java:980)
at flex2.tools.oem.Application.compile(Application.java:736)
at flex2.tools.flexbuilder.BuilderApplication.compile(BuilderApplication.java:354)
at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder$MyBuilder.mybuild(ASApplicationBuilder.java:271)
at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder.build(ASApplicationBuilder.java:122)
at com.adobe.flexbuilder.multisdk.compiler.internal.ASBuilder.build(ASBuilder.java:139)
at com.adobe.flexbuilder.multisdk.compiler.internal.ASItemBuilder.build(ASItemBuilder.java:73)
at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.buildItem(Unknown Source)
at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.build(Unknown Source)
at com.adobe.flexbuilder.project.compiler.internal.FlexIncrementalBuilder.build(Unknown Source)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:624)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:166)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:246)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:249)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:302)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:334)
at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:328)
at org.eclipse.ui.actions.GlobalBuildAction$1.run(GlobalBuildAction.java:183)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

Boy Carper - [05/05/08 11:27 AM ]
I had the same errors this week. After some reseach I found an empty case switch that was causing this error. It did not occur on FB 2.

Erik Tierney - [06/27/08 09:19 AM ]
Standalone asc and the mxml test case both compile without error now.