From 81c3edfc00cba4a136df7482e40fd1eed76f5d53 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 7 Feb 2017 13:12:02 +0300 Subject: [PATCH] Refine cc7f0e2d83fd6367d8f97598bc5b8641276dfe86 getDispatchReceiver/getExtensionReceiver always return not-null value, but in the absence of receiver this value is equal StackValue.none(), i.e. has a size 1 The tests were passing because of the problems with the test framework: 4b9e20ab8c558dc8b2e8c4245c2ca863d5e32747 --- .../src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java | 4 ++-- .../backend/src/org/jetbrains/kotlin/codegen/StackValue.java | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index e549a1ac218..3c51a44d0fa 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2945,8 +2945,8 @@ public class ExpressionCodegen extends KtVisitor impleme if (isSuspensionPoint && isSafeCallOrOnStack) { boolean bothReceivers = receiver instanceof StackValue.CallReceiver - && ((StackValue.CallReceiver) receiver).getDispatchReceiver() != null - && ((StackValue.CallReceiver) receiver).getExtensionReceiver() != null; + && ((StackValue.CallReceiver) receiver).getDispatchReceiver().type.getSort() != Type.VOID + && ((StackValue.CallReceiver) receiver).getExtensionReceiver().type.getSort() != Type.VOID; Type firstReceiverType = bothReceivers ? ((StackValue.CallReceiver) receiver).getDispatchReceiver().type diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index 503771c1236..4fce9cdc44a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -1597,10 +1597,12 @@ public abstract class StackValue { AsmUtil.dup(v, extensionReceiver.type, dispatchReceiver.type); } + @NotNull public StackValue getDispatchReceiver() { return dispatchReceiver; } + @NotNull public StackValue getExtensionReceiver() { return extensionReceiver; }