From f329e245ad2079e9497ef97dd1b38fe36c9d566a Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 2 Dec 2013 15:02:13 +0400 Subject: [PATCH] Support IntegerValueTypeConstant in js backend --- .../k2js/translate/expression/ExpressionVisitor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index 18d8b67ca25..962d54acfc7 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -24,11 +24,14 @@ import org.jetbrains.jet.JetNodeTypes; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.VariableDescriptor; +import org.jetbrains.jet.lang.evaluate.EvaluatePackage; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.NullValue; +import org.jetbrains.jet.lang.resolve.constants.NumberValueTypeConstructor; +import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; @@ -83,6 +86,13 @@ public final class ExpressionVisitor extends TranslatorVisitor { } Object value = compileTimeValue.getValue(); + if (value instanceof NumberValueTypeConstructor) { + JetType expectedType = context.bindingContext().get(BindingContext.EXPRESSION_TYPE, expression); + CompileTimeConstant newConstant = + EvaluatePackage.getCompileTimeConstantForNumberType((NumberValueTypeConstructor) value, expectedType); + assert newConstant != null: "NumberValueTypeConstant should always have notnull value " + compileTimeValue; + value = newConstant.getValue(); + } if (value instanceof Integer || value instanceof Short || value instanceof Byte) { return context.program().getNumberLiteral(((Number) value).intValue()); } @@ -101,7 +111,7 @@ public final class ExpressionVisitor extends TranslatorVisitor { return context.program().getStringLiteral(value.toString()); } - throw new AssertionError(message(expression, "Unsupported constant expression")); + throw new AssertionError(message(expression, "Unsupported constant expression: " + expression.getText() + " ")); } @Override