Skip to content

Commit

Permalink
Refactor of GenerateJavaScriptAST.
Browse files Browse the repository at this point in the history
This patch introduces JTransformer to make it easy to
write recursive passes over the Java AST, and refactors
GenerateJavaScriptAST accordingly.

Change-Id: I81c72a5965771310640f7d6cb8f8311d096f0cc0
  • Loading branch information
rluble authored and Gerrit Code Review committed Oct 5, 2015
1 parent 2d2d035 commit c712422
Show file tree
Hide file tree
Showing 26 changed files with 2,438 additions and 1,502 deletions.
14 changes: 12 additions & 2 deletions dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
Expand Up @@ -97,6 +97,7 @@
import com.google.gwt.dev.jjs.impl.MethodCallSpecializer; import com.google.gwt.dev.jjs.impl.MethodCallSpecializer;
import com.google.gwt.dev.jjs.impl.MethodCallTightener; import com.google.gwt.dev.jjs.impl.MethodCallTightener;
import com.google.gwt.dev.jjs.impl.MethodInliner; import com.google.gwt.dev.jjs.impl.MethodInliner;
import com.google.gwt.dev.jjs.impl.NameClashesFixer;
import com.google.gwt.dev.jjs.impl.OptimizerContext; import com.google.gwt.dev.jjs.impl.OptimizerContext;
import com.google.gwt.dev.jjs.impl.OptimizerStats; import com.google.gwt.dev.jjs.impl.OptimizerStats;
import com.google.gwt.dev.jjs.impl.PostOptimizationCompoundAssignmentNormalizer; import com.google.gwt.dev.jjs.impl.PostOptimizationCompoundAssignmentNormalizer;
Expand Down Expand Up @@ -128,7 +129,7 @@
import com.google.gwt.dev.js.BaselineCoverageGatherer; import com.google.gwt.dev.js.BaselineCoverageGatherer;
import com.google.gwt.dev.js.ClosureJsRunner; import com.google.gwt.dev.js.ClosureJsRunner;
import com.google.gwt.dev.js.CoverageInstrumentor; import com.google.gwt.dev.js.CoverageInstrumentor;
import com.google.gwt.dev.js.DuplicateExecuteOnceRemover; import com.google.gwt.dev.js.DuplicateClinitRemover;
import com.google.gwt.dev.js.EvalFunctionsAtTopScope; import com.google.gwt.dev.js.EvalFunctionsAtTopScope;
import com.google.gwt.dev.js.FreshNameGenerator; import com.google.gwt.dev.js.FreshNameGenerator;
import com.google.gwt.dev.js.JsBreakUpLargeVarStatements; import com.google.gwt.dev.js.JsBreakUpLargeVarStatements;
Expand All @@ -151,6 +152,7 @@
import com.google.gwt.dev.js.JsUnusedFunctionRemover; import com.google.gwt.dev.js.JsUnusedFunctionRemover;
import com.google.gwt.dev.js.JsVerboseNamer; import com.google.gwt.dev.js.JsVerboseNamer;
import com.google.gwt.dev.js.SizeBreakdown; import com.google.gwt.dev.js.SizeBreakdown;
import com.google.gwt.dev.js.ast.JavaScriptVerifier;
import com.google.gwt.dev.js.ast.JsContext; import com.google.gwt.dev.js.ast.JsContext;
import com.google.gwt.dev.js.ast.JsForIn; import com.google.gwt.dev.js.ast.JsForIn;
import com.google.gwt.dev.js.ast.JsFunction; import com.google.gwt.dev.js.ast.JsFunction;
Expand Down Expand Up @@ -415,6 +417,12 @@ private PermutationResult compilePermutation(Permutation permutation, UnifiedAst
// TODO(stalcup): move to normalization // TODO(stalcup): move to normalization
JsBreakUpLargeVarStatements.exec(jsProgram, properties.getConfigurationProperties()); JsBreakUpLargeVarStatements.exec(jsProgram, properties.getConfigurationProperties());


if (!options.isIncrementalCompileEnabled()) {
// Verifies consistency between jsProgram and jjsmap if assertions are enabled.
// TODO(rluble): make it work for incremental compiles.
JavaScriptVerifier.verify(jsProgram, jjsmap);
}

// (8) Generate Js source // (8) Generate Js source
List<JsSourceMap> sourceInfoMaps = new ArrayList<JsSourceMap>(); List<JsSourceMap> sourceInfoMaps = new ArrayList<JsSourceMap>();
boolean isSourceMapsEnabled = properties.isTrueInAnyPermutation("compiler.useSourceMaps"); boolean isSourceMapsEnabled = properties.isTrueInAnyPermutation("compiler.useSourceMaps");
Expand Down Expand Up @@ -490,6 +498,8 @@ protected TypeMapper<?> normalizeSemantics() {


TypeMapper<?> typeMapper = getTypeMapper(); TypeMapper<?> typeMapper = getTypeMapper();
ResolveRuntimeTypeReferences.exec(jprogram, typeMapper, getTypeOrder()); ResolveRuntimeTypeReferences.exec(jprogram, typeMapper, getTypeOrder());

NameClashesFixer.exec(jprogram);
return typeMapper; return typeMapper;
} finally { } finally {
event.end(); event.end();
Expand Down Expand Up @@ -1031,7 +1041,7 @@ private void optimizeJsLoop(Collection<JsNode> toInline) throws InterruptedExcep
} }


if (optimizationLevel > OptionOptimize.OPTIMIZE_LEVEL_DRAFT) { if (optimizationLevel > OptionOptimize.OPTIMIZE_LEVEL_DRAFT) {
DuplicateExecuteOnceRemover.exec(jsProgram); DuplicateClinitRemover.exec(jsProgram);
} }
} }


Expand Down
5 changes: 3 additions & 2 deletions dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
Expand Up @@ -22,6 +22,7 @@
import com.google.gwt.dev.jjs.SourceInfo; import com.google.gwt.dev.jjs.SourceInfo;
import com.google.gwt.dev.jjs.SourceOrigin; import com.google.gwt.dev.jjs.SourceOrigin;
import com.google.gwt.dev.jjs.impl.GwtAstBuilder; import com.google.gwt.dev.jjs.impl.GwtAstBuilder;
import com.google.gwt.dev.jjs.impl.JjsUtils;
import com.google.gwt.dev.jjs.impl.TypeCategory; import com.google.gwt.dev.jjs.impl.TypeCategory;
import com.google.gwt.dev.jjs.impl.codesplitter.FragmentPartitioningResult; import com.google.gwt.dev.jjs.impl.codesplitter.FragmentPartitioningResult;
import com.google.gwt.dev.util.StringInterner; import com.google.gwt.dev.util.StringInterner;
Expand Down Expand Up @@ -424,11 +425,11 @@ public void addType(JDeclaredType type) {
indexedTypes.put(type.getShortName(), type); indexedTypes.put(type.getShortName(), type);
for (JMethod method : type.getMethods()) { for (JMethod method : type.getMethods()) {
if (!method.isPrivate()) { if (!method.isPrivate()) {
indexedMethods.put(type.getShortName() + '.' + method.getName(), method); indexedMethods.put(JjsUtils.getIndexedName(method), method);
} }
} }
for (JField field : type.getFields()) { for (JField field : type.getFields()) {
indexedFields.put(type.getShortName() + '.' + field.getName(), field); indexedFields.put(JjsUtils.getIndexedName(field), field);
} }
switch (name) { switch (name) {
case "java.lang.Object": case "java.lang.Object":
Expand Down

0 comments on commit c712422

Please sign in to comment.