From b62e5e3ef5786207a5c580a5ee5b93bb670cd701 Mon Sep 17 00:00:00 2001 From: Sergey Mashkov Date: Wed, 4 Dec 2013 17:38:59 +0400 Subject: [PATCH] Add [tailRecursive] annotation to built-ins --- .../frontend/builtins/jet/.kotlin_class_names | Bin 768 -> 772 bytes .../frontend/builtins/jet/.kotlin_name_table | Bin 6156 -> 6180 bytes .../frontend/builtins/jet/.kotlin_package | Bin 291 -> 291 bytes .../builtins/jet/tailRecursive.kotlin_class | 4 +++ .../builtins/jet/volatile.kotlin_class | 4 +-- compiler/testData/builtin-classes.txt | 4 +++ .../jet/lang/types/lang/KotlinBuiltIns.java | 9 ++++++ idea/builtinsSrc/jet/Library.kt | 1 + runtime/src/jet/tailRecursive.java | 27 ++++++++++++++++++ 9 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 compiler/frontend/builtins/jet/tailRecursive.kotlin_class create mode 100644 runtime/src/jet/tailRecursive.java diff --git a/compiler/frontend/builtins/jet/.kotlin_class_names b/compiler/frontend/builtins/jet/.kotlin_class_names index 14c2f9fcff6baa247ce15d8ec8e84773aadddf6c..cc20324b6dbc743147a8f12dfda95686d4052820 100644 GIT binary patch delta 18 YcmZo*YhhzyU|=|~k>w8)kinP^04Iw8)02OWnhX4Qo diff --git a/compiler/frontend/builtins/jet/.kotlin_name_table b/compiler/frontend/builtins/jet/.kotlin_name_table index 66fd80f211487e535d801a8426759d26f89e3fe4..20ce8ec5116d51e749fd8ac04850f4a76854bfc4 100644 GIT binary patch delta 47 zcmeA%SYp7`sg25g&Wy7+{}d2r=j3ANU=VoDB*6dx De|-*a delta 22 ecmZ2t&||>#O>raB7J*/) } +public final annotation class tailRecursive : jet.Annotation { + /*primary*/ public constructor tailRecursive() +} + public final annotation class volatile : jet.Annotation { /*primary*/ public constructor volatile() } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 95e101a2619..dcff67a2730 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -401,6 +401,11 @@ public class KotlinBuiltIns { return getBuiltInClassByName("volatile"); } + @NotNull + public ClassDescriptor getTailRecursiveAnnotationClass() { + return getBuiltInClassByName("tailRecursive"); + } + @NotNull public ClassDescriptor getDeprecatedAnnotation() { return getBuiltInClassByName("deprecated"); @@ -955,6 +960,10 @@ public class KotlinBuiltIns { return containsAnnotation(declarationDescriptor, getDeprecatedAnnotation()); } + public boolean isTailRecursive(@NotNull DeclarationDescriptor declarationDescriptor) { + return containsAnnotation(declarationDescriptor, getTailRecursiveAnnotationClass()); + } + static boolean containsAnnotation(DeclarationDescriptor descriptor, ClassDescriptor annotationClass) { List annotations = descriptor.getOriginal().getAnnotations(); if (annotations != null) { diff --git a/idea/builtinsSrc/jet/Library.kt b/idea/builtinsSrc/jet/Library.kt index 0f22c9ea6b8..391fb2b24a8 100644 --- a/idea/builtinsSrc/jet/Library.kt +++ b/idea/builtinsSrc/jet/Library.kt @@ -7,6 +7,7 @@ public annotation class atomic : Annotation public annotation class data : Annotation public annotation class deprecated(value: String) : Annotation public annotation class suppress(vararg names: String) +public annotation class tailRecursive : Annotation public annotation class noinline public annotation class inline(public val strategy: InlineStrategy = InlineStrategy.AS_FUNCTION) diff --git a/runtime/src/jet/tailRecursive.java b/runtime/src/jet/tailRecursive.java new file mode 100644 index 00000000000..4bd8b400f7e --- /dev/null +++ b/runtime/src/jet/tailRecursive.java @@ -0,0 +1,27 @@ +/* + * 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 jet; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.METHOD}) +public @interface tailRecursive { +}