Slight changes to expression visitor logic.

This commit is contained in:
Pavel V. Talanov
2012-03-21 18:18:11 +04:00
parent 0cd839f044
commit 91f488fdf8
@@ -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;
} }