JS backend: Migrate type of alias from JsName to JsExpression
This commit is contained in:
@@ -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()) {
|
||||||
|
|||||||
+4
-5
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user