From 2874cd203f435af16972eda57d50a33c7d35b0a1 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Fri, 20 Sep 2013 13:14:15 +0400 Subject: [PATCH] Don't use direct access to property field in inlined method --- .../src/org/jetbrains/jet/codegen/CodegenUtil.java | 12 +++++++++++- .../org/jetbrains/jet/codegen/ExpressionCodegen.java | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 8eb0dcca9fb..92d00b19766 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.binding.CalculatedClosure; import org.jetbrains.jet.codegen.context.CodegenContext; +import org.jetbrains.jet.codegen.context.MethodContext; import org.jetbrains.jet.codegen.context.PackageContext; import org.jetbrains.jet.codegen.state.JetTypeMapper; import org.jetbrains.jet.lang.descriptors.*; @@ -200,7 +201,16 @@ public class CodegenUtil { return false; } - public static boolean couldUseDirectAccessToProperty(@NotNull PropertyDescriptor propertyDescriptor, boolean forGetter, boolean isInsideClass, boolean isDelegated) { + public static boolean couldUseDirectAccessToProperty( + @NotNull PropertyDescriptor propertyDescriptor, + boolean forGetter, + boolean isInsideClass, + boolean isDelegated, + MethodContext context + ) { + if (context.isInlineFunction()) { + return false; + } PropertyAccessorDescriptor accessorDescriptor = forGetter ? propertyDescriptor.getGetter() : propertyDescriptor.getSetter(); boolean isExtensionProperty = propertyDescriptor.getReceiverParameter() != null; boolean specialTypeProperty = isDelegated || diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index b4947f3f031..0ec3d290da0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1822,7 +1822,7 @@ public class ExpressionCodegen extends JetVisitor implem } if (!skipPropertyAccessors) { - if (couldUseDirectAccessToProperty(propertyDescriptor, true, isInsideClass, isDelegatedProperty)) { + if (couldUseDirectAccessToProperty(propertyDescriptor, true, isInsideClass, isDelegatedProperty, context)) { callableGetter = null; } else { @@ -1846,7 +1846,7 @@ public class ExpressionCodegen extends JetVisitor implem if (propertyDescriptor.isVar()) { PropertySetterDescriptor setter = propertyDescriptor.getSetter(); if (setter != null) { - if (couldUseDirectAccessToProperty(propertyDescriptor, false, isInsideClass, isDelegatedProperty)) { + if (couldUseDirectAccessToProperty(propertyDescriptor, false, isInsideClass, isDelegatedProperty, context)) { callableSetter = null; } else {