You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/01/11 19:04:48 UTC
[5/9] git commit: [flex-falcon] [refs/heads/develop] - compiler
options to optimize output by removing certain kinds of coercions
compiler options to optimize output by removing certain kinds of coercions
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/67ed780e
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/67ed780e
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/67ed780e
Branch: refs/heads/develop
Commit: 67ed780ef705fe654f0f616b1be0a0ea4c0604c5
Parents: 3052451
Author: Alex Harui <ah...@apache.org>
Authored: Fri Jan 8 23:24:42 2016 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Jan 8 23:24:42 2016 -0800
----------------------------------------------------------------------
.../apache/flex/compiler/clients/MXMLJSC.java | 1 +
.../codegen/js/flexjs/JSFlexJSDocEmitter.java | 27 ++++++++++
.../js/flexjs/JSFlexJSEmitterTokens.java | 3 ++
.../internal/codegen/js/jx/AsIsEmitter.java | 54 ++++++++++++++------
.../driver/js/goog/JSGoogConfiguration.java | 40 +++++++++++++++
.../internal/projects/FlexJSProject.java | 4 ++
6 files changed, 113 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index 750c54a..35a9609 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -703,6 +703,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider,
problems = new ProblemQuery(
projectConfigurator.getCompilerProblemSettings());
+ project.config = (JSGoogConfiguration)projectConfigurator.getConfiguration();
config = projectConfigurator.getConfiguration();
configBuffer = projectConfigurator.getConfigurationBuffer();
problems.addAll(projectConfigurator.getConfigurationProblems());
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/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 5dc097b..057bcf1 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,6 +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,6 +69,11 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
@Override
protected String convertASTypeToJS(String name, String pname)
{
+ if (ignoreList != null)
+ {
+ if (ignoreList.contains(pname + "." + name))
+ return IASLanguageConstants.Object;
+ }
if (coercionList != null)
{
if (!coercionList.contains(pname + "." + name))
@@ -95,6 +101,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
{
coercionList = null;
+ ignoreList = null;
IClassDefinition classDefinition = resolveClassDefinition(node);
@@ -156,6 +163,10 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
.getToken();
if (docText.contains(keepToken))
loadKeepers(docText);
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+ .getToken();
+ if (docText.contains(ignoreToken))
+ loadIgnores(docText);
write(changeAnnotations(asDoc.commentNoEnd()));
}
else
@@ -242,6 +253,22 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
}
}
+ private void loadIgnores(String doc)
+ {
+ ignoreList = new ArrayList<String>();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
+ int index = doc.indexOf(ignoreToken);
+ while (index != -1)
+ {
+ String ignore = doc.substring(index + ignoreToken.length());
+ int endIndex = ignore.indexOf("\n");
+ ignore = ignore.substring(0, endIndex);
+ ignore = ignore.trim();
+ ignoreList.add(ignore);
+ index = doc.indexOf(ignoreToken, index + endIndex);
+ }
+ }
+
private void loadKeepers(String doc)
{
coercionList = new ArrayList<String>();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/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 a09c9ab..4c4a16b 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
@@ -35,6 +35,7 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
QNAME("qName"),
UNDERSCORE("_"),
EMIT_COERCION("@flexjsemitcoercion"),
+ IGNORE_COERCION("@flexjsignorecoercion"),
IGNORE_IMPORT("@flexjsignoreimport"),
PREINCREMENT("preincrement"),
PREDECREMENT("predecrement"),
@@ -43,6 +44,8 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
SUPERGETTER("superGetter"),
SUPERSETTER("superSetter"),
CLOSURE_FUNCTION_NAME("org.apache.flex.utils.Language.closure"),
+ SKIP_AS_COERCIONS("skipAsCoercions"),
+ SKIP_FUNCTION_COERCIONS("skipFunctionCoercions"),
;
private String token;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/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 b821d7a..b18cb88 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
@@ -50,12 +50,30 @@ public class AsIsEmitter extends JSSubEmitter
.resolve(getProject()) : null;
if (id != ASTNodeID.Op_IsID && dnode != null)
{
- boolean emit = false;
+ boolean emit = coercion ?
+ !((FlexJSProject)getProject()).config.getJSOutputOptimizations().contains(JSFlexJSEmitterTokens.SKIP_FUNCTION_COERCIONS.getToken()) :
+ !((FlexJSProject)getProject()).config.getJSOutputOptimizations().contains(JSFlexJSEmitterTokens.SKIP_AS_COERCIONS.getToken());
+
// find the function node
IFunctionNode functionNode = (IFunctionNode) left
.getAncestorOfType(IFunctionNode.class);
if (functionNode != null) // can be null in synthesized binding code
{
+ 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();
+ }
+ }
ASDocComment asDoc = (ASDocComment) functionNode
.getASDocComment();
if (asDoc != null)
@@ -80,21 +98,25 @@ public class AsIsEmitter extends JSSubEmitter
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();
- }
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+ .getToken();
+ int ignoreIndex = asDocString.indexOf(ignoreToken);
+ while (ignoreIndex != -1)
+ {
+ String ignorable = asDocString.substring(emitIndex
+ + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ String rightSide = dnode.getQualifiedName();
+ if (ignorable.equals(rightSide))
+ {
+ emit = false;
+ break;
+ }
+ ignoreIndex = asDocString.indexOf(ignoreToken,
+ ignoreIndex + ignoreToken.length());
+ }
}
}
if (!emit)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/compiler.jx/src/org/apache/flex/compiler/internal/driver/js/goog/JSGoogConfiguration.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/driver/js/goog/JSGoogConfiguration.java b/compiler.jx/src/org/apache/flex/compiler/internal/driver/js/goog/JSGoogConfiguration.java
index 55f449e..0f03323 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/driver/js/goog/JSGoogConfiguration.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/driver/js/goog/JSGoogConfiguration.java
@@ -236,6 +236,27 @@ public class JSGoogConfiguration extends JSConfiguration
+ //
+ // 'remove-circulars'
+ //
+
+ private boolean removeCirculars = false;
+
+ public boolean getRemoveCirculars()
+ {
+ return removeCirculars;
+ }
+
+ @Config
+ @Mapping("remove-circulars")
+ public void setRemoveCirculars(ConfigurationValue cv, boolean value)
+ throws ConfigurationException
+ {
+ removeCirculars = value;
+ }
+
+
+
protected String getAbsolutePathFromPathRelativeToMXMLC(String relativePath)
throws IOException
{
@@ -268,4 +289,23 @@ public class JSGoogConfiguration extends JSConfiguration
jsCompilerOptions.addAll(value);
}
+ //
+ // 'js-output-optimization'
+ //
+
+ protected List<String> jsOutputOptimizations = new ArrayList<String>();
+
+ public List<String> getJSOutputOptimizations()
+ {
+ return jsOutputOptimizations;
+ }
+
+ @Config(allowMultiple = true)
+ @Mapping("js-output-optimization")
+ @InfiniteArguments
+ public void setJSOutputOptimizations(ConfigurationValue cv, List<String> value)
+ throws ConfigurationException
+ {
+ jsOutputOptimizations.addAll(value);
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/67ed780e/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index 6ce6e23..1cf6d3d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -25,12 +25,14 @@ import java.util.List;
import java.util.Set;
import org.apache.flex.compiler.common.DependencyType;
+import org.apache.flex.compiler.config.Configuration;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IScopedDefinition;
import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSEmitterTokens;
import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
import org.apache.flex.compiler.internal.driver.js.flexjs.JSCSSCompilationSession;
+import org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration;
import org.apache.flex.compiler.internal.scopes.ASProjectScope.DefinitionPromise;
import org.apache.flex.compiler.internal.scopes.ASScope;
import org.apache.flex.compiler.internal.scopes.PackageScope;
@@ -63,6 +65,8 @@ public class FlexJSProject extends FlexProject
private HashMap<ICompilationUnit, HashMap<String, String>> interfaces = new HashMap<ICompilationUnit, HashMap<String, String>>();
private HashMap<ICompilationUnit, HashMap<String, DependencyType>> requires = new HashMap<ICompilationUnit, HashMap<String, DependencyType>>();
+ public JSGoogConfiguration config;
+
public ICompilationUnit mainCU;
@Override