Array test passes.

This commit is contained in:
Pavel Talanov
2011-11-30 18:29:08 +04:00
parent 26d9da8360
commit 6edcd6e9a1
8 changed files with 29 additions and 15 deletions
@@ -19,14 +19,6 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
this.declarations = declarations; this.declarations = declarations;
} }
@Override
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
DeclarationContext classContext = declareClass(descriptor, context);
declareClassConstructor(descriptor, context);
declareClassMembers(descriptor, classContext);
return null;
}
@NotNull @NotNull
private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor, private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor,
@NotNull DeclarationContext context) { @NotNull DeclarationContext context) {
@@ -57,6 +49,15 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
return declareName(descriptor, context, descriptor.getName()); return declareName(descriptor, context, descriptor.getName());
} }
@Override
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
DeclarationContext classContext = declareClass(descriptor, context);
declareClassConstructor(descriptor, context);
declareClassMembers(descriptor, classContext);
return null;
}
private void declareClassMembers(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) { private void declareClassMembers(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
for (DeclarationDescriptor memberDescriptor : for (DeclarationDescriptor memberDescriptor :
descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
@@ -39,11 +39,13 @@ public final class Declarations {
} }
//TODO: provide a mechanism to do intrinsics //TODO: provide a mechanism to do intrinsics
public void extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary) { public void extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary,
@NotNull JsNameRef standardLibraryObjectName) {
DeclarationVisitor visitor = new DeclarationVisitor(this); DeclarationVisitor visitor = new DeclarationVisitor(this);
for (DeclarationDescriptor descriptor : for (DeclarationDescriptor descriptor :
standardLibrary.getLibraryScope().getAllDescriptors()) { standardLibrary.getLibraryScope().getAllDescriptors()) {
descriptor.accept(visitor, DeclarationContext.rootContext(rootScope, null)); descriptor.accept(visitor, DeclarationContext.rootContext(rootScope,
standardLibraryObjectName));
} }
} }
@@ -66,12 +68,12 @@ public final class Declarations {
} }
public boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) { public boolean hasQualifier(@NotNull DeclarationDescriptor descriptor) {
return (descriptorToQualifierMap.get(descriptor) != null); return (descriptorToQualifierMap.get(descriptor.getOriginal()) != null);
} }
@NotNull @NotNull
public JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) { public JsNameRef getQualifier(@NotNull DeclarationDescriptor descriptor) {
JsNameRef qualifier = descriptorToQualifierMap.get(descriptor); JsNameRef qualifier = descriptorToQualifierMap.get(descriptor.getOriginal());
assert qualifier != null : "Cannot be null. Use hasQualifier to check."; assert qualifier != null : "Cannot be null. Use hasQualifier to check.";
return qualifier; return qualifier;
} }
@@ -30,7 +30,9 @@ public final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisi
@Override @Override
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) { public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
intrinsics.declareIntrinsic(descriptor); if (!intrinsics.isIntrinsic(descriptor)) {
intrinsics.declareIntrinsic(descriptor);
}
return null; return null;
} }
} }
@@ -73,7 +73,7 @@ public final class Intrinsics {
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) { public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof FunctionDescriptor) { if (descriptor instanceof FunctionDescriptor) {
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor.getOriginal();
return descriptorToIntrinsicMap.containsKey(functionDescriptor); return descriptorToIntrinsicMap.containsKey(functionDescriptor);
} }
return false; return false;
@@ -86,10 +86,12 @@ public final class Translation {
public static JsProgram generateAst(@NotNull BindingContext bindingContext, public static JsProgram generateAst(@NotNull BindingContext bindingContext,
@NotNull JetNamespace namespace, @NotNull Project project) { @NotNull JetNamespace namespace, @NotNull Project project) {
//TODO: move some of the code somewhere
JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project); JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project);
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace); NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext); StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext);
staticContext.getDeclarations().extractStandardLibrary(standardLibrary); staticContext.getDeclarations().
extractStandardLibrary(standardLibrary, staticContext.getNamer().kotlinObject());
staticContext.getDeclarations().extractDeclarations(descriptor); staticContext.getDeclarations().extractDeclarations(descriptor);
JsBlock block = staticContext.getProgram().getFragmentBlock(0); JsBlock block = staticContext.getProgram().getFragmentBlock(0);
TranslationContext context = TranslationContext.rootContext(staticContext); TranslationContext context = TranslationContext.rootContext(staticContext);
@@ -104,6 +104,7 @@ public final class BinaryOperationTranslator extends OperationTranslator {
} }
} }
//TODO: refactor
@NotNull @NotNull
private JsExpression asBinaryOperation() { private JsExpression asBinaryOperation() {
if (isPropertyOnTheLeft && OperatorTable.isAssignment(getOperationToken())) { if (isPropertyOnTheLeft && OperatorTable.isAssignment(getOperationToken())) {
@@ -36,6 +36,7 @@ public class ReferenceTranslator extends AbstractTranslator {
} }
@NotNull @NotNull
//TODO: make this process simpler and clearer
public JsExpression translateSimpleName() { public JsExpression translateSimpleName() {
tryResolveAsPropertyAccess(); tryResolveAsPropertyAccess();
tryResolveAsThisQualifiedExpression(); tryResolveAsThisQualifiedExpression();
@@ -120,6 +120,11 @@ public final class Namer {
return reference; return reference;
} }
@NotNull
public JsNameRef kotlinObject() {
return kotlinName.makeRef();
}
@NotNull @NotNull
public JsName declareStandardClass(@NotNull String name) { public JsName declareStandardClass(@NotNull String name) {
return kotlinScope.declareName(name); return kotlinScope.declareName(name);