Transform *Array.size to properties

This commit is contained in:
Denis Zharkov
2015-10-14 13:56:18 +03:00
parent b050324869
commit bd37a10677
38 changed files with 147 additions and 107 deletions
@@ -16,12 +16,16 @@
package org.jetbrains.kotlin.codegen.intrinsics
import org.jetbrains.kotlin.codegen.Callable
import org.jetbrains.kotlin.codegen.CallableMethod
import org.jetbrains.kotlin.codegen.ExpressionCodegen
import org.jetbrains.kotlin.codegen.StackValue
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.org.objectweb.asm.Type
public class ArraySize : IntrinsicMethod() {
override fun toCallable(method: CallableMethod): Callable =
createUnaryIntrinsicCallable(method) { adapter ->
adapter.arraylength()
}
public class ArraySize : IntrinsicPropertyGetter() {
override fun generate(
resolvedCall: ResolvedCall<*>?, codegen: ExpressionCodegen, returnType: Type, receiver: StackValue
) = StackValue.operation(returnType) {
receiver.put(receiver.type, it)
it.arraylength()
}
}
@@ -134,7 +134,7 @@ public class IntrinsicMethods {
declareArrayMethodsForPrimitive(jvmPrimitiveType);
}
declareIntrinsicFunction("Array", "size", 0, ARRAY_SIZE);
declareIntrinsicFunction("Array", "size", -1, ARRAY_SIZE);
declareIntrinsicFunction("Array", "set", 2, ARRAY_SET);
declareIntrinsicFunction("Array", "get", 1, ARRAY_GET);
declareIntrinsicFunction("Array", "clone", 0, CLONE);
@@ -143,7 +143,7 @@ public class IntrinsicMethods {
private void declareArrayMethodsForPrimitive(@NotNull JvmPrimitiveType jvmPrimitiveType) {
String arrayTypeName = jvmPrimitiveType.getPrimitiveType().getArrayTypeName().asString();
declareIntrinsicFunction(arrayTypeName, "size", 0, ARRAY_SIZE);
declareIntrinsicFunction(arrayTypeName, "size", -1, ARRAY_SIZE);
declareIntrinsicFunction(arrayTypeName, "set", 2, ARRAY_SET);
declareIntrinsicFunction(arrayTypeName, "get", 1, ARRAY_GET);
declareIntrinsicFunction(arrayTypeName, "clone", 0, CLONE);