JS backend: Migrate type of alias from JsName to JsExpression

This commit is contained in:
Erokhin Stanislav
2013-12-26 21:21:09 +04:00
parent ae6fdcc673
commit 5c9bda0f6e
4 changed files with 13 additions and 15 deletions
@@ -17,7 +17,6 @@
package org.jetbrains.k2js.translate.context; package org.jetbrains.k2js.translate.context;
import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsName;
import gnu.trove.THashMap; import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -35,7 +34,7 @@ public class AliasingContext {
} }
@Override @Override
public JsName getAliasForExpression(@NotNull JetExpression element) { public JsExpression getAliasForExpression(@NotNull JetExpression element) {
return null; return null;
} }
@@ -53,7 +52,7 @@ public class AliasingContext {
private Map<DeclarationDescriptor, JsExpression> aliasesForDescriptors; private Map<DeclarationDescriptor, JsExpression> aliasesForDescriptors;
@Nullable @Nullable
private final Map<JetExpression, JsName> aliasesForExpressions; private final Map<JetExpression, JsExpression> aliasesForExpressions;
@Nullable @Nullable
private final AliasingContext parent; private final AliasingContext parent;
@@ -65,7 +64,7 @@ public class AliasingContext {
private AliasingContext( private AliasingContext(
@Nullable AliasingContext parent, @Nullable AliasingContext parent,
@Nullable Map<DeclarationDescriptor, JsExpression> aliasesForDescriptors, @Nullable Map<DeclarationDescriptor, JsExpression> aliasesForDescriptors,
@Nullable Map<JetExpression, JsName> aliasesForExpressions @Nullable Map<JetExpression, JsExpression> aliasesForExpressions
) { ) {
this.parent = parent; this.parent = parent;
this.aliasesForDescriptors = aliasesForDescriptors; this.aliasesForDescriptors = aliasesForDescriptors;
@@ -92,7 +91,7 @@ public class AliasingContext {
} }
@NotNull @NotNull
public AliasingContext withExpressionsAliased(@NotNull Map<JetExpression, JsName> aliasesForExpressions) { public AliasingContext withExpressionsAliased(@NotNull Map<JetExpression, JsExpression> aliasesForExpressions) {
return new AliasingContext(this, null, aliasesForExpressions); return new AliasingContext(this, null, aliasesForExpressions);
} }
@@ -115,8 +114,8 @@ public class AliasingContext {
} }
@Nullable @Nullable
public JsName getAliasForExpression(@NotNull JetExpression element) { public JsExpression getAliasForExpression(@NotNull JetExpression element) {
JsName alias = aliasesForExpressions == null ? null : aliasesForExpressions.get(element); JsExpression alias = aliasesForExpressions == null ? null : aliasesForExpressions.get(element);
return alias != null || parent == null ? alias : parent.getAliasForExpression(element); return alias != null || parent == null ? alias : parent.getAliasForExpression(element);
} }
@@ -134,7 +134,7 @@ public class TranslationContext {
} }
@NotNull @NotNull
public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsName> aliases) { public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsExpression> aliases) {
return new TranslationContext(this, aliasingContext.withExpressionsAliased(aliases)); return new TranslationContext(this, aliasingContext.withExpressionsAliased(aliases));
} }
@@ -76,9 +76,9 @@ public final class Translation {
@NotNull @NotNull
public static JsNode translateExpression(@NotNull JetExpression expression, @NotNull TranslationContext context) { public static JsNode translateExpression(@NotNull JetExpression expression, @NotNull TranslationContext context) {
JsName aliasForExpression = context.aliasingContext().getAliasForExpression(expression); JsExpression aliasForExpression = context.aliasingContext().getAliasForExpression(expression);
if (aliasForExpression != null) { if (aliasForExpression != null) {
return aliasForExpression.makeRef(); return aliasForExpression;
} }
DangerousData data = collect(expression, context); DangerousData data = collect(expression, context);
if (data.shouldBeTranslated()) { if (data.shouldBeTranslated()) {
@@ -17,7 +17,6 @@
package org.jetbrains.k2js.translate.utils.dangerous; package org.jetbrains.k2js.translate.utils.dangerous;
import com.google.dart.compiler.backend.js.ast.JsExpression; 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.JsNode;
import com.google.dart.compiler.backend.js.ast.JsVars; import com.google.dart.compiler.backend.js.ast.JsVars;
import gnu.trove.THashMap; import gnu.trove.THashMap;
@@ -48,21 +47,21 @@ public final class DangerousTranslator extends AbstractTranslator {
@NotNull @NotNull
private JsNode translate() { private JsNode translate() {
Map<JetExpression, JsName> aliasesForExpressions = Map<JetExpression, JsExpression> aliasesForExpressions =
translateAllExpressionsAndCreateAliasesForThem(data.getNodesToBeGeneratedBefore()); translateAllExpressionsAndCreateAliasesForThem(data.getNodesToBeGeneratedBefore());
TranslationContext contextWithAliases = context().innerContextWithAliasesForExpressions(aliasesForExpressions); TranslationContext contextWithAliases = context().innerContextWithAliasesForExpressions(aliasesForExpressions);
return Translation.doTranslateExpression(data.getRootNode(), contextWithAliases); return Translation.doTranslateExpression(data.getRootNode(), contextWithAliases);
} }
@NotNull @NotNull
private Map<JetExpression, JsName> translateAllExpressionsAndCreateAliasesForThem(@NotNull List<JetExpression> expressions) { private Map<JetExpression, JsExpression> translateAllExpressionsAndCreateAliasesForThem(@NotNull List<JetExpression> expressions) {
Map<JetExpression, JsName> aliasesForExpressions = new THashMap<JetExpression, JsName>(expressions.size()); Map<JetExpression, JsExpression> aliasesForExpressions = new THashMap<JetExpression, JsExpression>(expressions.size());
List<JsVars.JsVar> vars = new ArrayList<JsVars.JsVar>(expressions.size()); List<JsVars.JsVar> vars = new ArrayList<JsVars.JsVar>(expressions.size());
for (JetExpression expression : expressions) { for (JetExpression expression : expressions) {
JsExpression translatedExpression = Translation.translateAsExpression(expression, context()); JsExpression translatedExpression = Translation.translateAsExpression(expression, context());
JsVars.JsVar aliasForExpression = context().dynamicContext().createTemporaryVar(translatedExpression); JsVars.JsVar aliasForExpression = context().dynamicContext().createTemporaryVar(translatedExpression);
vars.add(aliasForExpression); vars.add(aliasForExpression);
aliasesForExpressions.put(expression, aliasForExpression.getName()); aliasesForExpressions.put(expression, aliasForExpression.getName().makeRef());
} }
context().addStatementToCurrentBlock(new JsVars(vars, true)); context().addStatementToCurrentBlock(new JsVars(vars, true));
return aliasesForExpressions; return aliasesForExpressions;