JS backend: simplify conversion to int
This commit is contained in:
+2
-9
@@ -17,24 +17,20 @@
|
|||||||
package org.jetbrains.k2js.translate.intrinsic.functions.factories;
|
package org.jetbrains.k2js.translate.intrinsic.functions.factories;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
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.JsExpression;
|
||||||
import com.google.dart.compiler.backend.js.ast.JsNameRef;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||||
import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic;
|
import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic;
|
||||||
import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate;
|
import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate;
|
||||||
|
import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.types.expressions.OperatorConventions.*;
|
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.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 {
|
public final class NumberConversionFIF extends CompositeFIF {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -81,10 +77,7 @@ public final class NumberConversionFIF extends CompositeFIF {
|
|||||||
@NotNull TranslationContext context) {
|
@NotNull TranslationContext context) {
|
||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.isEmpty();
|
assert arguments.isEmpty();
|
||||||
JsNameRef toConvertReference = context.declareTemporary(null).reference();
|
return JsAstUtils.toInt32(receiver, context);
|
||||||
JsBinaryOperation fractional =
|
|
||||||
new JsBinaryOperation(JsBinaryOperator.MOD, toConvertReference, context.program().getNumberLiteral(1));
|
|
||||||
return subtract(assignment(toConvertReference, receiver), fractional);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+2
-2
@@ -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.DescriptorPredicate;
|
||||||
import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate;
|
import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate;
|
||||||
import org.jetbrains.k2js.translate.operation.OperatorTable;
|
import org.jetbrains.k2js.translate.operation.OperatorTable;
|
||||||
|
import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -71,8 +72,7 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory {
|
|||||||
assert receiver != null;
|
assert receiver != null;
|
||||||
assert arguments.size() == 1;
|
assert arguments.size() == 1;
|
||||||
JsBinaryOperation div = new JsBinaryOperation(JsBinaryOperator.DIV, receiver, arguments.get(0));
|
JsBinaryOperation div = new JsBinaryOperation(JsBinaryOperator.DIV, receiver, arguments.get(0));
|
||||||
JsBinaryOperation toInt32 = new JsBinaryOperation(JsBinaryOperator.BIT_OR, div, context.program().getNumberLiteral(0));
|
return JsAstUtils.toInt32(div, context);
|
||||||
return toInt32;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,11 @@ public final class JsAstUtils {
|
|||||||
return expression instanceof JsEmptyExpression;
|
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
|
@NotNull
|
||||||
public static JsPrefixOperation negated(@NotNull JsExpression expression) {
|
public static JsPrefixOperation negated(@NotNull JsExpression expression) {
|
||||||
return new JsPrefixOperation(JsUnaryOperator.NOT, expression);
|
return new JsPrefixOperation(JsUnaryOperator.NOT, expression);
|
||||||
|
|||||||
Reference in New Issue
Block a user