From 6d6d6fadc1df5687a8c7301f34166a7820914422 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 13 Oct 2014 13:45:54 +0400 Subject: [PATCH] Refactoring, unified closures generation --- .../jet/codegen/ExpressionCodegen.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 566c321ffd8..950c09047a1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1328,9 +1328,22 @@ public class ExpressionCodegen extends JetVisitor implem FunctionDescriptor descriptor = bindingContext.get(FUNCTION, declaration); assert descriptor != null : "Function is not resolved to descriptor: " + declaration.getText(); + return genClosure( + declaration, descriptor, new FunctionGenerationStrategy.FunctionDefault(state, descriptor, declaration), samType, kind + ); + } + + @NotNull + private StackValue genClosure( + @NotNull PsiElement declaration, + @NotNull FunctionDescriptor descriptor, + @NotNull FunctionGenerationStrategy strategy, + @Nullable SamType samType, + @NotNull KotlinSyntheticClass.Kind kind + ) { ClosureCodegen closureCodegen = new ClosureCodegen( state, declaration, descriptor, samType, context, kind, this, - new FunctionGenerationStrategy.FunctionDefault(state, descriptor, declaration), parentCodegen + strategy, parentCodegen ); closureCodegen.gen(); @@ -2492,11 +2505,8 @@ public class ExpressionCodegen extends JetVisitor implem FunctionDescriptor functionDescriptor = bindingContext.get(FUNCTION, expression); if (functionDescriptor != null) { CallableReferenceGenerationStrategy strategy = new CallableReferenceGenerationStrategy(state, functionDescriptor, resolvedCall); - ClosureCodegen closureCodegen = new ClosureCodegen(state, expression, functionDescriptor, null, context, - KotlinSyntheticClass.Kind.CALLABLE_REFERENCE_WRAPPER, - this, strategy, getParentCodegen()); - closureCodegen.gen(); - return closureCodegen.putInstanceOnStack(v, this); + + return genClosure(expression, functionDescriptor, strategy, null, KotlinSyntheticClass.Kind.CALLABLE_REFERENCE_WRAPPER); } VariableDescriptor variableDescriptor = bindingContext.get(VARIABLE, expression);