You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2016/04/30 01:18:51 UTC

[4/8] git commit: [flex-falcon] [refs/heads/develop] - source maps for with

source maps for with


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

Branch: refs/heads/develop
Commit: b20a5d5d189e931ff5e63ede5e856e93a250c500
Parents: b0ccb16
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 14:43:47 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 14:43:47 2016 -0700

----------------------------------------------------------------------
 .../compiler/internal/codegen/js/JSEmitter.java | 10 ++++
 .../internal/codegen/js/jx/WithEmitter.java     | 56 ++++++++++++++++++++
 .../js/sourcemaps/TestSourceMapStatements.java  | 34 ++++++++++++
 3 files changed, 100 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b20a5d5d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index ece92d7..41ea685 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -56,6 +56,7 @@ import org.apache.flex.compiler.internal.codegen.js.jx.ThrowEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.TryEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.UnaryOperatorEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.WhileLoopEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.WithEmitter;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.tree.as.IASNode;
@@ -84,6 +85,7 @@ import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IUnaryOperatorNode;
 import org.apache.flex.compiler.tree.as.IWhileLoopNode;
+import org.apache.flex.compiler.tree.as.IWithNode;
 
 import com.google.debugging.sourcemap.FilePosition;
 
@@ -116,6 +118,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     public ISubEmitter<ITryNode> tryEmitter;
     public ISubEmitter<ICatchNode> catchEmitter;
     public ISubEmitter<IThrowNode> throwEmitter;
+    public ISubEmitter<IWithNode> withEmitter;
     public ISubEmitter<IASNode> statementEmitter;
     public ISubEmitter<ILanguageIdentifierNode> languageIdentifierEmitter;
     public SourceMapDirectiveEmitter sourceMapDirectiveEmitter;
@@ -166,6 +169,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
         tryEmitter = new TryEmitter(this);
         catchEmitter = new CatchEmitter(this);
         throwEmitter = new ThrowEmitter(this);
+        withEmitter = new WithEmitter(this);
         statementEmitter = new StatementEmitter(this);
         languageIdentifierEmitter = new LanguageIdentifierEmitter(this);
         sourceMapDirectiveEmitter = new SourceMapDirectiveEmitter(this);
@@ -264,6 +268,12 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     }
 
     @Override
+    public void emitWith(IWithNode node)
+    {
+        withEmitter.emit(node);
+    }
+
+    @Override
     public void emitThrow(IThrowNode node)
     {
         throwEmitter.emit(node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b20a5d5d/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/WithEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/WithEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/WithEmitter.java
new file mode 100644
index 0000000..934bfab
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/WithEmitter.java
@@ -0,0 +1,56 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.tree.as.IContainerNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IWithNode;
+
+public class WithEmitter extends JSSubEmitter implements
+        ISubEmitter<IWithNode>
+{
+    public WithEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IWithNode node)
+    {
+        IContainerNode cnode = (IContainerNode) node.getChild(1);
+        startMapping(node);
+        writeToken(ASEmitterTokens.WITH);
+        write(ASEmitterTokens.PAREN_OPEN);
+        endMapping(node);
+        IExpressionNode targetNode = node.getTargetNode();
+        getWalker().walk(targetNode);
+        startMapping(node, targetNode);
+        write(ASEmitterTokens.PAREN_CLOSE);
+        if (!EmitterUtils.isImplicit(cnode))
+            write(ASEmitterTokens.SPACE);
+        endMapping(node);
+        getWalker().walk(node.getStatementContentsNode());
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b20a5d5d/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
index 629f06a..11d8b4b 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java
@@ -26,6 +26,7 @@ import org.apache.flex.compiler.tree.as.IIfNode;
 import org.apache.flex.compiler.tree.as.ISwitchNode;
 import org.apache.flex.compiler.tree.as.ITryNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
+import org.apache.flex.compiler.tree.as.IWithNode;
 
 import org.junit.Test;
 
@@ -572,6 +573,39 @@ public class TestSourceMapStatements extends SourceMapTestBase
         assertMapping(node, 0, 29, 4, 0, 4, 4);    // else
     }
 
+    //----------------------------------
+    // with () {}
+    //----------------------------------
+
+    @Test
+    public void testVisitWith()
+    {
+        IWithNode node = (IWithNode) getNode("with (a) { b; }", IWithNode.class);
+        asBlockWalker.visitWith(node);
+        //with (a) {\n  b;\n}
+        assertMapping(node, 0, 0, 0, 0, 0, 6);     // with (
+        assertMapping(node, 0, 6, 0, 6, 0, 7);     // a
+        assertMapping(node, 0, 7, 0, 7, 0, 9);     // )
+        assertMapping(node, 0, 9, 0, 9, 0, 10);    // {
+        assertMapping(node, 0, 11, 1, 2, 1, 3);     // b
+        assertMapping(node, 0, 12, 1, 3, 1, 4);    // ;
+        assertMapping(node, 0, 14, 2, 0, 2, 1);    // }
+    }
+
+    @Test
+    public void testVisitWith_1a()
+    {
+        IWithNode node = (IWithNode) getNode("with (a) b;", IWithNode.class);
+        asBlockWalker.visitWith(node);
+        //with (a)\n  b;
+        assertMapping(node, 0, 0, 0, 0, 0, 6);     // with (
+        assertMapping(node, 0, 6, 0, 6, 0, 7);     // a
+        assertMapping(node, 0, 7, 0, 7, 0, 8);     // )
+        assertMapping(node, 0, 9, 1, 2, 1, 3);     // b
+        assertMapping(node, 0, 10, 1, 3, 1, 4);    // ;
+    }
+
+
     protected IBackend createBackend()
     {
         return new FlexJSBackend();