Fix codegen in scripts during evaluation of expressions
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java
index 1ec3123..56aecde 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java
@@ -3046,7 +3046,9 @@
}
}
else if (receiverDescriptor instanceof ScriptDescriptor) {
- return generateScriptReceiver((ScriptDescriptor) receiverDescriptor);
+ StackValue ans = generateScriptReceiver((ScriptDescriptor) receiverDescriptor);
+
+ return ans != null ? ans : StackValue.thisOrOuter(this, receiverDescriptor, isSuper, castReceiver);
}
else {
return StackValue.thisOrOuter(this, receiverDescriptor, isSuper, castReceiver);
@@ -3126,7 +3128,6 @@
return result;
}
- @NotNull
private StackValue generateScriptReceiver(@NotNull ScriptDescriptor receiver) {
CodegenContext cur = context;
StackValue result = StackValue.LOCAL_0;
@@ -3150,7 +3151,7 @@
return StackValue.field(classType, receiverKotlinType, currentScriptType, fieldName, false, result, receiver);
}
- result = cur.getOuterExpression(result, false);
+ result = cur.getOuterExpression(result, true);
if (inStartConstructorContext) {
cur = getNotNullParentContextForMethod(cur);
@@ -3160,7 +3161,7 @@
cur = cur.getParentContext();
}
- throw new UnsupportedOperationException();
+ return result;
}
@NotNull