From 94593fd08f780ca12bef013ab67e778bf9a266ce Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Thu, 23 Aug 2012 14:30:13 +0300 Subject: [PATCH] method extracted to avoid duplicates --- .../jet/codegen/ExpressionCodegen.java | 21 +++++++------------ .../jet/codegen/GenerationState.java | 2 +- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 38bc89d306d..e2e40ba1284 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -197,22 +197,10 @@ public class ExpressionCodegen extends JetVisitor { @Override public StackValue visitClass(JetClass klass, StackValue data) { - ClassDescriptor descriptor = bindingContext.get(BindingContext.CLASS, klass); - ObjectOrClosureCodegen closure = new LocalClassClosureCodegen(this, context, state, descriptor); - Pair nameAndVisitor = state.forAnonymousSubclass(klass); - - closure.cv = nameAndVisitor.getSecond(); - closure.name = nameAndVisitor.getFirst(); - final CodegenContext objectContext = closure.context.intoAnonymousClass( - closure, descriptor, OwnerKind.IMPLEMENTATION, - typeMapper); - - new ImplementationBodyCodegen(klass, objectContext, nameAndVisitor.getSecond(), state).generate(); - return StackValue.none(); + return visitClassOrObject(klass); } - @Override - public StackValue visitObjectDeclaration(JetObjectDeclaration declaration, StackValue data) { + private StackValue visitClassOrObject(JetClassOrObject declaration) { ClassDescriptor descriptor = bindingContext.get(BindingContext.CLASS, declaration); ObjectOrClosureCodegen closure = new LocalClassClosureCodegen(this, context, state, descriptor); Pair nameAndVisitor = state.forAnonymousSubclass(declaration); @@ -227,6 +215,11 @@ public class ExpressionCodegen extends JetVisitor { return StackValue.none(); } + @Override + public StackValue visitObjectDeclaration(JetObjectDeclaration declaration, StackValue data) { + return visitClassOrObject(declaration); + } + @Override public StackValue visitExpression(JetExpression expression, StackValue receiver) { throw new UnsupportedOperationException("Codegen for " + expression + " is not yet implemented"); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java index 2aa3879243b..27c40a60959 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java @@ -129,7 +129,7 @@ public class GenerationState { getInjector().getJetTypeMapper().mapType(aClass.getDefaultType(), MapTypeMode.TRAIT_IMPL).getInternalName() + ".class"); } - public Pair forAnonymousSubclass(JetExpression expression) { + public Pair forAnonymousSubclass(JetElement expression) { JvmClassName className = getInjector().getJetTypeMapper().getClosureAnnotator().classNameForAnonymousClass(expression); return Pair.create(className, getFactory().forAnonymousSubclass(className)); }