Make Array.indices extension property, move to stdlib

This is not something that needs to be intrinsified. Note that compiler
optimizations are still possible and the fact whether 'indices' is a member or
an extension is irrelevant to the optimizer
This commit is contained in:
Alexander Udalov
2014-11-14 20:56:27 +03:00
parent 36a9a99b4f
commit 93696ff9bd
22 changed files with 234 additions and 294 deletions
@@ -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.jet.codegen.ExpressionCodegen;
import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.List;
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.INT_RANGE_TYPE;
import static org.jetbrains.org.objectweb.asm.Type.INT_TYPE;
public class ArrayIndices extends IntrinsicMethod {
@NotNull
@Override
public Type generateImpl(
@NotNull ExpressionCodegen codegen,
@NotNull InstructionAdapter v,
@NotNull Type returnType,
PsiElement element,
List<JetExpression> arguments,
StackValue receiver
) {
receiver.put(receiver.type, v);
v.arraylength();
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "arrayIndices", Type.getMethodDescriptor(INT_RANGE_TYPE, INT_TYPE), false);
return INT_RANGE_TYPE;
}
}
@@ -48,7 +48,6 @@ public class IntrinsicMethods {
private static final IntrinsicMethod HASH_CODE = new HashCode();
private static final IntrinsicMethod ARRAY_SIZE = new ArraySize();
private static final IntrinsicMethod ARRAY_INDICES = new ArrayIndices();
private static final Equals EQUALS = new Equals();
private static final IdentityEquals IDENTITY_EQUALS = new IdentityEquals();
private static final IteratorNext ITERATOR_NEXT = new IteratorNext();
@@ -143,7 +142,6 @@ public class IntrinsicMethods {
}
declareIntrinsicFunction("Array", "size", 0, ARRAY_SIZE);
declareIntrinsicProperty("Array", "indices", ARRAY_INDICES);
declareIntrinsicFunction("Array", "set", 2, ARRAY_SET);
declareIntrinsicFunction("Array", "get", 1, ARRAY_GET);
declareIntrinsicFunction("Array", "clone", 0, CLONE);
@@ -153,7 +151,6 @@ public class IntrinsicMethods {
private void declareArrayMethodsForPrimitive(@NotNull JvmPrimitiveType jvmPrimitiveType) {
String arrayTypeName = jvmPrimitiveType.getPrimitiveType().getArrayTypeName().asString();
declareIntrinsicFunction(arrayTypeName, "size", 0, ARRAY_SIZE);
declareIntrinsicProperty(arrayTypeName, "indices", ARRAY_INDICES);
declareIntrinsicFunction(arrayTypeName, "set", 2, ARRAY_SET);
declareIntrinsicFunction(arrayTypeName, "get", 1, ARRAY_GET);
declareIntrinsicFunction(arrayTypeName, "clone", 0, CLONE);
@@ -33,7 +33,6 @@ public class AsmTypeConstants {
public static final Type UNIT_TYPE = Type.getObjectType(BUILT_INS_PACKAGE_FQ_NAME + "/Unit");
public static final Type FUNCTION1_TYPE = Type.getObjectType(BUILT_INS_PACKAGE_FQ_NAME + "/Function1");
public static final Type INT_RANGE_TYPE = Type.getObjectType(BUILT_INS_PACKAGE_FQ_NAME + "/IntRange");
public static final Type PROPERTY_METADATA_TYPE = Type.getObjectType(BUILT_INS_PACKAGE_FQ_NAME + "/PropertyMetadata");
public static final Type PROPERTY_METADATA_IMPL_TYPE = Type.getObjectType(BUILT_INS_PACKAGE_FQ_NAME + "/PropertyMetadataImpl");
-18
View File
@@ -15,8 +15,6 @@ public open class Any {
public final class Array</*0*/ reified T> : kotlin.Cloneable {
/*primary*/ public constructor Array</*0*/ reified T>(/*0*/ size: kotlin.Int, /*1*/ init: kotlin.Function1<kotlin.Int, T>)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.Array<T>
public final fun get(/*0*/ index: kotlin.Int): T
public final fun iterator(): kotlin.Iterator<T>
@@ -35,8 +33,6 @@ public final class Boolean : kotlin.Comparable<kotlin.Boolean> {
public final class BooleanArray : kotlin.Cloneable {
/*primary*/ public constructor BooleanArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.BooleanArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Boolean
public final fun iterator(): kotlin.BooleanIterator
@@ -117,8 +113,6 @@ public final class Byte : kotlin.Number, kotlin.Comparable<kotlin.Byte> {
public final class ByteArray : kotlin.Cloneable {
/*primary*/ public constructor ByteArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.ByteArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Byte
public final fun iterator(): kotlin.ByteIterator
@@ -237,8 +231,6 @@ public final class Char : kotlin.Comparable<kotlin.Char> {
public final class CharArray : kotlin.Cloneable {
/*primary*/ public constructor CharArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.CharArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Char
public final fun iterator(): kotlin.CharIterator
@@ -388,8 +380,6 @@ public final class Double : kotlin.Number, kotlin.Comparable<kotlin.Double> {
public final class DoubleArray : kotlin.Cloneable {
/*primary*/ public constructor DoubleArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.DoubleArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Double
public final fun iterator(): kotlin.DoubleIterator
@@ -614,8 +604,6 @@ public final class Float : kotlin.Number, kotlin.Comparable<kotlin.Float> {
public final class FloatArray : kotlin.Cloneable {
/*primary*/ public constructor FloatArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.FloatArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Float
public final fun iterator(): kotlin.FloatIterator
@@ -918,8 +906,6 @@ public final class Int : kotlin.Number, kotlin.Comparable<kotlin.Int> {
public final class IntArray : kotlin.Cloneable {
/*primary*/ public constructor IntArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.IntArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Int
public final fun iterator(): kotlin.IntIterator
@@ -1087,8 +1073,6 @@ public final class Long : kotlin.Number, kotlin.Comparable<kotlin.Long> {
public final class LongArray : kotlin.Cloneable {
/*primary*/ public constructor LongArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.LongArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Long
public final fun iterator(): kotlin.LongIterator
@@ -1381,8 +1365,6 @@ public final class Short : kotlin.Number, kotlin.Comparable<kotlin.Short> {
public final class ShortArray : kotlin.Cloneable {
/*primary*/ public constructor ShortArray(/*0*/ size: kotlin.Int)
public final val indices: kotlin.IntRange
public final fun <get-indices>(): kotlin.IntRange
public open override /*1*/ fun clone(): kotlin.ShortArray
public final fun get(/*0*/ index: kotlin.Int): kotlin.Short
public final fun iterator(): kotlin.ShortIterator
@@ -5,55 +5,47 @@ fun foo(a: Any): Int {
a.get(0)
a.set(0, 1)
a.iterator()
a.indices
return a.size()
}
if (a is ShortArray) {
a.get(0)
a.set(0, 1)
a.iterator()
a.indices
return a.size()
}
if (a is ByteArray) {
a.get(0)
a.set(0, 1)
a.iterator()
a.indices
return a.size()
}
if (a is FloatArray) {
a.get(0)
a.set(0, 1.toFloat())
a.iterator()
a.indices
return a.size()
}
if (a is DoubleArray) {
a.get(0)
a.set(0, 1.0)
a.iterator()
a.indices
return a.size()
}
if (a is BooleanArray) {
a.get(0)
a.set(0, false)
a.iterator()
a.indices
return a.size()
}
if (a is CharArray) {
a.get(0)
a.set(0, 'a')
a.iterator()
a.indices
return a.size()
}
if (a is Array<*>) {
if (a.size() > 0) a.get(0)
a.iterator()
a.indices
return a.size()
}
@@ -3,7 +3,7 @@ package whats.the.difference
import java.util.HashSet
fun iarray(vararg a : Int) = a // BUG
val IntArray.indices: IntRange get() = IntRange(0, lastIndex())
fun IntArray.lastIndex() = size() - 1
fun box() : String {
@@ -19,3 +19,4 @@ fun main() {
fun <T> Array<T>.lastIndex() = size() - 1
val <T> Array<T>.lastIndex : Int get() = size() - 1
val <T> Array<T>.indices : IntRange get() = IntRange(0, lastIndex)
@@ -129,28 +129,28 @@ LazyJavaClassifierType@101['E'] {
arguments = ArrayList@102[empty]
classifier = JavaTypeParameterImpl@103['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@104['E'] {
arguments = ArrayList@105[empty]
classifier = JavaTypeParameterImpl@106['E']
LazyJavaClassifierType@105['E'] {
arguments = ArrayList@106[empty]
classifier = JavaTypeParameterImpl@107['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@107
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@108['E'] {
arguments = ArrayList@109[empty]
classifier = JavaTypeParameterImpl@110['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@112['E'] {
arguments = ArrayList@113[empty]
classifier = JavaTypeParameterImpl@114['E']
LazyJavaClassifierType@111['E'] {
arguments = ArrayList@112[empty]
classifier = JavaTypeParameterImpl@113['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
typeConstructor = AbstractLazyTypeParameterDescriptor$1@114
}
LazyJavaClassifierType@115['E'] {
@@ -164,7 +164,7 @@ LazyJavaClassifierType@118['E'] {
arguments = ArrayList@119[empty]
classifier = JavaTypeParameterImpl@120['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@121['E'] {
@@ -178,110 +178,110 @@ LazyJavaClassifierType@124['E'] {
arguments = ArrayList@125[empty]
classifier = JavaTypeParameterImpl@126['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@107
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@127['E'] {
arguments = ArrayList@128[empty]
classifier = JavaTypeParameterImpl@129['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@114
}
LazyJavaClassifierType@130['E'] {
arguments = ArrayList@131[empty]
classifier = JavaTypeParameterImpl@132['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@133['E'] {
arguments = ArrayList@134[empty]
classifier = JavaTypeParameterImpl@135['E']
nullable = 'false': Boolean@85
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@136['E'] {
arguments = ArrayList@137[empty]
classifier = JavaTypeParameterImpl@126['E']
classifier = JavaTypeParameterImpl@103['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@107
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@138['E'] {
arguments = ArrayList@139[empty]
classifier = JavaTypeParameterImpl@117['E']
classifier = JavaTypeParameterImpl@110['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@140['E'] {
arguments = ArrayList@141[empty]
classifier = JavaTypeParameterImpl@110['E']
classifier = JavaTypeParameterImpl@113['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@114
}
LazyJavaClassifierType@142['E'] {
arguments = ArrayList@143[empty]
classifier = JavaTypeParameterImpl@103['E']
classifier = JavaTypeParameterImpl@123['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@144['E'] {
arguments = ArrayList@145[empty]
classifier = JavaTypeParameterImpl@135['E']
classifier = JavaTypeParameterImpl@107['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@146['E'] {
arguments = ArrayList@147[empty]
classifier = JavaTypeParameterImpl@129['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@114
}
LazyJavaClassifierType@148['E'] {
arguments = ArrayList@149[empty]
classifier = JavaTypeParameterImpl@114['E']
classifier = JavaTypeParameterImpl@126['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@150['E'] {
arguments = ArrayList@151[empty]
classifier = JavaTypeParameterImpl@106['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@107
}
LazyJavaClassifierType@152['E'] {
arguments = ArrayList@153[empty]
classifier = JavaTypeParameterImpl@99['E']
classifier = JavaTypeParameterImpl@117['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@152['E'] {
arguments = ArrayList@153[empty]
classifier = JavaTypeParameterImpl@132['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@154['E'] {
arguments = ArrayList@155[empty]
classifier = JavaTypeParameterImpl@123['E']
classifier = JavaTypeParameterImpl@99['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
LazyJavaClassifierType@156['E'] {
arguments = ArrayList@157[empty]
classifier = JavaTypeParameterImpl@132['E']
classifier = JavaTypeParameterImpl@120['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
}
LazyJavaClassifierType@158['E'] {
arguments = ArrayList@159[empty]
classifier = JavaTypeParameterImpl@120['E']
classifier = JavaTypeParameterImpl@135['E']
nullable = 'true': Boolean@91
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
}
@@ -333,157 +333,167 @@ LazyJavaPackageFragmentProvider@181 {
packageFragments('<root>': FqName@182) = LazyJavaPackageFragment@183['<root>']
packageFragments('Array': FqName@184) = null
packageFragments('Int': FqName@185) = null
packageFragments('String': FqName@186) = null
packageFragments('T': FqName@187) = null
packageFragments('java': FqName@188) = LazyJavaPackageFragment@189['java']
packageFragments('java.io': FqName@190) = LazyJavaPackageFragment@191['io']
packageFragments('java.lang': FqName@192) = LazyJavaPackageFragment@193['lang']
packageFragments('java.lang.Array': FqName@194) = null
packageFragments('java.lang.Int': FqName@195) = null
packageFragments('java.lang.String': FqName@196) = null
packageFragments('java.lang.T': FqName@197) = null
packageFragments('java.util': FqName@198) = LazyJavaPackageFragment@199['util']
packageFragments('java.util.Array': FqName@200) = null
packageFragments('java.util.Int': FqName@201) = null
packageFragments('java.util.String': FqName@202) = null
packageFragments('java.util.T': FqName@203) = null
packageFragments('kotlin': FqName@204) = null
packageFragments('kotlin.Array': FqName@205) = null
packageFragments('kotlin.Int': FqName@206) = null
packageFragments('kotlin.String': FqName@207) = null
packageFragments('kotlin.T': FqName@208) = null
packageFragments('kotlin.io': FqName@209) = null
packageFragments('kotlin.jvm': FqName@210) = null
packageFragments('whats': FqName@211) = null
packageFragments('whats.the': FqName@212) = null
packageFragments('whats.the.difference': FqName@213) = null
packageFragments('whats.the.difference.Array': FqName@214) = null
packageFragments('whats.the.difference.Int': FqName@215) = null
packageFragments('whats.the.difference.String': FqName@216) = null
packageFragments('whats.the.difference.T': FqName@217) = null
packageFragments('whats.the.difference.lastIndex': FqName@218) = null
packageFragments('IntRange': FqName@186) = null
packageFragments('String': FqName@187) = null
packageFragments('T': FqName@188) = null
packageFragments('java': FqName@189) = LazyJavaPackageFragment@190['java']
packageFragments('java.io': FqName@191) = LazyJavaPackageFragment@192['io']
packageFragments('java.lang': FqName@193) = LazyJavaPackageFragment@194['lang']
packageFragments('java.lang.Array': FqName@195) = null
packageFragments('java.lang.Int': FqName@196) = null
packageFragments('java.lang.IntRange': FqName@197) = null
packageFragments('java.lang.String': FqName@198) = null
packageFragments('java.lang.T': FqName@199) = null
packageFragments('java.util': FqName@200) = LazyJavaPackageFragment@201['util']
packageFragments('java.util.Array': FqName@202) = null
packageFragments('java.util.Int': FqName@203) = null
packageFragments('java.util.IntRange': FqName@204) = null
packageFragments('java.util.String': FqName@205) = null
packageFragments('java.util.T': FqName@206) = null
packageFragments('kotlin': FqName@207) = null
packageFragments('kotlin.Array': FqName@208) = null
packageFragments('kotlin.Int': FqName@209) = null
packageFragments('kotlin.IntRange': FqName@210) = null
packageFragments('kotlin.String': FqName@211) = null
packageFragments('kotlin.T': FqName@212) = null
packageFragments('kotlin.io': FqName@213) = null
packageFragments('kotlin.jvm': FqName@214) = null
packageFragments('whats': FqName@215) = null
packageFragments('whats.the': FqName@216) = null
packageFragments('whats.the.difference': FqName@217) = null
packageFragments('whats.the.difference.Array': FqName@218) = null
packageFragments('whats.the.difference.Int': FqName@219) = null
packageFragments('whats.the.difference.IntRange': FqName@220) = null
packageFragments('whats.the.difference.String': FqName@221) = null
packageFragments('whats.the.difference.T': FqName@222) = null
packageFragments('whats.the.difference.indices': FqName@223) = null
packageFragments('whats.the.difference.lastIndex': FqName@224) = null
topLevelClasses(JavaClassImpl@69['AbstractCollection']) = LazyJavaClassDescriptor@3['AbstractCollection']
topLevelClasses(JavaClassImpl@73['AbstractList']) = LazyJavaClassDescriptor@14['AbstractList']
topLevelClasses(JavaClassImpl@219['ArrayList']) = LazyJavaClassDescriptor@24['ArrayList']
topLevelClasses(JavaClassImpl@225['ArrayList']) = LazyJavaClassDescriptor@24['ArrayList']
topLevelClasses(JavaClassImpl@177['RandomAccess']) = LazyJavaClassDescriptor@39['RandomAccess']
topLevelClasses(JavaClassImpl@180['Serializable']) = LazyJavaClassDescriptor@43['Serializable']
}
LazyJavaPackageFragment@189['java'] {
classes('lang': Name@220) = null // through LazyPackageFragmentScopeForJavaPackage@221
classes('util': Name@222) = null // through LazyPackageFragmentScopeForJavaPackage@221
deserializedPackageScope = Empty@223 // through LazyPackageFragmentScopeForJavaPackage@221
functions('lang': Name@224) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@221
functions('util': Name@225) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@221
memberIndex = computeMemberIndex$1@226 // through LazyPackageFragmentScopeForJavaPackage@221
LazyJavaPackageFragment@190['java'] {
classes('lang': Name@226) = null // through LazyPackageFragmentScopeForJavaPackage@227
classes('util': Name@228) = null // through LazyPackageFragmentScopeForJavaPackage@227
deserializedPackageScope = Empty@229 // through LazyPackageFragmentScopeForJavaPackage@227
functions('lang': Name@230) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@227
functions('util': Name@231) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@227
memberIndex = computeMemberIndex$1@232 // through LazyPackageFragmentScopeForJavaPackage@227
}
LazyJavaPackageFragment@193['lang'] {
classes('ArrayList': Name@227) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('add': Name@10) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('get': Name@229) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('hasNext': Name@230) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('iarray': Name@231) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('iterator': Name@232) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('lastIndex': Name@233) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('minus': Name@234) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('next': Name@235) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('rangeTo': Name@236) = null // through LazyPackageFragmentScopeForJavaPackage@228
classes('size': Name@237) = null // through LazyPackageFragmentScopeForJavaPackage@228
deserializedPackageScope = Empty@223 // through LazyPackageFragmentScopeForJavaPackage@228
functions('ArrayList': Name@227) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('add': Name@10) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('get': Name@229) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('hasNext': Name@230) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('iarray': Name@231) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('iterator': Name@232) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('lastIndex': Name@233) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('minus': Name@234) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('next': Name@235) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('rangeTo': Name@236) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
functions('size': Name@237) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@228
memberIndex = computeMemberIndex$1@238 // through LazyPackageFragmentScopeForJavaPackage@228
LazyJavaPackageFragment@194['lang'] {
classes('ArrayList': Name@233) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('IntRange': Name@235) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('add': Name@10) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('get': Name@236) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('hasNext': Name@237) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('iarray': Name@238) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('iterator': Name@239) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('lastIndex': Name@240) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('minus': Name@241) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('next': Name@242) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('rangeTo': Name@243) = null // through LazyPackageFragmentScopeForJavaPackage@234
classes('size': Name@244) = null // through LazyPackageFragmentScopeForJavaPackage@234
deserializedPackageScope = Empty@229 // through LazyPackageFragmentScopeForJavaPackage@234
functions('ArrayList': Name@233) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('IntRange': Name@235) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('add': Name@10) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('get': Name@236) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('hasNext': Name@237) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('iarray': Name@238) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('iterator': Name@239) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('lastIndex': Name@245) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('minus': Name@241) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('next': Name@242) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('rangeTo': Name@243) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
functions('size': Name@244) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@234
memberIndex = computeMemberIndex$1@246 // through LazyPackageFragmentScopeForJavaPackage@234
}
LazyJavaPackageFragment@199['util'] {
classes('Array': Name@239) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('ArrayList': Name@227) = LazyJavaClassDescriptor@24['ArrayList'] // through LazyPackageFragmentScopeForJavaPackage@240
classes('Int': Name@241) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('String': Name@242) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('add': Name@10) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('get': Name@229) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('hasNext': Name@230) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('iarray': Name@231) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('iterator': Name@232) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('lastIndex': Name@233) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('minus': Name@234) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('next': Name@235) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('rangeTo': Name@236) = null // through LazyPackageFragmentScopeForJavaPackage@240
classes('size': Name@237) = null // through LazyPackageFragmentScopeForJavaPackage@240
deserializedPackageScope = Empty@223 // through LazyPackageFragmentScopeForJavaPackage@240
functions('ArrayList': Name@227) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('add': Name@10) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('get': Name@229) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('hasNext': Name@230) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('iarray': Name@231) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('iterator': Name@232) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('lastIndex': Name@233) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('minus': Name@234) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('next': Name@235) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('rangeTo': Name@236) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
functions('size': Name@237) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@240
memberIndex = computeMemberIndex$1@243 // through LazyPackageFragmentScopeForJavaPackage@240
LazyJavaPackageFragment@201['util'] {
classes('Array': Name@247) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('ArrayList': Name@233) = LazyJavaClassDescriptor@24['ArrayList'] // through LazyPackageFragmentScopeForJavaPackage@248
classes('Int': Name@249) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('IntRange': Name@250) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('String': Name@251) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('add': Name@10) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('get': Name@236) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('hasNext': Name@237) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('iarray': Name@238) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('iterator': Name@239) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('lastIndex': Name@240) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('minus': Name@241) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('next': Name@242) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('rangeTo': Name@243) = null // through LazyPackageFragmentScopeForJavaPackage@248
classes('size': Name@244) = null // through LazyPackageFragmentScopeForJavaPackage@248
deserializedPackageScope = Empty@229 // through LazyPackageFragmentScopeForJavaPackage@248
functions('ArrayList': Name@233) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('IntRange': Name@235) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('add': Name@10) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('get': Name@236) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('hasNext': Name@237) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('iarray': Name@238) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('iterator': Name@239) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('lastIndex': Name@245) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('minus': Name@241) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('next': Name@242) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('rangeTo': Name@243) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
functions('size': Name@244) = EmptyList@11[empty] // through LazyPackageFragmentScopeForJavaPackage@248
memberIndex = computeMemberIndex$1@252 // through LazyPackageFragmentScopeForJavaPackage@248
}
LazyJavaTypeParameterDescriptor@57['E'] {
defaultType = JetTypeImpl@244['E']
defaultType = JetTypeImpl@253['E']
typeConstructor = AbstractLazyTypeParameterDescriptor$1@100
upperBounds = LinkedHashSet@245[1] { NullableType@246 }
upperBoundsAsType = NullableType@246
}
LazyJavaTypeParameterDescriptor@48['E'] {
defaultType = JetTypeImpl@247['E']
typeConstructor = AbstractLazyTypeParameterDescriptor$1@107
upperBounds = LinkedHashSet@248[1] { NullableType@249 }
upperBoundsAsType = NullableType@249
upperBounds = LinkedHashSet@254[1] { NullableType@255 }
upperBoundsAsType = NullableType@255
}
LazyJavaTypeParameterDescriptor@52['E'] {
defaultType = JetTypeImpl@250['E']
typeConstructor = AbstractLazyTypeParameterDescriptor$1@111
upperBounds = LinkedHashSet@251[1] { NullableType@252 }
upperBoundsAsType = NullableType@252
defaultType = JetTypeImpl@256['E']
typeConstructor = AbstractLazyTypeParameterDescriptor$1@104
upperBounds = LinkedHashSet@257[1] { NullableType@258 }
upperBoundsAsType = NullableType@258
}
LazyJavaTypeParameterResolver@253 {
resolve(JavaTypeParameterImpl@254['E']) = LazyJavaTypeParameterDescriptor@48['E']
}
LazyJavaTypeParameterResolver@255 {
resolve(JavaTypeParameterImpl@256['E']) = LazyJavaTypeParameterDescriptor@57['E']
}
LazyJavaTypeParameterResolver@257 {
resolve(JavaTypeParameterImpl@258['E']) = LazyJavaTypeParameterDescriptor@52['E']
}
LazyJavaTypeParameterResolver@259 {
resolve(JavaTypeParameterImpl@123['E']) = null
}
LazyJavaTypeParameterResolver@260 {
resolve(JavaTypeParameterImpl@126['E']) = null
}
LazyJavaTypeParameterResolver@261 {
resolve(JavaTypeParameterImpl@99['E']) = null
LazyJavaTypeParameterDescriptor@48['E'] {
defaultType = JetTypeImpl@259['E']
typeConstructor = AbstractLazyTypeParameterDescriptor$1@114
upperBounds = LinkedHashSet@260[1] { NullableType@261 }
upperBoundsAsType = NullableType@261
}
LazyJavaTypeParameterResolver@262 {
resolve(JavaTypeParameterImpl@263['E']) = LazyJavaTypeParameterDescriptor@48['E']
}
LazyJavaTypeParameterResolver@264 {
resolve(JavaTypeParameterImpl@265['E']) = LazyJavaTypeParameterDescriptor@57['E']
}
LazyJavaTypeParameterResolver@266 {
resolve(JavaTypeParameterImpl@267['E']) = LazyJavaTypeParameterDescriptor@52['E']
}
LazyJavaTypeParameterResolver@268 {
resolve(JavaTypeParameterImpl@132['E']) = null
}
LazyJavaTypeParameterResolver@263 {
resolve(JavaTypeParameterImpl@129['E']) = null
LazyJavaTypeParameterResolver@269 {
resolve(JavaTypeParameterImpl@126['E']) = null
}
LazyJavaTypeParameterResolver@270 {
resolve(JavaTypeParameterImpl@113['E']) = null
}
LazyJavaTypeParameterResolver@271 {
resolve(JavaTypeParameterImpl@123['E']) = null
}
LazyJavaTypeParameterResolver@272 {
resolve(JavaTypeParameterImpl@117['E']) = null
}
@@ -5,6 +5,7 @@ package whats {
package whats.the {
package whats.the.difference {
internal val </*0*/ T> kotlin.Array<T>.indices: kotlin.IntRange
internal val </*0*/ T> kotlin.Array<T>.lastIndex: kotlin.Int
internal fun iarray(/*0*/ vararg a: kotlin.String /*kotlin.Array<kotlin.String>*/): kotlin.Array<kotlin.String>
internal fun main(): kotlin.Unit
@@ -129,18 +129,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("indices.kt")
public void testIndices() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/indices.kt");
doTest(fileName);
}
@TestMetadata("indicesChar.kt")
public void testIndicesChar() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/indicesChar.kt");
doTest(fileName);
}
@TestMetadata("iterator.kt")
public void testIterator() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/arrays/iterator.kt");
@@ -1902,12 +1890,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("forIntRange.kt")
public void testForIntRange() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/controlStructures/forIntRange.kt");
doTest(fileName);
}
@TestMetadata("forLoopMemberExtensionAll.kt")
public void testForLoopMemberExtensionAll() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/controlStructures/forLoopMemberExtensionAll.kt");
@@ -2124,12 +2106,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("kt998.kt")
public void testKt998() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/controlStructures/kt998.kt");
doTest(fileName);
}
@TestMetadata("longRange.kt")
public void testLongRange() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/controlStructures/longRange.kt");
@@ -120,6 +120,18 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("indices.kt")
public void testIndices() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/arrays/indices.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("indicesChar.kt")
public void testIndicesChar() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/arrays/indicesChar.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("kt3771.kt")
public void testKt3771() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/arrays/kt3771.kt");
@@ -1626,6 +1638,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("forIntRange.kt")
public void testForIntRange() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/ranges/forIntRange.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("multiAssignmentIterationOverIntRange.kt")
public void testMultiAssignmentIterationOverIntRange() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/ranges/multiAssignmentIterationOverIntRange.kt");
@@ -2426,6 +2444,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("kt998.kt")
public void testKt998() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/regressions/kt998.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("objectCaptureOuterConstructorProperty.kt")
public void testObjectCaptureOuterConstructorProperty() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/regressions/objectCaptureOuterConstructorProperty.kt");
-2
View File
@@ -24,7 +24,5 @@ public class Array<reified T>(size: Int, init: (Int) -> T) : Cloneable {
public fun iterator(): Iterator<T>
public val indices: IntRange
public override fun clone(): Array<T>
}
-16
View File
@@ -26,8 +26,6 @@ public class ByteArray(size: Int) : Cloneable {
public fun iterator(): ByteIterator
public val indices: IntRange
public override fun clone(): ByteArray
}
@@ -39,8 +37,6 @@ public class CharArray(size: Int) : Cloneable {
public fun iterator(): CharIterator
public val indices: IntRange
public override fun clone(): CharArray
}
@@ -52,8 +48,6 @@ public class ShortArray(size: Int) : Cloneable {
public fun iterator(): ShortIterator
public val indices: IntRange
public override fun clone(): ShortArray
}
@@ -65,8 +59,6 @@ public class IntArray(size: Int) : Cloneable {
public fun iterator(): IntIterator
public val indices: IntRange
public override fun clone(): IntArray
}
@@ -78,8 +70,6 @@ public class LongArray(size: Int) : Cloneable {
public fun iterator(): LongIterator
public val indices: IntRange
public override fun clone(): LongArray
}
@@ -91,8 +81,6 @@ public class FloatArray(size: Int) : Cloneable {
public fun iterator(): FloatIterator
public val indices: IntRange
public override fun clone(): FloatArray
}
@@ -104,8 +92,6 @@ public class DoubleArray(size: Int) : Cloneable {
public fun iterator(): DoubleIterator
public val indices: IntRange
public override fun clone(): DoubleArray
}
@@ -117,8 +103,6 @@ public class BooleanArray(size: Int) : Cloneable {
public fun iterator(): BooleanIterator
public val indices: IntRange
public override fun clone(): BooleanArray
}
@@ -19,6 +19,7 @@ package kotlin.jvm.internal;
import kotlin.IntRange;
import kotlin.KotlinNullPointerException;
import java.lang.Deprecated;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -93,6 +94,8 @@ public class Intrinsics {
return first == null ? second == null : first.equals(second);
}
// This method is not used from generated code anymore but kept for backwards compatibility
@Deprecated
public static IntRange arrayIndices(int length) {
return new IntRange(0, length - 1);
}
@@ -34,8 +34,6 @@ class GenerateArrays(out: PrintWriter) : BuiltInsSourceGenerator(out) {
out.println()
out.println(" public fun iterator(): ${s}Iterator")
out.println()
out.println(" public val indices: IntRange")
out.println()
out.println(" public override fun clone(): ${s}Array")
out.println("}")
out.println()
@@ -138,7 +138,6 @@ public final class ArrayFIF extends CompositeFIF {
add(pattern(ARRAYS, "get"), GET_INTRINSIC);
add(pattern(ARRAYS, "set"), SET_INTRINSIC);
add(pattern(ARRAYS, "size"), LENGTH_PROPERTY_INTRINSIC);
add(pattern(ARRAYS, "<get-indices>"), new KotlinFunctionIntrinsic("arrayIndices"));
add(pattern(ARRAYS, "iterator"), new KotlinFunctionIntrinsic("arrayIterator"));
add(pattern(ARRAY, "<init>"), new KotlinFunctionIntrinsic("arrayFromFun"));
add(pattern(NUMBER_ARRAY, "<init>"),new KotlinFunctionIntrinsic("numberArrayOfSize"));
-4
View File
@@ -974,10 +974,6 @@
return result;
};
Kotlin.arrayIndices = function (arr) {
return new Kotlin.NumberRange(0, arr.length - 1);
};
Kotlin.arrayIterator = function (array) {
return new Kotlin.ArrayIterator(array);
};
@@ -26,3 +26,31 @@ public val CharArray.lastIndex: Int
public val Array<*>.lastIndex: Int
get() = this.size - 1
public val BooleanArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val ByteArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val ShortArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val IntArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val LongArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val FloatArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val DoubleArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val CharArray.indices: IntRange
get() = IntRange(0, this.size - 1)
public val Array<*>.indices: IntRange
get() = IntRange(0, this.size - 1)