From ddbea17e0f1972cc720459212e17daca3ac06a34 Mon Sep 17 00:00:00 2001 From: develar Date: Mon, 10 Sep 2012 11:03:27 +0400 Subject: [PATCH] JS backend: improve js readability which generated in the Dangerous translator -- initialize temporary vars in declaration. (cherry picked from commit 4d8355c) --- .../translate/context/AliasingContext.java | 36 +++++++++++-------- .../translate/context/DynamicContext.java | 5 +++ .../translate/context/TranslationContext.java | 2 +- .../utils/dangerous/DangerousTranslator.java | 15 ++++---- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/AliasingContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/AliasingContext.java index 667a19e24c0..e3d396a0734 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/AliasingContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/AliasingContext.java @@ -16,7 +16,6 @@ package org.jetbrains.k2js.translate.context; -import com.google.common.collect.Maps; import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.backend.js.ast.JsName; import org.jetbrains.annotations.NotNull; @@ -24,7 +23,9 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; public class AliasingContext { private static final AliasingContext ROOT = new AliasingContext(null) { @@ -46,36 +47,39 @@ public class AliasingContext { @Nullable private Map aliasesForDescriptors; - @NotNull - private final Map aliasesForExpressions = Maps.newHashMap(); + @Nullable + private final Map aliasesForExpressions; @Nullable private final AliasingContext parent; private AliasingContext(@Nullable AliasingContext parent) { - this(parent, null); + this(parent, null, null); } - private AliasingContext(@Nullable AliasingContext parent, @Nullable Map aliasesForDescriptors) { + private AliasingContext( + @Nullable AliasingContext parent, + @Nullable Map aliasesForDescriptors, + @Nullable Map aliasesForExpressions + ) { this.parent = parent; this.aliasesForDescriptors = aliasesForDescriptors; + this.aliasesForExpressions = aliasesForExpressions; } @NotNull public AliasingContext inner(@NotNull DeclarationDescriptor descriptor, @NotNull JsExpression alias) { - return new AliasingContext(this, Collections.singletonMap(descriptor, alias)); + return new AliasingContext(this, Collections.singletonMap(descriptor, alias), null); } @NotNull - public AliasingContext withAliasesForExpressions(@NotNull Map aliasesForExpressions) { - AliasingContext newContext = new AliasingContext(this); - newContext.aliasesForExpressions.putAll(aliasesForExpressions); - return newContext; + public AliasingContext withExpressionsAliased(@NotNull Map aliasesForExpressions) { + return new AliasingContext(this, null, aliasesForExpressions); } @NotNull public AliasingContext withDescriptorsAliased(@NotNull Map aliases) { - return new AliasingContext(this, aliases); + return new AliasingContext(this, aliases, null); } @Nullable @@ -89,13 +93,17 @@ public class AliasingContext { return alias; } + if (parent == null) { + return null; + } + return parent.getAliasForDescriptor(descriptor); } @Nullable public JsName getAliasForExpression(@NotNull JetExpression element) { - JsName alias = aliasesForExpressions.get(element); - return alias != null ? alias : parent.getAliasForExpression(element); + JsName alias = aliasesForExpressions == null ? null : aliasesForExpressions.get(element); + return alias != null || parent == null ? alias : parent.getAliasForExpression(element); } public void registerAlias(@NotNull DeclarationDescriptor descriptor, @NotNull JsExpression alias) { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java index a59539d32d7..9cca63dfdc1 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java @@ -73,6 +73,11 @@ public final class DynamicContext { return Pair.create(var, (JsExpression) new JsNameRef(var.getName())); } + @NotNull + public JsVar createTemporaryVar(@NotNull JsExpression initExpression) { + return new JsVar(currentScope.declareTemporary(), initExpression); + } + @NotNull public JsScope getScope() { return currentScope; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index d1c0cd03f92..10d74fc9cb7 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -121,7 +121,7 @@ public class TranslationContext { @NotNull public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map aliases) { - return new TranslationContext(this, aliasingContext.withAliasesForExpressions(aliases)); + return new TranslationContext(this, aliasingContext.withExpressionsAliased(aliases)); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/dangerous/DangerousTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/dangerous/DangerousTranslator.java index 824069deb83..fdf8a28a3ee 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/dangerous/DangerousTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/dangerous/DangerousTranslator.java @@ -16,17 +16,18 @@ package org.jetbrains.k2js.translate.utils.dangerous; -import com.google.common.collect.Maps; import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.backend.js.ast.JsName; import com.google.dart.compiler.backend.js.ast.JsNode; +import com.google.dart.compiler.backend.js.ast.JsVars; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetExpression; -import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -55,13 +56,15 @@ public final class DangerousTranslator extends AbstractTranslator { @NotNull private Map translateAllExpressionsAndCreateAliasesForThem(@NotNull List expressions) { - Map aliasesForExpressions = Maps.newHashMap(); + Map aliasesForExpressions = new THashMap(expressions.size()); + List vars = new ArrayList(expressions.size()); for (JetExpression expression : expressions) { JsExpression translatedExpression = Translation.translateAsExpression(expression, context()); - TemporaryVariable aliasForExpression = context().declareTemporary(translatedExpression); - context().addStatementToCurrentBlock(aliasForExpression.assignmentExpression().makeStmt()); - aliasesForExpressions.put(expression, aliasForExpression.name()); + JsVars.JsVar aliasForExpression = context().dynamicContext().createTemporaryVar(translatedExpression); + vars.add(aliasForExpression); + aliasesForExpressions.put(expression, aliasForExpression.getName()); } + context().addStatementToCurrentBlock(new JsVars(vars, true)); return aliasesForExpressions; } }