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/29 20:13:44 UTC

[1/6] git commit: [flex-falcon] [refs/heads/develop] - BinaryOperatorEmitter: fixed source map for &&= and ||=

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 2552ded77 -> f4f1179aa


BinaryOperatorEmitter: fixed source map for &&= and ||=


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

Branch: refs/heads/develop
Commit: 4f0930b9a893cdbc2f41eef7713fcd614832d2ce
Parents: dcbf18a
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 09:11:46 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 09:11:46 2016 -0700

----------------------------------------------------------------------
 .../compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java    | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4f0930b9/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 4beaf2f..0dc74ff 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -366,7 +366,10 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
 
                 writeToken(ASEmitterTokens.EQUAL);
                 endMapping(node);
+
+                startMapping(node);
                 write(lnode.getName());
+                endMapping(node);
 
                 startMapping(node, node.getLeftOperandNode());
                 write(ASEmitterTokens.SPACE);


[2/6] git commit: [flex-falcon] [refs/heads/develop] - compiler: some cleanup of start and end positions on nodes

Posted by jo...@apache.org.
compiler: some cleanup of start and end positions on nodes


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

Branch: refs/heads/develop
Commit: 79f0304c5636b74b76726f2eb18ec6cd06749326
Parents: 4f0930b
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 09:44:37 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 09:44:37 2016 -0700

----------------------------------------------------------------------
 .../compiler/internal/tree/as/BaseStatementExpressionNode.java   | 4 +---
 .../flex/compiler/internal/tree/as/ExpressionNodeBase.java       | 2 ++
 .../apache/flex/compiler/internal/tree/as/IterationFlowNode.java | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/79f0304c/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/BaseStatementExpressionNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/BaseStatementExpressionNode.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/BaseStatementExpressionNode.java
index 268fe4f..49d1619 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/BaseStatementExpressionNode.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/BaseStatementExpressionNode.java
@@ -103,9 +103,7 @@ public abstract class BaseStatementExpressionNode extends ExpressionNodeBase
         if (expressionNode != null)
         {
             expressionNode.setParent(this);
-            setEnd(expressionNode.getAbsoluteEnd());
-            setEndLine(expressionNode.getEndLine());
-            setEndColumn(expressionNode.getEndColumn());
+            endAfter(expressionNode);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/79f0304c/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/ExpressionNodeBase.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/ExpressionNodeBase.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/ExpressionNodeBase.java
index 4e8d067..6c514b7 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/ExpressionNodeBase.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/ExpressionNodeBase.java
@@ -63,6 +63,8 @@ public abstract class ExpressionNodeBase extends FixedChildrenNode implements IE
         this.setColumn(other.getColumn());
         this.setStart(other.getAbsoluteStart());
         this.setEnd(other.getAbsoluteEnd());
+        this.setEndLine(other.getEndLine());
+        this.setEndColumn(other.getEndColumn());
     }
 
     protected int flags;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/79f0304c/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/IterationFlowNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/IterationFlowNode.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/IterationFlowNode.java
index b8dee74..e135c09 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/IterationFlowNode.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/IterationFlowNode.java
@@ -129,6 +129,6 @@ public class IterationFlowNode extends FixedChildrenNode implements IIterationFl
     {
         this.labelNode = labelNode;
         labelNode.setParent(this);
-        setEnd(labelNode.getAbsoluteEnd());
+        endAfter(labelNode);
     }
 }


[6/6] git commit: [flex-falcon] [refs/heads/develop] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-falcon into develop

Posted by jo...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-falcon into develop


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

Branch: refs/heads/develop
Commit: f4f1179aac6ce08110106282bc8efbdd82213dca
Parents: a6b4152 2552ded
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 11:06:03 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 11:06:03 2016 -0700

----------------------------------------------------------------------
 ApproveFalcon.xml                               |   8 +-
 README                                          |  35 +++---
 README_JX                                       |   6 +-
 RELEASE_NOTES                                   |  10 ++
 RELEASE_NOTES_JX                                |  14 +++
 build.xml                                       |  66 ++++++++++-
 .../externals/reference/ClassReference.java     |   5 +-
 .../src/main/resources/env-template.properties  | 111 +++++++++++++++++++
 .../main/resources/template-unittest.properties |  47 ++++++++
 externs/createjs/build.xml                      |  13 +--
 10 files changed, 282 insertions(+), 33 deletions(-)
----------------------------------------------------------------------



[3/6] git commit: [flex-falcon] [refs/heads/develop] - compiler: better start and end positions for unary operators (and operators in general)

Posted by jo...@apache.org.
compiler: better start and end positions for unary operators (and operators in general)


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

Branch: refs/heads/develop
Commit: 0639e14f863c77c13fc75866b330a146fee9f594
Parents: 79f0304
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 09:45:41 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 09:45:41 2016 -0700

----------------------------------------------------------------------
 .../internal/tree/as/OperatorNodeBase.java      |  6 +--
 .../internal/tree/as/UnaryOperatorNodeBase.java | 17 ---------
 .../tree/as/UnaryOperatorPostDecrementNode.java |  2 +-
 .../tree/as/UnaryOperatorPostIncrementNode.java |  2 +-
 .../tree/as/UnaryOperatorPostfixNodeBase.java   | 39 ++++++++++++++++++++
 5 files changed, 43 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0639e14f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/OperatorNodeBase.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/OperatorNodeBase.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/OperatorNodeBase.java
index 51eb0fc..3db3d9b 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/OperatorNodeBase.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/OperatorNodeBase.java
@@ -39,10 +39,8 @@ public abstract class OperatorNodeBase extends ExpressionNodeBase implements IOp
         if (operator != null)
         {
             operatorStart = operator.getStart();
-            setLine(operator.getLine());
-            setColumn(operator.getColumn());
-            setEndLine(operator.getEndLine());
-            setEndColumn(operator.getEndColumn());
+            startBefore(operator);
+            endAfter(operator);
             setSourcePath(operator.getSourcePath());
         }
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0639e14f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorNodeBase.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorNodeBase.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorNodeBase.java
index 88035bb..1a0469b 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorNodeBase.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorNodeBase.java
@@ -158,23 +158,6 @@ public abstract class UnaryOperatorNodeBase extends OperatorNodeBase implements
         else
         {
             super.fillInOffsets();
-            
-            // span node offset to cover operator token
-            if (operatorStart != UNKNOWN)
-            {
-                switch (getNodeID())
-                {
-                    case Op_PostDecrID:
-                    case Op_PostIncrID:
-                        // post-fix operator
-                        setEnd(operatorStart + POSTFIX_OPERATOR_LENGTH);
-                        break;
-                    default:
-                        // prefix operator
-                        setStart(operatorStart);
-                        break;
-                }
-            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0639e14f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostDecrementNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostDecrementNode.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostDecrementNode.java
index e356248..83f6fe7 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostDecrementNode.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostDecrementNode.java
@@ -27,7 +27,7 @@ import org.apache.flex.compiler.tree.ASTNodeID;
 /**
  * Final subclass of {@link UnaryOperatorNodeBase} for the postfix '<code>--</code>' operator.
  */
-public final class UnaryOperatorPostDecrementNode extends UnaryOperatorNodeBase
+public final class UnaryOperatorPostDecrementNode extends UnaryOperatorPostfixNodeBase
 {
     /**
      * Constructor.

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0639e14f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostIncrementNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostIncrementNode.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostIncrementNode.java
index b4e4a6a..ce649f0 100644
--- a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostIncrementNode.java
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostIncrementNode.java
@@ -27,7 +27,7 @@ import org.apache.flex.compiler.tree.ASTNodeID;
 /**
  * Final subclass of {@link UnaryOperatorNodeBase} for the postfix '<code>++</code>' operator.
  */
-public final class UnaryOperatorPostIncrementNode extends UnaryOperatorNodeBase
+public final class UnaryOperatorPostIncrementNode extends UnaryOperatorPostfixNodeBase
 {
     /**
      * Constructor.

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0639e14f/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostfixNodeBase.java
----------------------------------------------------------------------
diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostfixNodeBase.java b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostfixNodeBase.java
new file mode 100644
index 0000000..94f9c97
--- /dev/null
+++ b/compiler/src/main/java/org/apache/flex/compiler/internal/tree/as/UnaryOperatorPostfixNodeBase.java
@@ -0,0 +1,39 @@
+/*
+ *
+ *  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.tree.as;
+
+import org.apache.flex.compiler.parsing.IASToken;
+
+/**
+ * Abstract base class for all post-fix unary operator nodes.
+ */
+public abstract class UnaryOperatorPostfixNodeBase extends UnaryOperatorNodeBase
+{
+    public UnaryOperatorPostfixNodeBase(IASToken operatorToken, ExpressionNodeBase operandNode)
+    {
+        super(operatorToken, operandNode);
+        startBefore(operandNode);
+    }
+
+    protected UnaryOperatorPostfixNodeBase(UnaryOperatorNodeBase other)
+    {
+        super(other);
+    }
+}


[5/6] git commit: [flex-falcon] [refs/heads/develop] - source maps for for-each loops

Posted by jo...@apache.org.
source maps for for-each loops


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

Branch: refs/heads/develop
Commit: a6b4152e6e79bba2a08a7316c08ab5cd569fcf86
Parents: 031e70d
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 11:05:51 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 11:05:51 2016 -0700

----------------------------------------------------------------------
 .../internal/codegen/js/jx/ForEachEmitter.java  | 28 ++++++-
 .../js/sourcemaps/TestSourceMapStatements.java  | 83 ++++++++++++++++++++
 2 files changed, 108 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a6b4152e/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
index 501f5ae..78d0b40 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -30,6 +30,8 @@ import org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IContainerNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IForLoopNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
@@ -47,23 +49,28 @@ public class ForEachEmitter extends JSSubEmitter implements
     @Override
     public void emit(IForLoopNode node)
     {
-        IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
-                .getConditionalsContainerNode().getChild(0);
-        IASNode childNode = bnode.getChild(0);
+        IContainerNode cnode = node.getConditionalsContainerNode();
+        IBinaryOperatorNode bnode = (IBinaryOperatorNode) cnode.getChild(0);
+        IExpressionNode childNode = bnode.getLeftOperandNode();
+        IExpressionNode rnode = bnode.getRightOperandNode();
 
         final String iterName = getModel().getCurrentForeachName();
         getModel().incForeachLoopCount();
         final String targetName = iterName + "_target";
         
+        startMapping(rnode);
         write(ASEmitterTokens.VAR);
         write(ASEmitterTokens.SPACE);
         write(targetName);
         write(ASEmitterTokens.SPACE);
         write(ASEmitterTokens.EQUAL);
         write(ASEmitterTokens.SPACE);
+        endMapping(rnode);
         IASNode obj = bnode.getChild(1);
         getWalker().walk(obj);
+        startMapping(rnode);
         write(ASEmitterTokens.SEMICOLON);
+        endMapping(rnode);
         writeNewline();
 
         if (node.getParent().getNodeID() == ASTNodeID.BlockID &&
@@ -75,15 +82,23 @@ public class ForEachEmitter extends JSSubEmitter implements
             writeToken(ASEmitterTokens.COLON);
 
         }
+
+        startMapping(node);
         write(ASEmitterTokens.FOR);
         write(ASEmitterTokens.SPACE);
         write(ASEmitterTokens.PAREN_OPEN);
+        endMapping(node);
+        startMapping(rnode);
         write(ASEmitterTokens.VAR);
         write(ASEmitterTokens.SPACE);
         write(iterName);
+        endMapping(rnode);
+        startMapping(bnode, childNode);
         write(ASEmitterTokens.SPACE);
         write(ASEmitterTokens.IN);
         write(ASEmitterTokens.SPACE);
+        endMapping(bnode);
+        startMapping(rnode);
         write(targetName);
         boolean isXML = false;
         boolean isProxy = false;
@@ -113,10 +128,14 @@ public class ForEachEmitter extends JSSubEmitter implements
                 isXML = true;
             }
         }
+        endMapping(rnode);
+        startMapping(node, cnode);
         writeToken(ASEmitterTokens.PAREN_CLOSE);
+        endMapping(node);
         writeNewline();
         write(ASEmitterTokens.BLOCK_OPEN);
         writeNewline();
+        startMapping(childNode);
         if (childNode instanceof IVariableExpressionNode)
         {
             write(ASEmitterTokens.VAR);
@@ -128,6 +147,8 @@ public class ForEachEmitter extends JSSubEmitter implements
         write(ASEmitterTokens.SPACE);
         write(ASEmitterTokens.EQUAL);
         write(ASEmitterTokens.SPACE);
+        endMapping(childNode);
+        startMapping(rnode);
         write(targetName);
         if (isXML)
         {
@@ -148,6 +169,7 @@ public class ForEachEmitter extends JSSubEmitter implements
 	        write(ASEmitterTokens.SQUARE_CLOSE);
         }
         write(ASEmitterTokens.SEMICOLON);
+        endMapping(rnode);
         writeNewline();
         getWalker().walk(node.getStatementContentsNode());
         write(ASEmitterTokens.BLOCK_CLOSE);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a6b4152e/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 a462d03..45187b1 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
@@ -205,6 +205,89 @@ public class TestSourceMapStatements extends SourceMapTestBase
         assertMapping(node, 0, 21, 0, 39, 0, 40); // )
     }
 
+    @Test
+    public void testVisitForEach_1()
+    {
+        IForLoopNode node = (IForLoopNode) getNode(
+                "for each(var i:int in obj) { break; }", IForLoopNode.class);
+        asBlockWalker.visitForLoop(node);
+        //var foreachiter0_target = obj;\nfor (var foreachiter0 in foreachiter0_target) \n{\nvar i = foreachiter0_target[foreachiter0];\n{\n  break;\n}}\n
+        assertMapping(node, 0, 22, 0, 0, 0, 26);   // var foreachiter0_target = 
+        assertMapping(node, 0, 22, 0, 26, 0, 29);  // obj
+        assertMapping(node, 0, 22, 0, 29, 0, 30);  // ;
+        assertMapping(node, 0, 0, 1, 0, 1, 5);     // for (
+        assertMapping(node, 0, 22, 1, 5, 1, 21);   // var foreachiter0
+        assertMapping(node, 0, 22, 1, 25, 1, 44);  // foreachiter0_target
+        assertMapping(node, 0, 25, 1, 44, 1, 46);  // )
+        assertMapping(node, 0, 9, 3, 0, 3, 8);     // var i = 
+        assertMapping(node, 0, 22, 3, 8, 3, 42);   // foreachiter0_target[foreachiter0];
+        assertMapping(node, 0, 27, 4, 0, 4, 1);    // {
+        assertMapping(node, 0, 29, 5, 2, 5, 7);    // break
+        assertMapping(node, 0, 36, 6, 0, 6, 1);    // }
+    }
+
+    @Test
+    public void testVisitForEach_1a()
+    {
+        IForLoopNode node = (IForLoopNode) getNode(
+                "for each(var i:int in obj)  break; ", IForLoopNode.class);
+        asBlockWalker.visitForLoop(node);
+        //var foreachiter0_target = obj;\nfor (var foreachiter0 in foreachiter0_target) \n{\nvar i = foreachiter0_target[foreachiter0];\n\n  break;}\n
+        assertMapping(node, 0, 22, 0, 0, 0, 26);   // var foreachiter0_target = 
+        assertMapping(node, 0, 22, 0, 26, 0, 29);  // obj
+        assertMapping(node, 0, 22, 0, 29, 0, 30);  // ;
+        assertMapping(node, 0, 0, 1, 0, 1, 5);     // for (
+        assertMapping(node, 0, 22, 1, 5, 1, 21);   // var foreachiter0
+        assertMapping(node, 0, 22, 1, 25, 1, 44);  // foreachiter0_target
+        assertMapping(node, 0, 25, 1, 44, 1, 46);  // )
+        assertMapping(node, 0, 9, 3, 0, 3, 8);     // var i = 
+        assertMapping(node, 0, 22, 3, 8, 3, 42);   // foreachiter0_target[foreachiter0];
+        assertMapping(node, 0, 28, 5, 2, 5, 7);    // break
+    }
+
+    @Test
+    public void testVisitForEach_2()
+    {
+        IForLoopNode node = (IForLoopNode) getNode(
+                "for each(var i:int in obj.foo()) { break; }", IForLoopNode.class);
+        asBlockWalker.visitForLoop(node);
+        //var foreachiter0_target = obj.foo();\nfor (var foreachiter0 in foreachiter0_target) \n{\nvar i = foreachiter0_target[foreachiter0];\n{\n  break;\n}}\n
+        assertMapping(node, 0, 22, 0, 0, 0, 26);   // var foreachiter0_target = 
+        assertMapping(node, 0, 22, 0, 26, 0, 29);  // obj
+        assertMapping(node, 0, 25, 0, 29, 0, 30);  // .
+        assertMapping(node, 0, 26, 0, 30, 0, 33);  // foo
+        assertMapping(node, 0, 22, 0, 35, 0, 36);  // ;
+        assertMapping(node, 0, 0, 1, 0, 1, 5);     // for (
+        assertMapping(node, 0, 22, 1, 5, 1, 21);   // var foreachiter0
+        assertMapping(node, 0, 22, 1, 25, 1, 44);  // foreachiter0_target
+        assertMapping(node, 0, 31, 1, 44, 1, 46);  // )
+        assertMapping(node, 0, 9, 3, 0, 3, 8);     // var i = 
+        assertMapping(node, 0, 22, 3, 8, 3, 42);   // foreachiter0_target[foreachiter0];
+        assertMapping(node, 0, 33, 4, 0, 4, 1);    // {
+        assertMapping(node, 0, 35, 5, 2, 5, 7);    // break
+        assertMapping(node, 0, 42, 6, 0, 6, 1);    // }
+    }
+
+    @Test
+    public void testVisitForEach_HoistedVar()
+    {
+        IForLoopNode node = (IForLoopNode) getNode(
+                "var i:int; for each(i in obj)  break; ", IForLoopNode.class);
+        asBlockWalker.visitForLoop(node);
+        System.out.println(removeGeneratedString(writer.toString()));
+        //var foreachiter0_target = obj;\nfor (var foreachiter0 in foreachiter0_target) \n{\ni = foreachiter0_target[foreachiter0];\n\n  break;}\n
+        assertMapping(node, 0, 14, 0, 0, 0, 26);   // var foreachiter0_target = 
+        assertMapping(node, 0, 14, 0, 26, 0, 29);  // obj
+        assertMapping(node, 0, 14, 0, 29, 0, 30);  // ;
+        assertMapping(node, 0, 0, 1, 0, 1, 5);     // for (
+        assertMapping(node, 0, 14, 1, 5, 1, 21);   // var foreachiter0
+        assertMapping(node, 0, 14, 1, 25, 1, 44);  // foreachiter0_target
+        assertMapping(node, 0, 17, 1, 44, 1, 46);  // )
+        assertMapping(node, 0, 9, 3, 0, 3, 4);     // i =
+        assertMapping(node, 0, 14, 3, 4, 3, 38);   // foreachiter0_target[foreachiter0];
+        assertMapping(node, 0, 20, 5, 2, 5, 7);    // break
+    }
+
     //----------------------------------
     // try {} catch () {} finally {}
     //----------------------------------


[4/6] git commit: [flex-falcon] [refs/heads/develop] - compiler-jx: source map expression tests include identifiers for completeness

Posted by jo...@apache.org.
compiler-jx: source map expression tests include identifiers for completeness


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

Branch: refs/heads/develop
Commit: 031e70ddc5a9df775b0a70db82ea3360e34924eb
Parents: 0639e14
Author: Josh Tynjala <jo...@gmail.com>
Authored: Fri Apr 29 09:46:18 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Fri Apr 29 09:46:18 2016 -0700

----------------------------------------------------------------------
 .../js/sourcemaps/TestSourceMapExpressions.java | 130 ++++++++++++++++---
 1 file changed, 113 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/031e70dd/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
index b824aa7..8fa13d6 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
@@ -50,7 +50,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a + b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // +
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -58,7 +60,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a - b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // -
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -66,7 +70,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a / b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // /
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -74,7 +80,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a % b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // %
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -82,7 +90,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a * b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // *
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -90,6 +100,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IUnaryOperatorNode node = getUnaryNode("a++");
         asBlockWalker.visitUnaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 3); // ++
     }
 
@@ -98,7 +109,8 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IUnaryOperatorNode node = getUnaryNode("++a");
         asBlockWalker.visitUnaryOperator(node);
-        assertMapping(node, 0, 0, 0, 0, 0, 2); // +
+        assertMapping(node, 0, 0, 0, 0, 0, 2); // ++
+        assertMapping(node, 0, 2, 0, 2, 0, 3); // a
     }
 
     @Test
@@ -106,6 +118,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IUnaryOperatorNode node = getUnaryNode("a--");
         asBlockWalker.visitUnaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 3); // --
     }
 
@@ -115,6 +128,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IUnaryOperatorNode node = getUnaryNode("--a");
         asBlockWalker.visitUnaryOperator(node);
         assertMapping(node, 0, 0, 0, 0, 0, 2); // --
+        assertMapping(node, 0, 2, 0, 2, 0, 3); // a
     }
 
     //----------------------------------
@@ -126,7 +140,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a += b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // +=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -134,7 +150,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a -= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // -=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -142,7 +160,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a /= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // /=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -150,7 +170,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a %= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // %=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -158,7 +180,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a *= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // *=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     //----------------------------------
@@ -170,7 +194,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a = b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // =
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     //----------------------------------
@@ -182,7 +208,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a & b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // &
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -190,7 +218,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a << b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // <<
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -199,6 +229,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IUnaryOperatorNode node = getUnaryNode("~a");
         asBlockWalker.visitUnaryOperator(node);
         assertMapping(node, 0, 0, 0, 0, 0, 1); // ~
+        assertMapping(node, 0, 1, 0, 1, 0, 2); // a
     }
 
     @Test
@@ -206,7 +237,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a | b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // |
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -214,7 +247,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a >> b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // >>
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -222,7 +257,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a >>> b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 6); // >>>
+        assertMapping(node, 0, 6, 0, 6, 0, 7); // b
     }
 
     @Test
@@ -230,7 +267,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a ^ b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // ^
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     //----------------------------------
@@ -242,7 +281,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a &= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // &=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -250,7 +291,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a <<= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 6);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 6); // <<=
+        assertMapping(node, 0, 6, 0, 6, 0, 7); // b
     }
 
     @Test
@@ -258,7 +301,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a |= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // |=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -266,7 +311,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a >>= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 6);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 6); // >>=
+        assertMapping(node, 0, 6, 0, 6, 0, 7); // b
     }
 
     @Test
@@ -274,7 +321,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a >>>= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 7);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 7); // >>>=
+        assertMapping(node, 0, 7, 0, 7, 0, 8); // b
     }
 
     @Test
@@ -282,7 +331,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a ^= b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 5);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
+        assertMapping(node, 0, 1, 0, 1, 0, 5); // ^=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     //----------------------------------
@@ -294,7 +345,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a == b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // ==
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -302,7 +355,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a > b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // >
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -310,7 +365,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a >= b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // >=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -318,7 +375,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a != b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // !=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -326,7 +385,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a < b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // <
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
     }
 
     @Test
@@ -334,7 +395,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a <= b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // <=
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -342,7 +405,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a === b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 6); // ===
+        assertMapping(node, 0, 6, 0, 6, 0, 7); // b
     }
 
     @Test
@@ -350,7 +415,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a !== b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 6); // !==
+        assertMapping(node, 0, 6, 0, 6, 0, 7); // b
     }
 
     //----------------------------------
@@ -362,7 +429,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a && b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // &&
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -371,8 +440,11 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IBinaryOperatorNode node = getBinaryNode("a &&= b");
         asBlockWalker.visitBinaryOperator(node);
         //a = a && b
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // =
+        assertMapping(node, 0, 0, 0, 4, 0, 5); // a
         assertMapping(node, 0, 1, 0, 5, 0, 9); // &&
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // b
     }
 
     @Test
@@ -381,6 +453,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IUnaryOperatorNode node = getUnaryNode("!a");
         asBlockWalker.visitUnaryOperator(node);
         assertMapping(node, 0, 0, 0, 0, 0, 1); // !
+        assertMapping(node, 0, 1, 0, 1, 0, 2); // a
     }
 
     @Test
@@ -388,7 +461,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a || b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // ||
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -397,8 +472,11 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IBinaryOperatorNode node = getBinaryNode("a ||= b");
         asBlockWalker.visitBinaryOperator(node);
         //a = a || b
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // =
+        assertMapping(node, 0, 0, 0, 4, 0, 5); // a
         assertMapping(node, 0, 1, 0, 5, 0, 9); // ||
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // b
     }
 
     //----------------------------------
@@ -438,7 +516,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a, b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 3); // ,
+        assertMapping(node, 0, 3, 0, 3, 0, 4); // b
     }
 
     @Test
@@ -447,8 +527,11 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         ITernaryOperatorNode node = (ITernaryOperatorNode) getExpressionNode(
                 "a ? b : c", ITernaryOperatorNode.class);
         asBlockWalker.visitTernaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 4); // ?
+        assertMapping(node, 0, 4, 0, 4, 0, 5); // b
         assertMapping(node, 0, 5, 0, 5, 0, 8); // :
+        assertMapping(node, 0, 8, 0, 8, 0, 9); // c
     }
 
     @Test
@@ -457,6 +540,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IUnaryOperatorNode node = getUnaryNode("delete a");
         asBlockWalker.visitUnaryOperator(node);
         assertMapping(node, 0, 0, 0, 0, 0, 7); // delete
+        assertMapping(node, 0, 7, 0, 7, 0, 8); // a
     }
 
     @Test
@@ -465,7 +549,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getExpressionNode(
                 "a.b", IMemberAccessExpressionNode.class);
         asBlockWalker.visitMemberAccessExpression(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 2); // .
+        assertMapping(node, 0, 2, 0, 2, 0, 3); // b
     }
 
     @Test
@@ -474,9 +560,13 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getExpressionNode(
                 "a.b.c.d", IMemberAccessExpressionNode.class);
         asBlockWalker.visitMemberAccessExpression(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 2); // .
-        assertMapping(node, 0, 3, 0, 3, 0, 4); // .
-        assertMapping(node, 0, 5, 0, 5, 0, 6); // .
+        assertMapping(node, 0, 0, 0, 0, 0, 1);  // a
+        assertMapping(node, 0, 1, 0, 1, 0, 2);  // .
+        assertMapping(node, 0, 2, 0, 2, 0, 3);  // b
+        assertMapping(node, 0, 3, 0, 3, 0, 4);  // .
+        assertMapping(node, 0, 4, 0, 4, 0, 5);  // c
+        assertMapping(node, 0, 5, 0, 5, 0, 6);  // .
+        assertMapping(node, 0, 6, 0, 6, 0, 7);  // d
     }
 
     @Test
@@ -484,7 +574,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a in b");
         asBlockWalker.visitBinaryOperator(node);
+        assertMapping(node, 0, 0, 0, 0, 0, 1); // a
         assertMapping(node, 0, 1, 0, 1, 0, 5); // in
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // b
     }
 
     @Test
@@ -492,7 +584,9 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     {
         IBinaryOperatorNode node = getBinaryNode("a instanceof b");
         asBlockWalker.visitBinaryOperator(node);
-        assertMapping(node, 0, 1, 0, 1, 0, 13); // instanceof
+        assertMapping(node, 0, 0, 0, 0, 0, 1);     // a
+        assertMapping(node, 0, 1, 0, 1, 0, 13);    // instanceof
+        assertMapping(node, 0, 13, 0, 13, 0, 14);  // b
     }
 
     @Test
@@ -501,7 +595,8 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IFunctionCallNode node = (IFunctionCallNode) getExpressionNode(
                 "new Object()", IFunctionCallNode.class);
         asBlockWalker.visitFunctionCall(node);
-        assertMapping(node, 0, 0, 0, 0, 0, 4); // new
+        assertMapping(node, 0, 0, 0, 0, 0, 4);  // new
+        assertMapping(node, 0, 4, 0, 4, 0, 10); // Object
     }
 
     @Test
@@ -676,6 +771,7 @@ public class TestSourceMapExpressions extends SourceMapTestBase
         IUnaryOperatorNode node = getUnaryNode("void a");
         asBlockWalker.visitUnaryOperator(node);
         assertMapping(node, 0, 0, 0, 0, 0, 5); // void
+        assertMapping(node, 0, 5, 0, 5, 0, 6); // a
     }
 
     @Test