From 561e2e14d0e1f33ed28ab8e088909fa0f39758fa Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 8 Aug 2012 19:27:48 +0400 Subject: [PATCH] Added PrimitiveType.NUMBER_TYPES constant. Used it in JVM and JS backends. --- .../codegen/intrinsics/IntrinsicMethods.java | 45 ++++++++++--------- .../jet/lang/types/lang/PrimitiveType.java | 3 ++ .../functions/patterns/NamePredicate.java | 11 ++++- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java index e3e1d3807d1..9602583de9a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java @@ -20,20 +20,24 @@ import com.google.common.collect.ImmutableList; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.asm4.Opcodes; +import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.PrimitiveType; -import org.jetbrains.jet.lang.types.expressions.OperatorConventions; -import org.jetbrains.asm4.Opcodes; import javax.annotation.PostConstruct; import javax.inject.Inject; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author yole @@ -49,8 +53,6 @@ public class IntrinsicMethods { private static final IntrinsicMethod DEC = new Increment(-1); private static final IntrinsicMethod HASH_CODE = new HashCode(); - private static final List PRIMITIVE_TYPES = ImmutableList.of(Name.identifier("Boolean"), Name.identifier("Byte"), Name.identifier("Char"), Name.identifier("Short"), Name.identifier("Int"), Name.identifier("Float"), Name.identifier("Long"), Name.identifier("Double")); - private static final List PRIMITIVE_NUMBER_TYPES = ImmutableList.of(Name.identifier("Byte"), Name.identifier("Char"), Name.identifier("Short"), Name.identifier("Int"), Name.identifier("Float"), Name.identifier("Long"), Name.identifier("Double")); public static final IntrinsicMethod ARRAY_SIZE = new ArraySize(); public static final IntrinsicMethod ARRAY_INDICES = new ArrayIndices(); public static final Equals EQUALS = new Equals(); @@ -83,20 +85,21 @@ public class IntrinsicMethods { ImmutableList primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList(); for (Name method : primitiveCastMethods) { declareIntrinsicFunction(Name.identifier("Number"), method, 0, NUMBER_CAST); - for (Name type : PRIMITIVE_NUMBER_TYPES) { - declareIntrinsicFunction(type, method, 0, NUMBER_CAST); + for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) { + declareIntrinsicFunction(type.getTypeName(), method, 0, NUMBER_CAST); } } - for (Name type : PRIMITIVE_NUMBER_TYPES) { - declareIntrinsicFunction(type, Name.identifier("plus"), 0, UNARY_PLUS); - declareIntrinsicFunction(type, Name.identifier("minus"), 0, UNARY_MINUS); - declareIntrinsicFunction(type, Name.identifier("inv"), 0, INV); - declareIntrinsicFunction(type, Name.identifier("rangeTo"), 1, RANGE_TO); - declareIntrinsicFunction(type, Name.identifier("inc"), 0, INC); - declareIntrinsicFunction(type, Name.identifier("dec"), 0, DEC); - declareIntrinsicFunction(type, Name.identifier("hashCode"), 0, HASH_CODE); - declareIntrinsicFunction(type, Name.identifier("equals"), 1, EQUALS); + for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) { + Name typeName = type.getTypeName(); + declareIntrinsicFunction(typeName, Name.identifier("plus"), 0, UNARY_PLUS); + declareIntrinsicFunction(typeName, Name.identifier("minus"), 0, UNARY_MINUS); + declareIntrinsicFunction(typeName, Name.identifier("inv"), 0, INV); + declareIntrinsicFunction(typeName, Name.identifier("rangeTo"), 1, RANGE_TO); + declareIntrinsicFunction(typeName, Name.identifier("inc"), 0, INC); + declareIntrinsicFunction(typeName, Name.identifier("dec"), 0, DEC); + declareIntrinsicFunction(typeName, Name.identifier("hashCode"), 0, HASH_CODE); + declareIntrinsicFunction(typeName, Name.identifier("equals"), 1, EQUALS); } declareBinaryOp(Name.identifier("plus"), Opcodes.IADD); @@ -136,8 +139,8 @@ public class IntrinsicMethods { declareIntrinsicFunction(Name.identifier("FloatIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); declareIntrinsicFunction(Name.identifier("DoubleIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - for (Name type : PRIMITIVE_TYPES) { - declareIntrinsicFunction(type, Name.identifier("compareTo"), 1, new CompareTo()); + for (PrimitiveType type : PrimitiveType.values()) { + declareIntrinsicFunction(type.getTypeName(), Name.identifier("compareTo"), 1, new CompareTo()); } // declareIntrinsicFunction("Any", "equals", 1, new Equals()); // @@ -175,8 +178,8 @@ public class IntrinsicMethods { private void declareBinaryOp(Name methodName, int opcode) { BinaryOp op = new BinaryOp(opcode); - for (Name type : PRIMITIVE_TYPES) { - declareIntrinsicFunction(type, methodName, 1, op); + for (PrimitiveType type : PrimitiveType.values()) { + declareIntrinsicFunction(type.getTypeName(), methodName, 1, op); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/PrimitiveType.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/PrimitiveType.java index ac08c00fc00..db8c9bc7875 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/PrimitiveType.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/PrimitiveType.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.lang.types.lang; +import com.google.common.collect.ImmutableSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.ref.ClassName; @@ -34,6 +35,8 @@ public enum PrimitiveType { LONG("Long"), DOUBLE("Double"), ; + + public static final ImmutableSet NUMBER_TYPES = ImmutableSet.of(CHAR, BYTE, SHORT, INT, FLOAT, LONG, DOUBLE); private final Name typeName; private final Name arrayTypeName; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java index 3b9aab055a9..ddca1cf9bd6 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java @@ -18,9 +18,12 @@ package org.jetbrains.k2js.translate.intrinsic.functions.patterns; import closurecompiler.internal.com.google.common.collect.Lists; import com.google.common.base.Predicate; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.Name; +import org.jetbrains.jet.lang.types.lang.PrimitiveType; import java.util.Arrays; import java.util.Collection; @@ -32,7 +35,13 @@ import java.util.List; public final class NamePredicate implements Predicate { @NotNull - public static final NamePredicate PRIMITIVE_NUMBERS = new NamePredicate("Int", "Double", "Float", "Long", "Short", "Byte"); + public static final NamePredicate PRIMITIVE_NUMBERS = new NamePredicate( + ContainerUtil.map(PrimitiveType.NUMBER_TYPES, new Function() { + @Override + public String fun(PrimitiveType type) { + return type.getTypeName().getName(); + } + })); @NotNull private final List validNames = Lists.newArrayList();