From 289290794764061d654cce5bac03c8b5ef45b159 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 9 Dec 2013 23:05:49 +0400 Subject: [PATCH] Delete Enum.name()/ordinal() JVM intrinsics Bytecode is the same if they're generated as is from descriptors + Some minor code style improvements --- .../jet/codegen/intrinsics/EnumName.java | 48 ------------------- .../jet/codegen/intrinsics/EnumOrdinal.java | 48 ------------------- .../codegen/intrinsics/IntrinsicMethods.java | 40 +++++----------- 3 files changed, 11 insertions(+), 125 deletions(-) delete mode 100644 compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumName.java delete mode 100644 compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumOrdinal.java diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumName.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumName.java deleted file mode 100644 index 02a7dcd0fae..00000000000 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumName.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.codegen.intrinsics; - -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.asm4.Type; -import org.jetbrains.asm4.commons.InstructionAdapter; -import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; -import org.jetbrains.jet.codegen.ExpressionCodegen; -import org.jetbrains.jet.codegen.StackValue; -import org.jetbrains.jet.codegen.state.GenerationState; -import org.jetbrains.jet.lang.psi.JetExpression; - -import java.util.List; - -public class EnumName implements IntrinsicMethod { - @Override - public StackValue generate( - ExpressionCodegen codegen, - InstructionAdapter v, - @NotNull Type returnType, - @Nullable PsiElement element, - @Nullable List arguments, - StackValue receiver, - @NotNull GenerationState state - ) { - receiver.put(AsmTypeConstants.OBJECT_TYPE, v); - v.invokevirtual("java/lang/Enum", "name", "()Ljava/lang/String;"); - StackValue.onStack(AsmTypeConstants.JAVA_STRING_TYPE).put(returnType, v); - return StackValue.onStack(returnType); - } -} diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumOrdinal.java b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumOrdinal.java deleted file mode 100644 index dd67454e3ef..00000000000 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/EnumOrdinal.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.codegen.intrinsics; - -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.asm4.Type; -import org.jetbrains.asm4.commons.InstructionAdapter; -import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; -import org.jetbrains.jet.codegen.ExpressionCodegen; -import org.jetbrains.jet.codegen.StackValue; -import org.jetbrains.jet.codegen.state.GenerationState; -import org.jetbrains.jet.lang.psi.JetExpression; - -import java.util.List; - -public class EnumOrdinal implements IntrinsicMethod { - @Override - public StackValue generate( - ExpressionCodegen codegen, - InstructionAdapter v, - @NotNull Type returnType, - @Nullable PsiElement element, - @Nullable List arguments, - StackValue receiver, - @NotNull GenerationState state - ) { - receiver.put(AsmTypeConstants.OBJECT_TYPE, v); - v.invokevirtual("java/lang/Enum", "ordinal", "()I"); - StackValue.onStack(Type.INT_TYPE).put(returnType, v); - return StackValue.onStack(returnType); - } -} 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 0071bb79484..da8f27686bb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java @@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.types.lang.PrimitiveType; import javax.annotation.PostConstruct; import java.util.HashMap; -import java.util.List; import java.util.Map; import static org.jetbrains.asm4.Opcodes.*; @@ -123,9 +122,6 @@ public class IntrinsicMethods { declareIntrinsicFunction(Name.identifier("String"), Name.identifier("get"), 1, new StringGetChar()); FqName builtInsPackageFqName = KotlinBuiltIns.getInstance().getBuiltInsPackageFqName(); - intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("name"), 0, new EnumName()); - intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("ordinal"), 0, new EnumOrdinal()); - intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("toString"), 0, TO_STRING); intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("equals"), 1, EQUALS); intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("identityEquals"), 1, IDENTITY_EQUALS); @@ -134,21 +130,11 @@ public class IntrinsicMethods { intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("synchronized"), 2, new StupidSync()); intrinsicsMap.registerIntrinsic(builtInsPackageFqName, Name.identifier("iterator"), 0, new IteratorIterator()); - - declareIntrinsicFunction(Name.identifier("ByteIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - declareIntrinsicFunction(Name.identifier("ShortIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - declareIntrinsicFunction(Name.identifier("IntIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - declareIntrinsicFunction(Name.identifier("LongIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - declareIntrinsicFunction(Name.identifier("CharIterator"), Name.identifier("next"), 0, ITERATOR_NEXT); - declareIntrinsicFunction(Name.identifier("BooleanIterator"), 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); - for (PrimitiveType type : PrimitiveType.values()) { declareIntrinsicFunction(type.getTypeName(), Name.identifier("compareTo"), 1, new CompareTo()); + declareIntrinsicFunction(Name.identifier(type.getTypeName() + "Iterator"), Name.identifier("next"), 0, ITERATOR_NEXT); } - // declareIntrinsicFunction("Any", "equals", 1, new Equals()); - // + declareIntrinsicProperty(Name.identifier("CharSequence"), Name.identifier("length"), new StringLength()); declareIntrinsicProperty(Name.identifier("String"), Name.identifier("length"), new StringLength()); @@ -242,20 +228,16 @@ public class IntrinsicMethods { } } - List annotations = descriptor.getAnnotations(); - if (annotations != null) { - for (AnnotationDescriptor annotation : annotations) { - ClassifierDescriptor classifierDescriptor = annotation.getType().getConstructor().getDeclarationDescriptor(); - assert classifierDescriptor != null; - if ("Intrinsic".equals(classifierDescriptor.getName().asString())) { - String value = (String) annotation.getAllValueArguments().values().iterator().next().getValue(); - intrinsicMethod = namedMethods.get(value); - if (intrinsicMethod != null) { - break; - } - } + for (AnnotationDescriptor annotation : descriptor.getAnnotations()) { + ClassifierDescriptor classifierDescriptor = annotation.getType().getConstructor().getDeclarationDescriptor(); + assert classifierDescriptor != null; + if ("Intrinsic".equals(classifierDescriptor.getName().asString())) { + String value = (String) annotation.getAllValueArguments().values().iterator().next().getValue(); + IntrinsicMethod result = namedMethods.get(value); + if (result != null) return result; } } - return intrinsicMethod; + + return null; } }