From a7636f7b7402fff882e5f4135e97fd8f6b32548c Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 20 Aug 2012 21:53:54 +0400 Subject: [PATCH] Shared var initialization moved to variable declaration generation --- .../jetbrains/jet/codegen/ExpressionCodegen.java | 15 ++++++++------- .../src/org/jetbrains/jet/codegen/FrameMap.java | 6 ++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 55af0ddaaeb..5b467f289e9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -935,7 +935,14 @@ public class ExpressionCodegen extends JetVisitor { final Type sharedVarType = typeMapper.getSharedVarType(variableDescriptor); final Type type = sharedVarType != null ? sharedVarType : asmType(variableDescriptor.getType()); - myFrameMap.enter(variableDescriptor, type.getSize()); + int index = myFrameMap.enter(variableDescriptor, type.getSize()); + + if (sharedVarType != null) { + v.anew(sharedVarType); + v.dup(); + v.invokespecial(sharedVarType.getInternalName(), "", "()V"); + v.store(index, TYPE_OBJECT); + } leaveTasks.add(new Function() { @Override @@ -2578,12 +2585,6 @@ public class ExpressionCodegen extends JetVisitor { assert variableDescriptor != null; Type varType = asmType(variableDescriptor.getType()); - if (sharedVarType != null) { - v.anew(sharedVarType); - v.dup(); - v.invokespecial(sharedVarType.getInternalName(), "", "()V"); - v.store(index, TYPE_OBJECT); - } JetExpression initializer = property.getInitializer(); if (initializer != null) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java b/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java index f9e07cc51a8..ef85a4fc06b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java @@ -34,10 +34,12 @@ public class FrameMap { private final TObjectIntHashMap myVarSizes = new TObjectIntHashMap(); private int myMaxIndex = 0; - public void enter(DeclarationDescriptor descriptor, int size) { - myVarIndex.put(descriptor, myMaxIndex); + public int enter(DeclarationDescriptor descriptor, int size) { + int index = myMaxIndex; + myVarIndex.put(descriptor, index); myMaxIndex += size; myVarSizes.put(descriptor, size); + return index; } public int leave(DeclarationDescriptor descriptor) {