JS backend: don't use objects as definition place.

This commit is contained in:
Zalim Bashorov
2014-03-06 21:22:38 +04:00
parent 4c40f3971b
commit 43d9c383ff
3 changed files with 23 additions and 15 deletions
@@ -28,7 +28,6 @@ public final class ObjectTest extends SingleFileTranslationTest {
fooBoxTest(); fooBoxTest();
} }
public void testObjectDeclaration() throws Exception { public void testObjectDeclaration() throws Exception {
fooBoxTest(); fooBoxTest();
} }
@@ -52,7 +51,12 @@ public final class ObjectTest extends SingleFileTranslationTest {
public void testObjectInheritingFromClass() throws Exception { public void testObjectInheritingFromClass() throws Exception {
fooBoxTest(); fooBoxTest();
} }
public void testObjectInObjectWithClosure() throws Exception { public void testObjectInObjectWithClosure() throws Exception {
fooBoxTest(); fooBoxTest();
} }
public void testLambdaInObjectInsideObject() throws Exception {
checkFooBoxIsOk();
}
} }
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructor;
import org.jetbrains.k2js.translate.context.*; import org.jetbrains.k2js.translate.context.*;
import org.jetbrains.k2js.translate.expression.InnerObjectTranslator;
import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator; import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
import org.jetbrains.k2js.translate.utils.JsAstUtils; import org.jetbrains.k2js.translate.utils.JsAstUtils;
@@ -38,13 +37,13 @@ import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances; import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName;
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer; import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor; import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter; import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getSupertypesWithoutFakes; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getSupertypesWithoutFakes;
import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters; import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction; import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction;
/** /**
@@ -105,21 +104,16 @@ public final class ClassTranslator extends AbstractTranslator {
boolean isTopLevelDeclaration = context() == declarationContext; boolean isTopLevelDeclaration = context() == declarationContext;
JsNameRef qualifiedReference; JsNameRef qualifiedReference = null;
if (!isTopLevelDeclaration) { if (isTopLevelDeclaration) {
qualifiedReference = null; DefinitionPlace definitionPlace = null;
}
else { if (!descriptor.getKind().isSingleton() && !isAnonymousObject(descriptor)) {
JsScope scope = context().getScopeForDescriptor(descriptor);
DefinitionPlace definitionPlace;
if (descriptor.getKind().isSingleton() || isAnonymousObject(descriptor)) {
qualifiedReference = null;
definitionPlace = new DefinitionPlace(scope, context().getThisObject(descriptor), properties);
}
else {
qualifiedReference = declarationContext.getQualifiedReference(descriptor); qualifiedReference = declarationContext.getQualifiedReference(descriptor);
JsScope scope = context().getScopeForDescriptor(descriptor);
definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties); definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties);
} }
declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace); declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace);
} }
@@ -0,0 +1,10 @@
package foo
object A {
object B {
val lambda = { "OK" }
}
}
fun box() = A.B.lambda()