From 145050b3d13fdbf817026417d4a7be815ba983da Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Mon, 1 Sep 2014 18:50:28 +0400 Subject: [PATCH] JS backend: simplify conversion to int --- .../functions/factories/NumberConversionFIF.java | 11 ++--------- .../factories/PrimitiveBinaryOperationFIF.java | 4 ++-- .../jetbrains/k2js/translate/utils/JsAstUtils.java | 5 +++++ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java index a4a6d7e6306..7b55dea6d48 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java @@ -17,24 +17,20 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; import com.google.common.collect.Sets; -import com.google.dart.compiler.backend.js.ast.JsBinaryOperation; -import com.google.dart.compiler.backend.js.ast.JsBinaryOperator; import com.google.dart.compiler.backend.js.ast.JsExpression; -import com.google.dart.compiler.backend.js.ast.JsNameRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; +import org.jetbrains.k2js.translate.utils.JsAstUtils; import java.util.List; import java.util.Set; import static org.jetbrains.jet.lang.types.expressions.OperatorConventions.*; import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.pattern; -import static org.jetbrains.k2js.translate.utils.JsAstUtils.assignment; -import static org.jetbrains.k2js.translate.utils.JsAstUtils.subtract; public final class NumberConversionFIF extends CompositeFIF { @NotNull @@ -81,10 +77,7 @@ public final class NumberConversionFIF extends CompositeFIF { @NotNull TranslationContext context) { assert receiver != null; assert arguments.isEmpty(); - JsNameRef toConvertReference = context.declareTemporary(null).reference(); - JsBinaryOperation fractional = - new JsBinaryOperation(JsBinaryOperator.MOD, toConvertReference, context.program().getNumberLiteral(1)); - return subtract(assignment(toConvertReference, receiver), fractional); + return JsAstUtils.toInt32(receiver, context); } }; @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java index 0b728cc253a..dd8eeb72853 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java @@ -33,6 +33,7 @@ import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import org.jetbrains.k2js.translate.operation.OperatorTable; +import org.jetbrains.k2js.translate.utils.JsAstUtils; import java.util.List; @@ -71,8 +72,7 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory { assert receiver != null; assert arguments.size() == 1; JsBinaryOperation div = new JsBinaryOperation(JsBinaryOperator.DIV, receiver, arguments.get(0)); - JsBinaryOperation toInt32 = new JsBinaryOperation(JsBinaryOperator.BIT_OR, div, context.program().getNumberLiteral(0)); - return toInt32; + return JsAstUtils.toInt32(div, context); } }; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsAstUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsAstUtils.java index 60a2a196b7b..a6a64f4bbaf 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsAstUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/JsAstUtils.java @@ -117,6 +117,11 @@ public final class JsAstUtils { return expression instanceof JsEmptyExpression; } + @NotNull + public static JsExpression toInt32(@NotNull JsExpression expression, @NotNull TranslationContext context) { + return new JsBinaryOperation(JsBinaryOperator.BIT_OR, expression, context.program().getNumberLiteral(0)); + } + @NotNull public static JsPrefixOperation negated(@NotNull JsExpression expression) { return new JsPrefixOperation(JsUnaryOperator.NOT, expression);