Added PrimitiveType.NUMBER_TYPES constant. Used it in JVM and JS backends.

This commit is contained in:
Evgeny Gerashchenko
2012-08-08 19:27:48 +04:00
parent 231dda6002
commit 561e2e14d0
3 changed files with 37 additions and 22 deletions
@@ -20,20 +20,24 @@ import com.google.common.collect.ImmutableList;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
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.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.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType; import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name; 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.JetStandardClasses;
import org.jetbrains.jet.lang.types.lang.PrimitiveType; 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.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author yole * @author yole
@@ -49,8 +53,6 @@ public class IntrinsicMethods {
private static final IntrinsicMethod DEC = new Increment(-1); private static final IntrinsicMethod DEC = new Increment(-1);
private static final IntrinsicMethod HASH_CODE = new HashCode(); private static final IntrinsicMethod HASH_CODE = new HashCode();
private static final List<Name> 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<Name> 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_SIZE = new ArraySize();
public static final IntrinsicMethod ARRAY_INDICES = new ArrayIndices(); public static final IntrinsicMethod ARRAY_INDICES = new ArrayIndices();
public static final Equals EQUALS = new Equals(); public static final Equals EQUALS = new Equals();
@@ -83,20 +85,21 @@ public class IntrinsicMethods {
ImmutableList<Name> primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList(); ImmutableList<Name> primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList();
for (Name method : primitiveCastMethods) { for (Name method : primitiveCastMethods) {
declareIntrinsicFunction(Name.identifier("Number"), method, 0, NUMBER_CAST); declareIntrinsicFunction(Name.identifier("Number"), method, 0, NUMBER_CAST);
for (Name type : PRIMITIVE_NUMBER_TYPES) { for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) {
declareIntrinsicFunction(type, method, 0, NUMBER_CAST); declareIntrinsicFunction(type.getTypeName(), method, 0, NUMBER_CAST);
} }
} }
for (Name type : PRIMITIVE_NUMBER_TYPES) { for (PrimitiveType type : PrimitiveType.NUMBER_TYPES) {
declareIntrinsicFunction(type, Name.identifier("plus"), 0, UNARY_PLUS); Name typeName = type.getTypeName();
declareIntrinsicFunction(type, Name.identifier("minus"), 0, UNARY_MINUS); declareIntrinsicFunction(typeName, Name.identifier("plus"), 0, UNARY_PLUS);
declareIntrinsicFunction(type, Name.identifier("inv"), 0, INV); declareIntrinsicFunction(typeName, Name.identifier("minus"), 0, UNARY_MINUS);
declareIntrinsicFunction(type, Name.identifier("rangeTo"), 1, RANGE_TO); declareIntrinsicFunction(typeName, Name.identifier("inv"), 0, INV);
declareIntrinsicFunction(type, Name.identifier("inc"), 0, INC); declareIntrinsicFunction(typeName, Name.identifier("rangeTo"), 1, RANGE_TO);
declareIntrinsicFunction(type, Name.identifier("dec"), 0, DEC); declareIntrinsicFunction(typeName, Name.identifier("inc"), 0, INC);
declareIntrinsicFunction(type, Name.identifier("hashCode"), 0, HASH_CODE); declareIntrinsicFunction(typeName, Name.identifier("dec"), 0, DEC);
declareIntrinsicFunction(type, Name.identifier("equals"), 1, EQUALS); declareIntrinsicFunction(typeName, Name.identifier("hashCode"), 0, HASH_CODE);
declareIntrinsicFunction(typeName, Name.identifier("equals"), 1, EQUALS);
} }
declareBinaryOp(Name.identifier("plus"), Opcodes.IADD); 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("FloatIterator"), Name.identifier("next"), 0, ITERATOR_NEXT);
declareIntrinsicFunction(Name.identifier("DoubleIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); declareIntrinsicFunction(Name.identifier("DoubleIterator"), Name.identifier("next"), 0, ITERATOR_NEXT);
for (Name type : PRIMITIVE_TYPES) { for (PrimitiveType type : PrimitiveType.values()) {
declareIntrinsicFunction(type, Name.identifier("compareTo"), 1, new CompareTo()); declareIntrinsicFunction(type.getTypeName(), Name.identifier("compareTo"), 1, new CompareTo());
} }
// declareIntrinsicFunction("Any", "equals", 1, new Equals()); // declareIntrinsicFunction("Any", "equals", 1, new Equals());
// //
@@ -175,8 +178,8 @@ public class IntrinsicMethods {
private void declareBinaryOp(Name methodName, int opcode) { private void declareBinaryOp(Name methodName, int opcode) {
BinaryOp op = new BinaryOp(opcode); BinaryOp op = new BinaryOp(opcode);
for (Name type : PRIMITIVE_TYPES) { for (PrimitiveType type : PrimitiveType.values()) {
declareIntrinsicFunction(type, methodName, 1, op); declareIntrinsicFunction(type.getTypeName(), methodName, 1, op);
} }
} }
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.types.lang; package org.jetbrains.jet.lang.types.lang;
import com.google.common.collect.ImmutableSet;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.ref.ClassName; import org.jetbrains.jet.lang.types.ref.ClassName;
@@ -34,6 +35,8 @@ public enum PrimitiveType {
LONG("Long"), LONG("Long"),
DOUBLE("Double"), DOUBLE("Double"),
; ;
public static final ImmutableSet<PrimitiveType> NUMBER_TYPES = ImmutableSet.of(CHAR, BYTE, SHORT, INT, FLOAT, LONG, DOUBLE);
private final Name typeName; private final Name typeName;
private final Name arrayTypeName; private final Name arrayTypeName;
@@ -18,9 +18,12 @@ package org.jetbrains.k2js.translate.intrinsic.functions.patterns;
import closurecompiler.internal.com.google.common.collect.Lists; import closurecompiler.internal.com.google.common.collect.Lists;
import com.google.common.base.Predicate; 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.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.jet.lang.types.lang.PrimitiveType;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
@@ -32,7 +35,13 @@ import java.util.List;
public final class NamePredicate implements Predicate<Name> { public final class NamePredicate implements Predicate<Name> {
@NotNull @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<PrimitiveType, String>() {
@Override
public String fun(PrimitiveType type) {
return type.getTypeName().getName();
}
}));
@NotNull @NotNull
private final List<Name> validNames = Lists.newArrayList(); private final List<Name> validNames = Lists.newArrayList();