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 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<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_INDICES = new ArrayIndices();
public static final Equals EQUALS = new Equals();
@@ -83,20 +85,21 @@ public class IntrinsicMethods {
ImmutableList<Name> 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);
}
}
@@ -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<PrimitiveType> NUMBER_TYPES = ImmutableSet.of(CHAR, BYTE, SHORT, INT, FLOAT, LONG, DOUBLE);
private final Name typeName;
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 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<Name> {
@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
private final List<Name> validNames = Lists.newArrayList();