diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java index e4eb0e028e6..bd226e359ed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ScriptBodyResolver.java @@ -75,7 +75,7 @@ public class ScriptBodyResolver { DataFlowInfo.EMPTY, NO_EXPECTED_TYPE, ExpressionPosition.FREE); - JetType returnType = expressionTypingServices.getBlockReturnedType(scope, declaration.getBlockExpression(), CoercionStrategy.NO_COERCION, context, trace).getType(); + JetType returnType = expressionTypingServices.getBlockReturnedType(declaration.getBlockExpression(), CoercionStrategy.NO_COERCION, context).getType(); if (returnType == null) { returnType = ErrorUtils.createErrorType("getBlockReturnedType returned null"); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 98c8207ad23..fba564a67b7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -567,9 +567,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { } public static JetTypeInfo visitBlockExpression(JetBlockExpression expression, ExpressionTypingContext context, boolean isStatement) { - return context.expressionTypingServices.getBlockReturnedType(context.scope, expression, isStatement - ? CoercionStrategy.COERCION_TO_UNIT - : CoercionStrategy.NO_COERCION, context, context.trace); + return context.expressionTypingServices.getBlockReturnedType(expression, isStatement + ? CoercionStrategy.COERCION_TO_UNIT + : CoercionStrategy.NO_COERCION, context); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index f1b1af1b38f..2e1786fcb33 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -288,8 +288,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { return returnType; } ExpressionTypingContext newContext = context.replaceExpectedType(expectedReturnType != null ? expectedReturnType : NO_EXPECTED_TYPE) - .replaceBindingTrace(temporaryTrace); - return context.expressionTypingServices.getBlockReturnedType(functionInnerScope, bodyExpression, CoercionStrategy.COERCION_TO_UNIT, - newContext, temporaryTrace).getType(); + .replaceBindingTrace(temporaryTrace).replaceScope(functionInnerScope); + return context.expressionTypingServices.getBlockReturnedType(bodyExpression, CoercionStrategy.COERCION_TO_UNIT, newContext).getType(); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java index e39b1b22bb6..0fd67f56a8e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java @@ -171,7 +171,7 @@ public class ExpressionTypingServices { JetFunctionLiteral functionLiteral = (JetFunctionLiteral) function; JetBlockExpression blockExpression = functionLiteral.getBodyExpression(); assert blockExpression != null; - getBlockReturnedType(newContext.scope, blockExpression, CoercionStrategy.COERCION_TO_UNIT, context, trace); + getBlockReturnedType(blockExpression, CoercionStrategy.COERCION_TO_UNIT, context); } else { expressionTypingFacade.getTypeInfo(bodyExpression, newContext, !blockBody); @@ -180,15 +180,13 @@ public class ExpressionTypingServices { @NotNull public JetTypeInfo getBlockReturnedType( - @NotNull JetScope outerScope, @NotNull JetBlockExpression expression, @NotNull CoercionStrategy coercionStrategyForLastExpression, - @NotNull ExpressionTypingContext context, - @NotNull BindingTrace trace + @NotNull ExpressionTypingContext context ) { List block = expression.getStatements(); - DeclarationDescriptor containingDescriptor = outerScope.getContainingDeclaration(); + DeclarationDescriptor containingDescriptor = context.scope.getContainingDeclaration(); if (containingDescriptor instanceof ScriptDescriptor) { if (!(expression.getParent() instanceof JetScript)) { // top level script declarations should have ScriptDescriptor parent @@ -197,7 +195,7 @@ public class ExpressionTypingServices { } } WritableScope scope = new WritableScopeImpl( - outerScope, containingDescriptor, new TraceBasedRedeclarationHandler(context.trace), "getBlockReturnedType"); + context.scope, containingDescriptor, new TraceBasedRedeclarationHandler(context.trace), "getBlockReturnedType"); scope.changeLockLevel(WritableScope.LockLevel.BOTH); JetTypeInfo r; @@ -205,12 +203,12 @@ public class ExpressionTypingServices { r = DataFlowUtils.checkType(KotlinBuiltIns.getInstance().getUnitType(), expression, context, context.dataFlowInfo); } else { - r = getBlockReturnedTypeWithWritableScope(scope, block, coercionStrategyForLastExpression, context, trace); + r = getBlockReturnedTypeWithWritableScope(scope, block, coercionStrategyForLastExpression, context, context.trace); } scope.changeLockLevel(WritableScope.LockLevel.READING); if (containingDescriptor instanceof ScriptDescriptor) { - trace.record(BindingContext.SCRIPT_SCOPE, (ScriptDescriptor) containingDescriptor, scope); + context.trace.record(BindingContext.SCRIPT_SCOPE, (ScriptDescriptor) containingDescriptor, scope); } return r;