Slight changes to expression visitor logic.
This commit is contained in:
+12
-18
@@ -40,6 +40,7 @@ import org.jetbrains.k2js.translate.utils.mutator.AssignToExpressionMutator;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression;
|
||||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.*;
|
import static org.jetbrains.k2js.translate.utils.BindingUtils.*;
|
||||||
import static org.jetbrains.k2js.translate.utils.JsAstUtils.*;
|
import static org.jetbrains.k2js.translate.utils.JsAstUtils.*;
|
||||||
import static org.jetbrains.k2js.translate.utils.PsiUtils.getObjectDeclarationName;
|
import static org.jetbrains.k2js.translate.utils.PsiUtils.getObjectDeclarationName;
|
||||||
@@ -51,39 +52,33 @@ import static org.jetbrains.k2js.translate.utils.mutator.LastExpressionMutator.m
|
|||||||
*/
|
*/
|
||||||
public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private JsExpression translateAsExpression(@NotNull JetExpression expression,
|
|
||||||
@NotNull TranslationContext context) {
|
|
||||||
return convertToExpression(expression.accept(this, context));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsNode visitConstantExpression(@NotNull JetConstantExpression expression,
|
public JsNode visitConstantExpression(@NotNull JetConstantExpression expression,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
CompileTimeConstant<?> compileTimeValue =
|
CompileTimeConstant<?> compileTimeValue =
|
||||||
context.bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
|
context.bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
|
||||||
assert compileTimeValue != null;
|
assert compileTimeValue != null;
|
||||||
if (compileTimeValue instanceof NullValue) {
|
if (compileTimeValue instanceof NullValue) {
|
||||||
return context.program().getNullLiteral();
|
return context.program().getNullLiteral();
|
||||||
}
|
}
|
||||||
Object value = compileTimeValue.getValue();
|
Object value = compileTimeValue.getValue();
|
||||||
if (value instanceof Integer) {
|
if (value instanceof Integer) {
|
||||||
return context.program().getNumberLiteral((Integer) value);
|
return context.program().getNumberLiteral((Integer)value);
|
||||||
}
|
}
|
||||||
if (value instanceof Boolean) {
|
if (value instanceof Boolean) {
|
||||||
return context.program().getBooleanLiteral((Boolean) value);
|
return context.program().getBooleanLiteral((Boolean)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: test
|
//TODO: test
|
||||||
if (value instanceof Float) {
|
if (value instanceof Float) {
|
||||||
return context.program().getNumberLiteral((Float) value);
|
return context.program().getNumberLiteral((Float)value);
|
||||||
}
|
}
|
||||||
if (value instanceof Double) {
|
if (value instanceof Double) {
|
||||||
return context.program().getNumberLiteral((Double) value);
|
return context.program().getNumberLiteral((Double)value);
|
||||||
}
|
}
|
||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
return context.program().getStringLiteral((String) value);
|
return context.program().getStringLiteral((String)value);
|
||||||
}
|
}
|
||||||
if (value instanceof Character) {
|
if (value instanceof Character) {
|
||||||
return context.program().getStringLiteral(value.toString());
|
return context.program().getStringLiteral(value.toString());
|
||||||
@@ -163,7 +158,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
}
|
}
|
||||||
TemporaryVariable result = context.declareTemporary(context.program().getNullLiteral());
|
TemporaryVariable result = context.declareTemporary(context.program().getNullLiteral());
|
||||||
AssignToExpressionMutator saveResultToTemporaryMutator =
|
AssignToExpressionMutator saveResultToTemporaryMutator =
|
||||||
new AssignToExpressionMutator(result.reference());
|
new AssignToExpressionMutator(result.reference());
|
||||||
JsNode mutatedIfStatement = mutateLastExpression(ifStatement, saveResultToTemporaryMutator);
|
JsNode mutatedIfStatement = mutateLastExpression(ifStatement, saveResultToTemporaryMutator);
|
||||||
JsStatement resultingStatement = convertToStatement(mutatedIfStatement);
|
JsStatement resultingStatement = convertToStatement(mutatedIfStatement);
|
||||||
context.addStatementToCurrentBlock(resultingStatement);
|
context.addStatementToCurrentBlock(resultingStatement);
|
||||||
@@ -221,7 +216,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
if (expression == null) {
|
if (expression == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return translateAsExpression(expression, context);
|
return convertToExpression(expression.accept(this, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
//NOTE: since JsWhile and JsDoWhile do not have an ancestor, cannot avoid duplication here
|
//NOTE: since JsWhile and JsDoWhile do not have an ancestor, cannot avoid duplication here
|
||||||
@@ -268,7 +263,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
assert value instanceof String : "Compile time constant template should be a String constant.";
|
assert value instanceof String : "Compile time constant template should be a String constant.";
|
||||||
String constantString = (String) value;
|
String constantString = (String)value;
|
||||||
return context.program().getStringLiteral(constantString);
|
return context.program().getStringLiteral(constantString);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,7 +279,6 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
public JsNode visitPrefixExpression(@NotNull JetPrefixExpression expression,
|
public JsNode visitPrefixExpression(@NotNull JetPrefixExpression expression,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
return UnaryOperationTranslator.translate(expression, context);
|
return UnaryOperationTranslator.translate(expression, context);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -350,7 +344,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
public JsNode visitThisExpression(@NotNull JetThisExpression expression,
|
public JsNode visitThisExpression(@NotNull JetThisExpression expression,
|
||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
DeclarationDescriptor descriptor =
|
DeclarationDescriptor descriptor =
|
||||||
getDescriptorForReferenceExpression(context.bindingContext(), expression.getInstanceReference());
|
getDescriptorForReferenceExpression(context.bindingContext(), expression.getInstanceReference());
|
||||||
return TranslationUtils.getThisObject(context, descriptor);
|
return TranslationUtils.getThisObject(context, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +375,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
|
|||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
JsArrayLiteral result = new JsArrayLiteral();
|
JsArrayLiteral result = new JsArrayLiteral();
|
||||||
for (JetExpression entry : expression.getEntries()) {
|
for (JetExpression entry : expression.getEntries()) {
|
||||||
result.getExpressions().add(Translation.translateAsExpression(entry, context));
|
result.getExpressions().add(translateAsExpression(entry, context));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user