Added 'const' emission (ECMA 6) + tests

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/6961f0f5
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6961f0f5
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6961f0f5

Branch: refs/heads/feature/flexmojos-tests
Commit: 6961f0f59e3d8ca7994d4796b1f0db380c6e1a3c
Parents: 9cab2bf
Author: Erik de Bruin <[email protected]>
Authored: Fri Oct 24 11:49:10 2014 +0200
Committer: Erik de Bruin <[email protected]>
Committed: Fri Oct 24 11:49:10 2014 +0200

----------------------------------------------------------------------
 .../codegen/js/vf2js/TestVF2JSStatements.java   | 34 ++++++++++++++++
 .../codegen/js/vf2js/JSVF2JSEmitter.java        | 42 ++++++++++++++++++++
 2 files changed, 76 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6961f0f5/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
index e32a5d2..648666f 100644
--- 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
+++ 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
@@ -76,6 +76,40 @@ public class TestVF2JSStatements extends TestGoogStatements
        asBlockWalker.visitVariable(node);
        assertOut("var /** @type {Object} */ falconTest_a.ShaderClass");
     }
+
+    //----------------------------------
+    // const declaration
+    //----------------------------------
+
+    @Override
+    @Test
+    public void testConstDeclaration()
+    {
+        IVariableNode node = (IVariableNode) getNode("const a = 42;",
+                IVariableNode.class);
+        asBlockWalker.visitVariable(node);
+        assertOut("const /** @type {*} */ a = 42");
+    }
+
+    @Override
+    @Test
+    public void testConstDeclaration_withType()
+    {
+        IVariableNode node = (IVariableNode) getNode("const a:int = 42;",
+                IVariableNode.class);
+        asBlockWalker.visitVariable(node);
+        assertOut("const /** @type {number} */ a = 42");
+    }
+
+    @Override
+    @Test
+    public void testConstDeclaration_withList()
+    {
+        IVariableNode node = (IVariableNode) getNode(
+                "const a:int = 4, b:int = 11, c:int = 42;", 
IVariableNode.class);
+        asBlockWalker.visitVariable(node);
+        assertOut("const /** @type {number} */ a = 4, /** @type {number} */ b 
= 11, /** @type {number} */ c = 42");
+    }
     
     //----------------------------------
     // for () { }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6961f0f5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 9b91eb2..0ca8e4b 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -256,6 +256,48 @@ public class JSVF2JSEmitter extends JSGoogEmitter 
implements IJSVF2JSEmitter
     }
 
     @Override
+    public void emitVarDeclaration(IVariableNode node)
+    {
+        if (!(node instanceof ChainedVariableNode))
+        {
+            emitMemberKeyword(node);
+        }
+
+        IExpressionNode avnode = node.getAssignedValueNode();
+        if (avnode != null)
+        {
+            IDefinition def = avnode.resolveType(getWalker().getProject());
+
+            String opcode = avnode.getNodeID().getParaphrase();
+            if (opcode != "AnonymousFunction")
+                getDoc().emitVarDoc(node, def);
+        }
+        else
+        {
+            getDoc().emitVarDoc(node, null);
+        }
+
+        emitDeclarationName(node);
+        if (!(avnode instanceof IEmbedNode))
+               emitAssignedValue(avnode);
+
+        if (!(node instanceof ChainedVariableNode))
+        {
+            // check for chained variables
+            int len = node.getChildCount();
+            for (int i = 0; i < len; i++)
+            {
+                IASNode child = node.getChild(i);
+                if (child instanceof ChainedVariableNode)
+                {
+                    writeToken(ASEmitterTokens.COMMA);
+                    emitVarDeclaration((IVariableNode) child);
+                }
+            }
+        }
+    }
+
+    @Override
     public void emitField(IVariableNode node)
     {
         IDefinition definition = getClassDefinition(node);

Reply via email to