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;
}
@Override
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) {
DeclarationContext classContext = declareClass(descriptor, context);
declareClassConstructor(descriptor, context);
declareClassMembers(descriptor, classContext);
return null;
}
@NotNull
private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor,
@NotNull DeclarationContext context) {
@@ -57,6 +49,15 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
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) {
for (DeclarationDescriptor memberDescriptor :
descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
@@ -39,11 +39,13 @@ public final class Declarations {
}
//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);
for (DeclarationDescriptor descriptor :
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) {
return (descriptorToQualifierMap.get(descriptor) != null);
return (descriptorToQualifierMap.get(descriptor.getOriginal()) != null);
}
@NotNull
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.";
return qualifier;
}
@@ -30,7 +30,9 @@ public final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisi
@Override
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
intrinsics.declareIntrinsic(descriptor);
if (!intrinsics.isIntrinsic(descriptor)) {
intrinsics.declareIntrinsic(descriptor);
}
return null;
}
}
@@ -73,7 +73,7 @@ public final class Intrinsics {
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof FunctionDescriptor) {
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor.getOriginal();
return descriptorToIntrinsicMap.containsKey(functionDescriptor);
}
return false;
@@ -86,10 +86,12 @@ public final class Translation {
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
@NotNull JetNamespace namespace, @NotNull Project project) {
//TODO: move some of the code somewhere
JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project);
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext);
staticContext.getDeclarations().extractStandardLibrary(standardLibrary);
staticContext.getDeclarations().
extractStandardLibrary(standardLibrary, staticContext.getNamer().kotlinObject());
staticContext.getDeclarations().extractDeclarations(descriptor);
JsBlock block = staticContext.getProgram().getFragmentBlock(0);
TranslationContext context = TranslationContext.rootContext(staticContext);
@@ -104,6 +104,7 @@ public final class BinaryOperationTranslator extends OperationTranslator {
}
}
//TODO: refactor
@NotNull
private JsExpression asBinaryOperation() {
if (isPropertyOnTheLeft && OperatorTable.isAssignment(getOperationToken())) {
@@ -36,6 +36,7 @@ public class ReferenceTranslator extends AbstractTranslator {
}
@NotNull
//TODO: make this process simpler and clearer
public JsExpression translateSimpleName() {
tryResolveAsPropertyAccess();
tryResolveAsThisQualifiedExpression();
@@ -120,6 +120,11 @@ public final class Namer {
return reference;
}
@NotNull
public JsNameRef kotlinObject() {
return kotlinName.makeRef();
}
@NotNull
public JsName declareStandardClass(@NotNull String name) {
return kotlinScope.declareName(name);