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();
}
public void testObjectDeclaration() throws Exception {
fooBoxTest();
}
@@ -52,7 +51,12 @@ public final class ObjectTest extends SingleFileTranslationTest {
public void testObjectInheritingFromClass() throws Exception {
fooBoxTest();
}
public void testObjectInObjectWithClosure() throws Exception {
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.TypeConstructor;
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.initializer.ClassInitializerTranslator;
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.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.utils.BindingUtils.getClassDescriptor;
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.getSupertypesWithoutFakes;
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;
/**
@@ -105,21 +104,16 @@ public final class ClassTranslator extends AbstractTranslator {
boolean isTopLevelDeclaration = context() == declarationContext;
JsNameRef qualifiedReference;
if (!isTopLevelDeclaration) {
qualifiedReference = null;
}
else {
JsScope scope = context().getScopeForDescriptor(descriptor);
DefinitionPlace definitionPlace;
if (descriptor.getKind().isSingleton() || isAnonymousObject(descriptor)) {
qualifiedReference = null;
definitionPlace = new DefinitionPlace(scope, context().getThisObject(descriptor), properties);
}
else {
JsNameRef qualifiedReference = null;
if (isTopLevelDeclaration) {
DefinitionPlace definitionPlace = null;
if (!descriptor.getKind().isSingleton() && !isAnonymousObject(descriptor)) {
qualifiedReference = declarationContext.getQualifiedReference(descriptor);
JsScope scope = context().getScopeForDescriptor(descriptor);
definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties);
}
declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace);
}
@@ -0,0 +1,10 @@
package foo
object A {
object B {
val lambda = { "OK" }
}
}
fun box() = A.B.lambda()