2009年8月30日日曜日

名前付きのfunctionをネストするとコンパイラがクラッシュ!

AdobeAIRで以下のようなコードを書いた時、良くわからんコンパイルエラーがでます。


原因としては、名前付きのfunctionをネストしたのがダメっぽいです。
ActionScript Compiler (ASC)のバグシステムにも上がってました。→Compiler crash with nested named functions

どんな現象がでるのか...ですが、
エラーは、以下2つのものがコンパイルの度に交互にでたりして、これまた混乱させます。

/Users/ogawahideko/workspace/ws_aslimtimer/test/Test.mxml(2): エラー: クラスをネストすることはできません。

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" title="Test" layout="absolute">


エラー: Index: 18, Size: 18

java.lang.IndexOutOfBoundsException: Index: 18, Size: 18
at java.util.ArrayList.RangeCheck(ArrayList.java:546)
at java.util.ArrayList.get(ArrayList.java:321)
at macromedia.asc.semantics.ReferenceValue.getSlot(ReferenceValue.java:253)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:659)
at macromedia.asc.parser.GetExpressionNode.evaluate(GetExpressionNode.java:55)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1025)
at macromedia.asc.parser.MemberExpressionNode.evaluate(MemberExpressionNode.java:57)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1268)
at macromedia.asc.parser.ArgumentListNode.evaluate(ArgumentListNode.java:45)
at macromedia.asc.embedding.LintEvaluator.evaluateGenericCallExpression(LintEvaluator.java:269)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:454)
at macromedia.asc.parser.CallExpressionNode.evaluate(CallExpressionNode.java:46)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1025)
at macromedia.asc.parser.MemberExpressionNode.evaluate(MemberExpressionNode.java:57)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1324)
at macromedia.asc.parser.ListNode.evaluate(ListNode.java:44)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1398)
at macromedia.asc.parser.ExpressionStatementNode.evaluate(ExpressionStatementNode.java:50)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1346)
at macromedia.asc.parser.StatementListNode.evaluate(StatementListNode.java:60)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1867)
at macromedia.asc.parser.FunctionCommonNode.evaluate(FunctionCommonNode.java:104)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1848)
at macromedia.asc.parser.FunctionCommonNode.evaluate(FunctionCommonNode.java:104)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:1848)
at macromedia.asc.parser.FunctionCommonNode.evaluate(FunctionCommonNode.java:104)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:2321)
at macromedia.asc.parser.ClassDefinitionNode.evaluate(ClassDefinitionNode.java:106)
at macromedia.asc.embedding.LintEvaluator.evaluate(LintEvaluator.java:2042)
at macromedia.asc.parser.ProgramNode.evaluate(ProgramNode.java:80)
at flex2.compiler.as3.Compiler.analyze4(Compiler.java:611)
at flex2.compiler.mxml.ImplementationCompiler.analyze4(ImplementationCompiler.java:279)
at flex2.compiler.mxml.Compiler.analyze4(Compiler.java:153)
at flex2.compiler.API.analyze(API.java:2542)
at flex2.compiler.API.analyze(API.java:2432)
at flex2.compiler.API.batch2(API.java:411)
at flex2.compiler.API.batch(API.java:1117)
at flex2.compiler.API.compile(API.java:1290)
at flex2.tools.SimpleShell.compile_mxmlc(SimpleShell.java:600)
at flex2.tools.SimpleShell.compile(SimpleShell.java:349)
at flex2.tools.SimpleShell.process(SimpleShell.java:179)
at flex2.tools.SimpleShell.main(SimpleShell.java:75)

マイルストーンはFlex 4になっているので、なおるんだとは思いますが...
• • •