You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@royale.apache.org by GitBox <gi...@apache.org> on 2018/12/24 18:40:54 UTC

[GitHub] Harbs commented on issue #69: compiler omits expressions with dynamic object access

Harbs commented on issue #69: compiler omits expressions with dynamic object access
URL: https://github.com/apache/royale-compiler/issues/69#issuecomment-449762572
 
 
   Interesting.
   
   I tried adding the code to an MXML file and I get a NullPointerException.
   
   ````
   <?xml version="1.0" encoding="utf-8"?>
   
   <js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                   xmlns:js="library://ns.apache.org/royale/basic" xmlns:ns1="*" applicationComplete="onComplete()">
       <fx:Script>
           <![CDATA[
               import org.apache.royale.test.Assert;
   
               private function onComplete():void{
                   var object: Object = { coordinate : [ 10, 20 ] };
                   var x: Number = object.coordinate[0];
                   Assert.strictEqual(x, 10);
                   trace("OK");                
               }
           ]]>
       </fx:Script>
       <js:valuesImpl>
           <js:SimpleCSSValuesImpl />
       </js:valuesImpl>
       <js:initialView>
       <js:View>
           <js:TextButton text="Click Me"/>
       </js:View>
       </js:initialView>
   </js:Application>
   ````
   Outputs:
   ````
   test_project as: [test_project, org.apache.royale.test.Assert]
   test_project mxml: [org.apache.royale.core.SimpleCSSValuesImpl, org.apache.royale.core.View, org.apache.royale.html.TextButton, test_project, org.apache.royale.core.Application, org.apache.royale.events.Event]
   /test_project/src/test_project.mxml line 11 column 16 Error: Internal error in ASBlockWalker subsystem, when generating code for: /test_project/src/test_project.mxml line 11 column 16: java.lang.NullPointerException
   	at org.apache.royale.compiler.internal.codegen.js.jx.VarDeclarationEmitter.emit(VarDeclarationEmitter.java:159)
   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitVarDeclaration(JSRoyaleEmitter.java:716)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitVariable(ASBlockWalker.java:278)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:162)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
   	at org.apache.royale.compiler.internal.codegen.js.jx.StatementEmitter.emit(StatementEmitter.java:40)
   	at org.apache.royale.compiler.internal.codegen.js.jx.StatementEmitter.emit(StatementEmitter.java:29)
   	at org.apache.royale.compiler.internal.codegen.js.JSEmitter.emitStatement(JSEmitter.java:323)
   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitStatement(JSRoyaleEmitter.java:1004)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitBlock(ASBlockWalker.java:349)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:278)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
   	at org.apache.royale.compiler.internal.codegen.as.ASEmitter.emitMethodScope(ASEmitter.java:867)
   	at org.apache.royale.compiler.internal.codegen.js.jx.MethodEmitter.emit(MethodEmitter.java:145)
   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitMethod(JSRoyaleEmitter.java:740)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitFunction(ASBlockWalker.java:290)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:152)
   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleEmitter.emitScripts(MXMLRoyaleEmitter.java:1750)
   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleEmitter.emitDocument(MXMLRoyaleEmitter.java:709)
   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWalker.visitDocument(MXMLRoyaleBlockWalker.java:69)
   	at org.apache.royale.compiler.internal.visitor.mxml.MXMLNodeSwitch.handle(MXMLNodeSwitch.java:86)
   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.walk(MXMLBlockWalker.java:153)
   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWalker.visitFile(MXMLRoyaleBlockWalker.java:61)
   	at org.apache.royale.compiler.internal.visitor.mxml.MXMLNodeSwitch.handle(MXMLNodeSwitch.java:92)
   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.walk(MXMLBlockWalker.java:153)
   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.visitCompilationUnit(MXMLBlockWalker.java:184)
   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLWriter.writeTo(MXMLWriter.java:71)
   	at org.apache.royale.compiler.clients.MXMLJSCRoyale.compile(MXMLJSCRoyale.java:411)
   	at org.apache.royale.compiler.clients.MXMLJSCRoyale._mainNoExit(MXMLJSCRoyale.java:265)
   	at org.apache.royale.compiler.clients.MXMLJSCRoyale.mainNoExit(MXMLJSCRoyale.java:222)
   	at org.apache.royale.compiler.clients.MXMLJSC._mainNoExit(MXMLJSC.java:365)
   	at org.apache.royale.compiler.clients.MXMLJSC.mainNoExit(MXMLJSC.java:300)
   	at org.apache.royale.compiler.clients.MXMLJSC.staticMainNoExit(MXMLJSC.java:259)
   	at org.apache.royale.compiler.clients.MXMLJSC.main(MXMLJSC.java:241)
   ````

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

Re: [GitHub] Harbs commented on issue #69: compiler omits expressions with dynamic object access

Posted by Harbs <ha...@gmail.com>.
I tried stepping through the code to see what’s going on.

In VarDeclarationEmitter.emit():

IDefinition leftDef = dyn.getLeftOperandNode().resolveType(getProject());

dyn.getLeftOperandNode() is a MemberAccessExpressionNode of “.” With two sub-nodes of type IdentifierNode. The first is “object” and the second is “coordinate”.

resolveType() on that returns null. It seems to go up the scope and as best as I could understand it seems to be trying to resolve it to a member of a class rather than a member of an object literal. But I’m not sure I was understanding what’s going on…

I don’t know if this is helpful, but I know that I’m confused… ;-)

Harbs

> On Dec 24, 2018, at 8:40 PM, GitBox <gi...@apache.org> wrote:
> 
> Harbs commented on issue #69: compiler omits expressions with dynamic object access
> URL: https://github.com/apache/royale-compiler/issues/69#issuecomment-449762572
> 
> 
>   Interesting.
> 
>   I tried adding the code to an MXML file and I get a NullPointerException.
> 
>   ````
>   <?xml version="1.0" encoding="utf-8"?>
> 
>   <js:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
>                   xmlns:js="library://ns.apache.org/royale/basic" xmlns:ns1="*" applicationComplete="onComplete()">
>       <fx:Script>
>           <![CDATA[
>               import org.apache.royale.test.Assert;
> 
>               private function onComplete():void{
>                   var object: Object = { coordinate : [ 10, 20 ] };
>                   var x: Number = object.coordinate[0];
>                   Assert.strictEqual(x, 10);
>                   trace("OK");                
>               }
>           ]]>
>       </fx:Script>
>       <js:valuesImpl>
>           <js:SimpleCSSValuesImpl />
>       </js:valuesImpl>
>       <js:initialView>
>       <js:View>
>           <js:TextButton text="Click Me"/>
>       </js:View>
>       </js:initialView>
>   </js:Application>
>   ````
>   Outputs:
>   ````
>   test_project as: [test_project, org.apache.royale.test.Assert]
>   test_project mxml: [org.apache.royale.core.SimpleCSSValuesImpl, org.apache.royale.core.View, org.apache.royale.html.TextButton, test_project, org.apache.royale.core.Application, org.apache.royale.events.Event]
>   /test_project/src/test_project.mxml line 11 column 16 Error: Internal error in ASBlockWalker subsystem, when generating code for: /test_project/src/test_project.mxml line 11 column 16: java.lang.NullPointerException
>   	at org.apache.royale.compiler.internal.codegen.js.jx.VarDeclarationEmitter.emit(VarDeclarationEmitter.java:159)
>   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitVarDeclaration(JSRoyaleEmitter.java:716)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitVariable(ASBlockWalker.java:278)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:162)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
>   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
>   	at org.apache.royale.compiler.internal.codegen.js.jx.StatementEmitter.emit(StatementEmitter.java:40)
>   	at org.apache.royale.compiler.internal.codegen.js.jx.StatementEmitter.emit(StatementEmitter.java:29)
>   	at org.apache.royale.compiler.internal.codegen.js.JSEmitter.emitStatement(JSEmitter.java:323)
>   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitStatement(JSRoyaleEmitter.java:1004)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitBlock(ASBlockWalker.java:349)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:278)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
>   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
>   	at org.apache.royale.compiler.internal.codegen.as.ASEmitter.emitMethodScope(ASEmitter.java:867)
>   	at org.apache.royale.compiler.internal.codegen.js.jx.MethodEmitter.emit(MethodEmitter.java:145)
>   	at org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter.emitMethod(JSRoyaleEmitter.java:740)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.visitFunction(ASBlockWalker.java:290)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeSwitch.handle(ASNodeSwitch.java:152)
>   	at org.apache.royale.compiler.internal.visitor.as.ASNodeHandler.handle(ASNodeHandler.java:85)
>   	at org.apache.royale.compiler.internal.visitor.as.BeforeAfterStrategy.handle(BeforeAfterStrategy.java:110)
>   	at org.apache.royale.compiler.internal.codegen.as.ASBlockWalker.walk(ASBlockWalker.java:159)
>   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleEmitter.emitScripts(MXMLRoyaleEmitter.java:1750)
>   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleEmitter.emitDocument(MXMLRoyaleEmitter.java:709)
>   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWalker.visitDocument(MXMLRoyaleBlockWalker.java:69)
>   	at org.apache.royale.compiler.internal.visitor.mxml.MXMLNodeSwitch.handle(MXMLNodeSwitch.java:86)
>   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.walk(MXMLBlockWalker.java:153)
>   	at org.apache.royale.compiler.internal.codegen.mxml.royale.MXMLRoyaleBlockWalker.visitFile(MXMLRoyaleBlockWalker.java:61)
>   	at org.apache.royale.compiler.internal.visitor.mxml.MXMLNodeSwitch.handle(MXMLNodeSwitch.java:92)
>   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.walk(MXMLBlockWalker.java:153)
>   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLBlockWalker.visitCompilationUnit(MXMLBlockWalker.java:184)
>   	at org.apache.royale.compiler.internal.codegen.mxml.MXMLWriter.writeTo(MXMLWriter.java:71)
>   	at org.apache.royale.compiler.clients.MXMLJSCRoyale.compile(MXMLJSCRoyale.java:411)
>   	at org.apache.royale.compiler.clients.MXMLJSCRoyale._mainNoExit(MXMLJSCRoyale.java:265)
>   	at org.apache.royale.compiler.clients.MXMLJSCRoyale.mainNoExit(MXMLJSCRoyale.java:222)
>   	at org.apache.royale.compiler.clients.MXMLJSC._mainNoExit(MXMLJSC.java:365)
>   	at org.apache.royale.compiler.clients.MXMLJSC.mainNoExit(MXMLJSC.java:300)
>   	at org.apache.royale.compiler.clients.MXMLJSC.staticMainNoExit(MXMLJSC.java:259)
>   	at org.apache.royale.compiler.clients.MXMLJSC.main(MXMLJSC.java:241)
>   ````
> 
> ----------------------------------------------------------------
> This is an automated message from the Apache Git Service.
> To respond to the message, please log on GitHub and use the
> URL above to go to the specific comment.
> 
> For queries about this service, please contact Infrastructure at:
> users@infra.apache.org
> 
> 
> With regards,
> Apache Git Services