flip default to not emit coercions, even for function casting

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

Branch: refs/heads/develop
Commit: 17d59a948adb75b39a4146f17cd7fcab9f3a7b4b
Parents: a61d906
Author: Alex Harui <[email protected]>
Authored: Fri Jan 8 14:29:41 2016 -0800
Committer: Alex Harui <[email protected]>
Committed: Fri Jan 8 14:29:41 2016 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSDocEmitter.java   | 34 ++++++-------
 .../js/flexjs/JSFlexJSEmitterTokens.java        |  2 +-
 .../internal/codegen/js/jx/AsIsEmitter.java     | 52 +++++++++++++-------
 3 files changed, 52 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/17d59a94/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
index 11a6518..5dc097b 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
@@ -48,7 +48,7 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
 public class JSFlexJSDocEmitter extends JSGoogDocEmitter
 {
     private List<String> classIgnoreList;
-    private List<String> ignoreList;
+    private List<String> coercionList;
 
     public JSFlexJSDocEmitter(IJSEmitter emitter)
     {
@@ -68,9 +68,9 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
     @Override
     protected String convertASTypeToJS(String name, String pname)
     {
-        if (ignoreList != null)
+        if (coercionList != null)
         {
-            if (ignoreList.contains(pname + "." + name))
+            if (!coercionList.contains(pname + "." + name))
                 return IASLanguageConstants.Object;
         }
         if (classIgnoreList != null)
@@ -94,7 +94,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
     @Override
     public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
     {
-        ignoreList = null;
+        coercionList = null;
 
         IClassDefinition classDefinition = resolveClassDefinition(node);
 
@@ -152,10 +152,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                     if (asDoc != null && MXMLJSC.keepASDoc)
                     {
                         String docText = asDoc.commentNoEnd();
-                        String ignoreToken = 
JSFlexJSEmitterTokens.IGNORE_COERCION
+                        String keepToken = JSFlexJSEmitterTokens.EMIT_COERCION
                                 .getToken();
-                        if (docText.contains(ignoreToken))
-                            loadIgnores(docText);
+                        if (docText.contains(keepToken))
+                            loadKeepers(docText);
                         write(changeAnnotations(asDoc.commentNoEnd()));
                     }
                     else
@@ -242,19 +242,19 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
         }
     }
 
-    private void loadIgnores(String doc)
+    private void loadKeepers(String doc)
     {
-        ignoreList = new ArrayList<String>();
-        String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
-        int index = doc.indexOf(ignoreToken);
+       coercionList = new ArrayList<String>();
+        String keepToken = JSFlexJSEmitterTokens.EMIT_COERCION.getToken();
+        int index = doc.indexOf(keepToken);
         while (index != -1)
         {
-            String ignorable = doc.substring(index + ignoreToken.length());
-            int endIndex = ignorable.indexOf("\n");
-            ignorable = ignorable.substring(0, endIndex);
-            ignorable = ignorable.trim();
-            ignoreList.add(ignorable);
-            index = doc.indexOf(ignoreToken, index + endIndex);
+            String keeper = doc.substring(index + keepToken.length());
+            int endIndex = keeper.indexOf("\n");
+            keeper = keeper.substring(0, endIndex);
+            keeper = keeper.trim();
+            coercionList.add(keeper);
+            index = doc.indexOf(keepToken, index + endIndex);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/17d59a94/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
index e9db7db..a09c9ab 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
@@ -34,7 +34,7 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
     NAMES("names"),
     QNAME("qName"),
     UNDERSCORE("_"),
-    IGNORE_COERCION("@flexjsignorecoercion"),
+    EMIT_COERCION("@flexjsemitcoercion"),
     IGNORE_IMPORT("@flexjsignoreimport"),
     PREINCREMENT("preincrement"),
     PREDECREMENT("predecrement"),

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/17d59a94/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 540f558..b821d7a 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
@@ -29,6 +29,7 @@ import 
org.apache.flex.compiler.internal.definitions.ClassDefinition;
 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.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 
@@ -49,6 +50,7 @@ public class AsIsEmitter extends JSSubEmitter
                 .resolve(getProject()) : null;
         if (id != ASTNodeID.Op_IsID && dnode != null)
         {
+            boolean emit = false;
             // find the function node
             IFunctionNode functionNode = (IFunctionNode) left
                     .getAncestorOfType(IFunctionNode.class);
@@ -59,32 +61,46 @@ public class AsIsEmitter extends JSSubEmitter
                 if (asDoc != null)
                 {
                     String asDocString = asDoc.commentNoEnd();
-                    String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+                    String coercionToken = JSFlexJSEmitterTokens.EMIT_COERCION
                             .getToken();
-                    boolean ignore = false;
-                    int ignoreIndex = asDocString.indexOf(ignoreToken);
-                    while (ignoreIndex != -1)
+                    int emitIndex = asDocString.indexOf(coercionToken);
+                    while (emitIndex != -1)
                     {
-                        String ignorable = asDocString.substring(ignoreIndex
-                                + ignoreToken.length());
-                        int endIndex = ignorable.indexOf("\n");
-                        ignorable = ignorable.substring(0, endIndex);
-                        ignorable = ignorable.trim();
+                        String emitable = asDocString.substring(emitIndex
+                                + coercionToken.length());
+                        int endIndex = emitable.indexOf("\n");
+                        emitable = emitable.substring(0, endIndex);
+                        emitable = emitable.trim();
                         String rightSide = dnode.getQualifiedName();
-                        if (ignorable.equals(rightSide))
+                        if (emitable.equals(rightSide))
                         {
-                            ignore = true;
+                            emit = true;
                             break;
                         }
-                        ignoreIndex = asDocString.indexOf(ignoreToken,
-                                ignoreIndex + ignoreToken.length());
-                    }
-                    if (ignore)
-                    {
-                        getWalker().walk(left);
-                        return;
+                        emitIndex = asDocString.indexOf(coercionToken,
+                                       emitIndex + coercionToken.length());
                     }
                 }
+                if (coercion)
+                {
+                       // see if the cast is inside a try/catch in this 
function. If so,
+                       // assume that we want an exception.
+                       IASNode child = left.getParent();
+                       while (child != functionNode)
+                       {
+                               if (child.getNodeID() == ASTNodeID.TryID)
+                               {
+                                       emit = true;
+                                       break;
+                               }
+                               child = child.getParent();
+                       }
+                }
+            }
+            if (!emit)
+            {
+                getWalker().walk(left);
+                return;
             }
         }
 

Reply via email to