You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/11/05 13:45:37 UTC

[11/11] git commit: [flex-falcon] [refs/heads/develop] - This is where all the magic happens ; -)

This is where all the magic happens ;-)

- updated emission of 'as', 'instanceof' and 'is' operators
- added emission of 'interfaces classes' with 'goog.require'
- added 'storage' for implemented/extended interfaces as a property of the class

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/develop
Commit: 7020dcfaccf04007aa29a9e60dbf92fe0294f21b
Parents: 3905b3e
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Tue Nov 5 13:44:15 2013 +0100
Committer: Erik de Bruin <er...@ixsoftware.nl>
Committed: Tue Nov 5 13:44:15 2013 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 65 +++++++++++++++-----
 1 file changed, 49 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7020dcfa/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 944185e..932c3c3 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
@@ -684,9 +684,28 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             write(ASEmitterTokens.PAREN_OPEN);
             getWalker().walk(node.getLeftOperandNode());
             writeToken(ASEmitterTokens.COMMA);
-            getWalker().walk(node.getRightOperandNode());
+
+            IDefinition dnode = (node.getRightOperandNode()).resolve(project);
+            if (dnode != null)
+                write(dnode.getQualifiedName());
+            else
+                getWalker().walk(node.getRightOperandNode());
+            
             write(ASEmitterTokens.PAREN_CLOSE);
         }
+        else if (id == ASTNodeID.Op_InstanceOfID)
+        {
+            getWalker().walk(node.getLeftOperandNode());
+
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.INSTANCEOF);
+            
+            IDefinition dnode = (node.getRightOperandNode()).resolve(project);
+            if (dnode != null)
+                write(dnode.getQualifiedName());
+            else
+                getWalker().walk(node.getRightOperandNode());
+        }
         else
         {
             IExpressionNode leftSide = node.getLeftOperandNode();
@@ -829,15 +848,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
         ICompilationUnit cu = projectScope
                 .getCompilationUnitForDefinition(type);
-        ArrayList<String> list = flexProject.getRequires(cu);
+        ArrayList<String> requiresList = flexProject.getRequires(cu);
+        ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
 
         String cname = type.getQualifiedName();
         ArrayList<String> writtenInstances = new ArrayList<String>();
         writtenInstances.add(cname); // make sure we don't add ourselves
 
-        if (list != null)
+        if (requiresList != null)
         {
-            for (String imp : list)
+            for (String imp : requiresList)
             {
                 if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
                     continue;
@@ -863,17 +883,34 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                 }
             }
 
-            // (erikdebruin) only write 'closing' line break when there are 
-            //               actually imports...
-            if (list.size() > 1
-                    || (list.size() == 1 && list.get(0).indexOf(
+            if (requiresList.size() > 1
+                    || (requiresList.size() == 1 && requiresList.get(0).indexOf(
                             JSGoogEmitterTokens.AS3.getToken()) == -1))
             {
                 writeNewline();
             }
         }
         
-        // erikdebruin: Add missing language feature support, like the 'is' and 
+        if (interfacesList != null)
+        {
+            for (String imp : interfacesList)
+            {
+                write(JSGoogEmitterTokens.GOOG_REQUIRE);
+                write(ASEmitterTokens.PAREN_OPEN);
+                write(ASEmitterTokens.SINGLE_QUOTE);
+                write(imp);
+                write(ASEmitterTokens.SINGLE_QUOTE);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                writeNewline(ASEmitterTokens.SEMICOLON);
+            }
+            
+            if (interfacesList.size() > 0)
+            {
+                writeNewline();
+            }
+        }
+        
+        // erikdebruin: Add missing language feature support, with e.g. 'is' and 
         //              'as' operators. We don't need to worry about requiring
         //              this in every project: ADVANCED_OPTIMISATIONS will NOT
         //              include any of the code if it is not used in the project.
@@ -918,13 +955,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     
                 write(type.getQualifiedName());
                 write(ASEmitterTokens.MEMBER_ACCESS);
-                if (tnode instanceof IClassNode)
-                {
-                    write(JSEmitterTokens.PROTOTYPE);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                }
-                write("AFJS_INTERFACES");
-                write(ASEmitterTokens.SPACE);
+                write(JSEmitterTokens.PROTOTYPE);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                writeToken(JSFlexJSEmitterTokens.AFJS_INTERFACES);
                 writeToken(ASEmitterTokens.EQUAL);
                 write(ASEmitterTokens.SQUARE_OPEN);
                 int i = 0;