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/06 01:56:23 UTC

[05/33] git commit: [flex-falcon] [refs/heads/develop] - source map improvements for as/is/casting, binary operators, class fields and methods, object/array literals, and better names field in the source map

source map improvements for as/is/casting, binary operators, class fields and methods, object/array literals, and better names field in the source map


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

Branch: refs/heads/develop
Commit: ad6f1d04d19284515305353c730ef2c77d4e4fd6
Parents: 4b3f7be
Author: Josh Tynjala <jo...@apache.org>
Authored: Sat Mar 26 15:37:42 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
Committed: Sat Mar 26 15:37:42 2016 -0700

----------------------------------------------------------------------
 .../flex/compiler/codegen/js/IJSEmitter.java    |   3 +
 .../compiler/internal/codegen/js/JSEmitter.java | 140 +++++++++++++++----
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |   4 +-
 .../internal/codegen/js/jx/AsIsEmitter.java     |  46 +++++-
 .../codegen/js/jx/BinaryOperatorEmitter.java    |   5 +-
 .../internal/codegen/js/jx/ClassEmitter.java    |   4 +
 .../internal/codegen/js/jx/FieldEmitter.java    |   8 +-
 .../codegen/js/jx/FunctionCallEmitter.java      |   4 +-
 .../internal/codegen/js/jx/MethodEmitter.java   |  20 ++-
 .../codegen/js/jx/PackageFooterEmitter.java     |   1 +
 .../codegen/js/jx/PackageHeaderEmitter.java     |   2 +
 11 files changed, 189 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
index f660fc3..6aa7f61 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
@@ -45,7 +45,10 @@ public interface IJSEmitter extends IASEmitter
     String formatQualifiedName(String name);
     
     void startMapping(ISourceLocation node);
+    void startMapping(ISourceLocation node, int startOffset);
     void endMapping(ISourceLocation node);
+    void pushSourceMapName(ISourceLocation node);
+    void popSourceMapName();
     
     void emitSourceMapDirective(ITypeNode node);
     

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index 7e29a08..c830f73 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -22,33 +22,38 @@ package org.apache.flex.compiler.internal.codegen.js;
 import java.io.FilterWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Stack;
 
-import com.google.debugging.sourcemap.FilePosition;
 import org.apache.flex.compiler.clients.JSConfiguration;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.ISourceLocation;
-import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitter;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.internal.tree.as.ContainerNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IContainerNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
 import org.apache.flex.compiler.tree.as.IKeywordNode;
+import org.apache.flex.compiler.tree.as.ILiteralContainerNode;
 import org.apache.flex.compiler.tree.as.INumericLiteralNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IReturnNode;
 import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.visitor.IBlockWalker;
 
+import com.google.debugging.sourcemap.FilePosition;
+
 /**
  * @author Michael Schmalle
  */
@@ -64,6 +69,8 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     
     private SourceMapMapping lastMapping;
     
+    private Stack<String> nameStack = new Stack<String>();
+    
     private List<SourceMapMapping> sourceMapMappings;
     
     public List<SourceMapMapping> getSourceMapMappings()
@@ -174,6 +181,62 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     }
 
     @Override
+    public void emitLiteralContainer(ILiteralContainerNode node)
+    {
+        final IContainerNode cnode = node.getContentsNode();
+        final IContainerNode.ContainerType type = cnode.getContainerType();
+        String preFix = null;
+        String postFix = null;
+
+        if (type == IContainerNode.ContainerType.BRACES)
+        {
+            preFix = ASEmitterTokens.BLOCK_OPEN.getToken();
+            postFix = ASEmitterTokens.BLOCK_CLOSE.getToken();
+        }
+        else if (type == IContainerNode.ContainerType.BRACKETS)
+        {
+            preFix = ASEmitterTokens.SQUARE_OPEN.getToken();
+            postFix = ASEmitterTokens.SQUARE_CLOSE.getToken();
+        }
+        else if (type == IContainerNode.ContainerType.IMPLICIT)
+        {
+            // nothing to write, move along
+        }
+        else if (type == IContainerNode.ContainerType.PARENTHESIS)
+        {
+            preFix = ASEmitterTokens.PAREN_OPEN.getToken();
+            postFix = ASEmitterTokens.PAREN_CLOSE.getToken();
+        }
+
+        if (preFix != null)
+        {
+            startMapping(node);
+            write(preFix);
+            endMapping(node);
+        }
+
+        final int len = cnode.getChildCount();
+        for (int i = 0; i < len; i++)
+        {
+            IASNode child = cnode.getChild(i);
+            getWalker().walk(child);
+            if (i < len - 1)
+            {
+                startMapping(node);
+                writeToken(ASEmitterTokens.COMMA);
+                endMapping(node);
+            }
+        }
+
+        if (postFix != null)
+        {
+            startMapping(node);
+            write(postFix);
+            endMapping(node);
+        }
+    }
+
+    @Override
     public void emitReturn(IReturnNode node)
     {
         startMapping(node);
@@ -217,9 +280,53 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
             endMapping(keywordNode);
         }
     }
+
+    public void pushSourceMapName(ISourceLocation node)
+    {
+        boolean isValidMappingScope = node instanceof ITypeNode
+                || node instanceof IPackageNode
+                || node instanceof IFunctionNode;
+        if(!isValidMappingScope)
+        {
+            throw new IllegalStateException("A source mapping scope must be a package, type, or function.");
+        }
+        
+        IDefinitionNode definitionNode = (IDefinitionNode) node;
+        String nodeName = definitionNode.getQualifiedName();
+        ITypeDefinition typeDef = EmitterUtils.getTypeDefinition(definitionNode);
+        if (typeDef != null)
+        {
+            boolean isConstructor = node instanceof IFunctionNode &&
+                    ((IFunctionNode) node).isConstructor();
+            boolean isStatic = definitionNode.hasModifier(ASModifier.STATIC);
+            if (isConstructor)
+            {
+                nodeName = typeDef.getQualifiedName() + ".constructor";
+            }
+            else if (isStatic)
+            {
+                nodeName = typeDef.getQualifiedName() + "." + nodeName;
+            }
+            else
+            {
+                nodeName = typeDef.getQualifiedName() + ".prototype." + nodeName;
+            }
+        }
+        nameStack.push(nodeName);
+    }
     
+    public void popSourceMapName()
+    {
+        nameStack.pop();
+    }
+
     public void startMapping(ISourceLocation node)
     {
+        startMapping(node, 0);
+    }
+    
+    public void startMapping(ISourceLocation node, int startOffset)
+    {
         if (lastMapping != null)
         {
             FilePosition sourceStartPosition = lastMapping.sourceStartPosition;
@@ -246,37 +353,18 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
             }
             return;
         }
+        int sourceLine = node.getLine();
+        int sourceColumn = node.getColumn() + startOffset;
         
         String nodeName = null;
-        if (node instanceof IDefinitionNode)
+        if (nameStack.size() > 0)
         {
-            IDefinitionNode definitionNode = (IDefinitionNode) node; 
-            nodeName = definitionNode.getQualifiedName();
-
-            ITypeDefinition typeDef = EmitterUtils.getTypeDefinition(definitionNode);
-            if (typeDef != null)
-            {
-                boolean isConstructor = node instanceof IFunctionNode &&
-                        ((IFunctionNode) node).isConstructor();
-                boolean isStatic = definitionNode.hasModifier(ASModifier.STATIC);
-                if (isConstructor)
-                {
-                    nodeName = typeDef.getQualifiedName() + ".constructor";
-                }
-                else if (isStatic)
-                {
-                    nodeName = typeDef.getQualifiedName() + "." + nodeName;
-                }
-                else
-                {
-                    nodeName = typeDef.getQualifiedName() + ".prototype." + nodeName;
-                }
-            }
+            nodeName = nameStack.lastElement();
         }
         SourceMapMapping mapping = new SourceMapMapping();
         mapping.sourcePath = sourcePath;
         mapping.name = nodeName;
-        mapping.sourceStartPosition = new FilePosition(node.getLine(), node.getColumn());
+        mapping.sourceStartPosition = new FilePosition(sourceLine, sourceColumn);
         mapping.destStartPosition = new FilePosition(getCurrentLine(), getCurrentColumn());
         lastMapping = mapping;
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/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 2f5775e..94e1d5e 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
@@ -643,9 +643,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     // Specific
     //--------------------------------------------------------------------------
 
-    public void emitIsAs(IExpressionNode left, IExpressionNode right, ASTNodeID id, boolean coercion)
+    public void emitIsAs(IExpressionNode node, IExpressionNode left, IExpressionNode right, ASTNodeID id, boolean coercion)
     {
-        asIsEmitter.emitIsAs(left, right, id, coercion);
+        asIsEmitter.emitIsAs(node, left, right, id, coercion);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
index 9f242ba..1557b7e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.codegen.js.jx;
 
 import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
@@ -30,6 +31,8 @@ import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.projects.ICompilerProject;
 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.IFunctionNode;
 
@@ -41,8 +44,8 @@ public class AsIsEmitter extends JSSubEmitter
         super(emitter);
     }
 
-    public void emitIsAs(IExpressionNode left, IExpressionNode right,
-            ASTNodeID id, boolean coercion)
+    public void emitIsAs(IExpressionNode node, IExpressionNode left, IExpressionNode right,
+                         ASTNodeID id, boolean coercion)
     {
         // project is null in unit tests
         //IDefinition dnode = project != null ? (right).resolve(project) : null;
@@ -130,6 +133,15 @@ public class AsIsEmitter extends JSSubEmitter
         if (project instanceof FlexJSProject)
         	((FlexJSProject)project).needLanguage = true;
         
+        if (node instanceof IBinaryOperatorNode)
+        {
+            IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node; 
+            getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode().getEnd() - binaryOperatorNode.getLeftOperandNode().getStart());
+        }
+        else
+        {
+            getEmitter().startMapping(node);
+        }
         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
         write(ASEmitterTokens.MEMBER_ACCESS);
 
@@ -139,14 +151,41 @@ public class AsIsEmitter extends JSSubEmitter
             write(ASEmitterTokens.AS);
 
         write(ASEmitterTokens.PAREN_OPEN);
+        getEmitter().endMapping(node);
+        
         getWalker().walk(left);
+        if (node instanceof IBinaryOperatorNode)
+        {
+            IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node;
+            getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode().getEnd() - binaryOperatorNode.getLeftOperandNode().getStart());
+        }
+        else
+        {
+            getEmitter().startMapping(node);
+        }
         writeToken(ASEmitterTokens.COMMA);
+        getEmitter().endMapping(node);
 
-        if (dnode instanceof ClassDefinition)
+        if (dnode instanceof IClassDefinition)
+        {
+            getEmitter().startMapping(right);
             write(getEmitter().formatQualifiedName(dnode.getQualifiedName()));
+            getEmitter().endMapping(right);
+        }
         else
+        {
             getWalker().walk(right);
+        }
 
+        if (node instanceof IBinaryOperatorNode)
+        {
+            IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node;
+            getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode().getEnd() - binaryOperatorNode.getLeftOperandNode().getStart());
+        }
+        else
+        {
+            getEmitter().startMapping(node);
+        }
         if (coercion)
         {
             writeToken(ASEmitterTokens.COMMA);
@@ -154,6 +193,7 @@ public class AsIsEmitter extends JSSubEmitter
         }
 
         write(ASEmitterTokens.PAREN_CLOSE);
+        getEmitter().endMapping(node);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index e37f0e1..9ef9060 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -64,7 +64,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
         }
         else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
         {
-            fjs.emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(),
+            fjs.emitIsAs(node, node.getLeftOperandNode(), node.getRightOperandNode(),
                     id, false);
         }
         else if (id == ASTNodeID.Op_InstanceOfID)
@@ -328,6 +328,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
         {
             getWalker().walk(node.getLeftOperandNode());
 
+            getEmitter().startMapping(node, node.getLeftOperandNode().getEnd() - node.getLeftOperandNode().getStart());
+            
             if (id != ASTNodeID.Op_CommaID)
                 write(ASEmitterTokens.SPACE);
 
@@ -349,6 +351,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
             }
 
             write(ASEmitterTokens.SPACE);
+            getEmitter().endMapping(node);
 
             /*
             IDefinition definition = node.getRightOperandNode().resolve(getProject());

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index bd6289f..6bf01b7 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -54,6 +54,8 @@ public class ClassEmitter extends JSSubEmitter implements
 
         // TODO (mschmalle) will remove this cast as more things get abstracted
         JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        
+        getEmitter().pushSourceMapName(node);
 
         ASDocComment asDoc = (ASDocComment) node.getASDocComment();
         if (asDoc != null && MXMLJSC.keepASDoc)
@@ -141,6 +143,8 @@ public class ClassEmitter extends JSSubEmitter implements
         fjs.getAccessorEmitter().emit(definition);
         
         fjs.getPackageFooterEmitter().emitClassInfo(node);
+
+        getEmitter().popSourceMapName();
         getModel().popClass();
     }
     

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index b22c41d..8e03b91 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -83,12 +83,12 @@ public class FieldEmitter extends JSSubEmitter implements
             
             if (definition == null)
                 definition = ndef.getContainingScope().getDefinition();
-            
+
+            getEmitter().startMapping(node.getNameExpressionNode());
             write(getEmitter().formatQualifiedName(definition.getQualifiedName())
                     + ASEmitterTokens.MEMBER_ACCESS.getToken() + root);
-            getEmitter().startMapping(node);
             write(node.getName());
-            getEmitter().endMapping(node);
+            getEmitter().endMapping(node.getNameExpressionNode());
         }
 
         if (node.getNodeID() == ASTNodeID.BindableVariableID)
@@ -101,8 +101,10 @@ public class FieldEmitter extends JSSubEmitter implements
         if (vnode != null &&
                 (ndef.isStatic() || EmitterUtils.isScalar(vnode) || isPackageOrFileMember))
         {
+            getEmitter().startMapping(node);
             write(ASEmitterTokens.SPACE);
             writeToken(ASEmitterTokens.EQUAL);
+            getEmitter().endMapping(node);
             getEmitter().getWalker().walk(vnode);
         }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index a71b4dd..5f590e1 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -163,9 +163,9 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu
                 fjs.walkArguments(node.getArgumentNodes());
                 write(ASEmitterTokens.PAREN_CLOSE);
             }
-            else
+            else //function-style cast
             {
-                fjs.emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+                fjs.emitIsAs(node, node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
             }
         }
         else

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
index 15d9fa7..e067bda 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
@@ -74,6 +74,7 @@ public class MethodEmitter extends JSSubEmitter implements
         }
         else
         {
+            getEmitter().startMapping(node.getNameExpressionNode());
             ITypeDefinition typeDef = EmitterUtils.getTypeDefinition(node);
             if (typeDef != null)
             {
@@ -81,16 +82,8 @@ public class MethodEmitter extends JSSubEmitter implements
             }
             if (qname != null && !qname.equals(""))
             {
-                if (isConstructor)
-                {
-                    getEmitter().startMapping(node);
-                }
                 write(fjs.formatQualifiedName(qname));
-                if (isConstructor)
-                {
-                    getEmitter().endMapping(node);
-                }
-                else
+                if (!isConstructor)
                 {
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     if (!fn.hasModifier(ASModifier.STATIC))
@@ -102,15 +95,16 @@ public class MethodEmitter extends JSSubEmitter implements
             }
             if (!isConstructor)
             {
-                getEmitter().startMapping(node);
                 fjs.emitMemberName(node);
-                getEmitter().endMapping(node);
             }
+            getEmitter().endMapping(node.getNameExpressionNode());
         }
 
+        getEmitter().startMapping(node);
         write(ASEmitterTokens.SPACE);
         writeToken(ASEmitterTokens.EQUAL);
         write(ASEmitterTokens.FUNCTION);
+        getEmitter().endMapping(node);
 
         fjs.emitParameters(node.getParameterNodes());
 
@@ -130,7 +124,11 @@ public class MethodEmitter extends JSSubEmitter implements
         }
 
         if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+        {
+            getEmitter().pushSourceMapName(node);
             fjs.emitMethodScope(node.getScopedNode());
+            getEmitter().popSourceMapName();
+        }
 
         if (isConstructor && hasSuperClass)
         {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index eab3413..e5aaf34 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -66,6 +66,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
     @Override
     public void emit(IPackageDefinition definition)
     {
+        getEmitter().popSourceMapName();
         IASScope containedScope = definition.getContainedScope();
         ITypeDefinition type = EmitterUtils.findType(containedScope
                 .getAllLocalDefinitions());

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad6f1d04/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index 64b560a..48acf5b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -131,6 +131,8 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
     {
         // TODO (mschmalle) will remove this cast as more things get abstracted
         JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        
+        getEmitter().pushSourceMapName(definition.getNode());
 
         PackageScope containedScope = (PackageScope) definition
                 .getContainedScope();