Various E4X "bypass" measures ...

Signed-off-by: Erik de Bruin <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7822c332
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7822c332
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7822c332

Branch: refs/heads/feature/flexmojos-tests
Commit: 7822c332c3d91a227b6120ffab226a048da073b5
Parents: 68a7c9e
Author: Erik de Bruin <[email protected]>
Authored: Tue Oct 21 13:20:30 2014 +0200
Committer: Erik de Bruin <[email protected]>
Committed: Thu Oct 23 19:42:52 2014 +0200

----------------------------------------------------------------------
 .../flex/compiler/codegen/as/IASEmitter.java    |  2 +
 .../internal/codegen/as/ASBlockWalker.java      |  7 +++
 .../compiler/internal/codegen/as/ASEmitter.java |  4 ++
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 45 +++++++++++++++++++-
 .../internal/visitor/as/ASNodeSwitch.java       |  4 ++
 .../compiler/visitor/as/IASBlockVisitor.java    |  2 +
 6 files changed, 62 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/codegen/as/IASEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/codegen/as/IASEmitter.java 
b/compiler.jx/src/org/apache/flex/compiler/codegen/as/IASEmitter.java
index 9bf4aa5..e1c0e01 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/as/IASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/as/IASEmitter.java
@@ -354,4 +354,6 @@ public interface IASEmitter extends IEmitter
 
     void emitMetaTag(IMetaTagNode node);
 
+    void emitE4XFilter(IMemberAccessExpressionNode node);
+
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
index d8b68f6..069e934 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
@@ -556,6 +556,13 @@ public class ASBlockWalker implements IASBlockVisitor, 
IASBlockWalker
     }
 
     @Override
+    public void visitE4XFilter(IMemberAccessExpressionNode node)
+    {
+        debug("visitE4XFilter()");
+        emitter.emitE4XFilter(node);
+    }
+    
+    @Override
     public void visitReturn(IReturnNode node)
     {
         debug("visitReturn()");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 379e86e..cd08e22 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -1448,6 +1448,10 @@ public class ASEmitter implements IASEmitter, IEmitter
     {
     }
 
+    public void emitE4XFilter(IMemberAccessExpressionNode node)
+    {
+    }
+
     public String stringifyNode(IASNode node)
     {
         setBufferWrite(true);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 454bae6..49e8192 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -1100,6 +1100,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
         IASNode leftNode = node.getLeftOperandNode();
+        IASNode rightNode = node.getRightOperandNode();
 
         if (project == null)
             project = getWalker().getProject();
@@ -1109,12 +1110,41 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
         if (def != null && def.isStatic())
             isStatic = true;
 
+        boolean continueWalk = true;
         if (!isStatic)
         {
             if (!(leftNode instanceof ILanguageIdentifierNode && 
((ILanguageIdentifierNode) leftNode)
                         .getKind() == 
ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
             {
-                if (leftNode.getNodeID() != ASTNodeID.SuperID)
+               if (rightNode instanceof UnaryOperatorAtNode)
+                {
+                       // ToDo (erikdebruin): properly handle E4X
+                       
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    getWalker().walk(node.getLeftOperandNode());
+                    write(ASEmitterTokens.SQUARE_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write("E4XOperator");
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.SQUARE_CLOSE);
+                    continueWalk = false;
+                }
+               else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+               {
+                       // ToDo (erikdebruin): properly handle E4X
+                       
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    getWalker().walk(node.getLeftOperandNode());
+                    write(ASEmitterTokens.SQUARE_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write("E4XSelector");
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.SQUARE_CLOSE);
+                    continueWalk = false;
+               }
+               else if (leftNode.getNodeID() != ASTNodeID.SuperID)
                 {
                     getWalker().walk(node.getLeftOperandNode());
                     write(node.getOperator().getOperatorText());
@@ -1128,7 +1158,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
         
         }
         
-        getWalker().walk(node.getRightOperandNode());
+        if (continueWalk)
+               getWalker().walk(node.getRightOperandNode());
     }
 
     private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
@@ -1587,4 +1618,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
             write(s);
         }
     }
+    
+    @Override
+    public void emitE4XFilter(IMemberAccessExpressionNode node)
+    {
+       // ToDo (erikdebruin): implement E4X replacement !?!
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        write("E4XFilter");
+        write(ASEmitterTokens.SINGLE_QUOTE);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/internal/visitor/as/ASNodeSwitch.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/visitor/as/ASNodeSwitch.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/visitor/as/ASNodeSwitch.java
index 04b98ef..a64b599 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/visitor/as/ASNodeSwitch.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/visitor/as/ASNodeSwitch.java
@@ -116,6 +116,10 @@ public class ASNodeSwitch implements IASNodeStrategy
             // ToDo (erikdebruin): implement handler
             return;
 
+        case E4XFilterID:
+            visitor.visitE4XFilter((IMemberAccessExpressionNode) node);
+            return;
+
         case FileID:
             visitor.visitFile((IFileNode) node);
             return;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7822c332/compiler.jx/src/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java 
b/compiler.jx/src/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
index 9510ef8..0376dba 100644
--- a/compiler.jx/src/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
+++ b/compiler.jx/src/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
@@ -218,4 +218,6 @@ public interface IASBlockVisitor extends IBlockVisitor
 
     void visitEmbed(IEmbedNode node);
 
+    void visitE4XFilter(IMemberAccessExpressionNode node);
+
 }

Reply via email to