From b2fe44997abcff7e0a998301549c4f45d98e28f0 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Fri, 3 Apr 2015 15:58:04 +0300 Subject: [PATCH] Remove intrinsics from CollectionElement --- .../jetbrains/kotlin/codegen/StackValue.java | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index a763698791c..1997302e4b4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -860,8 +860,8 @@ public abstract class StackValue { } public static class CollectionElement extends StackValueWithSimpleReceiver { - private final Callable getter; - private final Callable setter; + private final ExtendedCallable getter; + private final ExtendedCallable setter; private final ExpressionCodegen codegen; private final GenerationState state; private final ResolvedCall resolvedGetCall; @@ -883,8 +883,10 @@ public abstract class StackValue { this.state = state; this.setterDescriptor = resolvedSetCall == null ? null : resolvedSetCall.getResultingDescriptor(); this.getterDescriptor = resolvedGetCall == null ? null : resolvedGetCall.getResultingDescriptor(); - this.setter = resolvedSetCall == null ? null : codegen.resolveToCallable(setterDescriptor, false, resolvedSetCall); - this.getter = resolvedGetCall == null ? null : codegen.resolveToCallable(getterDescriptor, false, resolvedGetCall); + this.setter = + resolvedSetCall == null ? null : (ExtendedCallable) codegen.resolveToCallable(setterDescriptor, false, resolvedSetCall); + this.getter = + resolvedGetCall == null ? null : (ExtendedCallable) codegen.resolveToCallable(getterDescriptor, false, resolvedGetCall); this.codegen = codegen; } @@ -893,13 +895,8 @@ public abstract class StackValue { if (getter == null) { throw new UnsupportedOperationException("no getter specified"); } - if (getter instanceof ExtendedCallable) { - ((ExtendedCallable) getter).invokeWithNotNullAssertion(v, state, resolvedGetCall); - } - else { - StackValue result = ((IntrinsicMethod) getter).generate(codegen, this.type, null, Collections.emptyList(), StackValue.none()); - result.put(result.type, v); - } + + getter.invokeWithNotNullAssertion(v, state, resolvedGetCall); coerceTo(type, v); } @@ -949,20 +946,13 @@ public abstract class StackValue { if (setter == null) { throw new UnsupportedOperationException("no setter specified"); } - if (setter instanceof ExtendedCallable) { - ExtendedCallable method = (ExtendedCallable) setter; - Type[] argumentTypes = method.getArgumentTypes(); - coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v); - method.invokeWithNotNullAssertion(v, state, resolvedSetCall); - Type returnType = method.getReturnType(); - if (returnType != Type.VOID_TYPE) { - pop(v, returnType); - } - } - else { - //noinspection ConstantConditions - StackValue result = ((IntrinsicMethod) setter).generate(codegen, null, null, Collections.emptyList(), StackValue.none()); - result.put(result.type, v); + + Type[] argumentTypes = setter.getArgumentTypes(); + coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v); + setter.invokeWithNotNullAssertion(v, state, resolvedSetCall); + Type returnType = setter.getReturnType(); + if (returnType != Type.VOID_TYPE) { + pop(v, returnType); } } }