Include standard library.

This commit is contained in:
Pavel Talanov
2011-11-28 19:36:22 +04:00
parent ee2cee31af
commit 5ed130b745
6 changed files with 37 additions and 18 deletions
@@ -73,7 +73,7 @@ public class K2JSTranslator {
}
Project project = environment.getProject();
GenerationState generationState = new GenerationState();
GenerationState generationState = new GenerationState(project);
List<JetNamespace> namespaces = Lists.newArrayList();
if (vFile.isDirectory()) {
File dir = new File(vFile.getPath());
@@ -5,19 +5,21 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.k2js.translate.utils.Namer;
import java.util.HashMap;
import java.util.Map;
public class Aliaser {
static public Aliaser aliasesForStandardClasses() {
static public Aliaser aliasesForStandardClasses(@NotNull JetStandardLibrary standardLibrary,
@NotNull Namer namer) {
Aliaser result = new Aliaser();
//result.setAliasForDescriptor();
result.setAliasForDescriptor(standardLibrary.getArray(), namer.declareStandardClass("Array"));
return result;
}
@NotNull
private final Map<DeclarationDescriptor, JsName> aliases = new HashMap<DeclarationDescriptor, JsName>();
@Nullable
@@ -4,31 +4,30 @@
package org.jetbrains.k2js.translate.general;
import com.google.dart.compiler.backend.js.ast.JsProgram;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.declarations.Declarations;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import java.util.List;
public final class GenerationState {
@NotNull
private final Project project;
public GenerationState() {
public GenerationState(@NotNull Project project) {
this.project = project;
}
@NotNull
public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext, @NotNull List<JetNamespace> namespaces) {
public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext,
@NotNull List<JetNamespace> namespaces) {
//TODO hardcoded
JsProgram result = new JsProgram("main");
JetNamespace namespace = namespaces.get(0);
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
Declarations declarations = Declarations.extractDeclarations(descriptor, result.getRootScope());
Translation.generateAst(result, bindingContext, declarations, namespace);
return result;
return Translation.generateAst(bindingContext, namespace, project);
}
}
@@ -2,7 +2,9 @@ package org.jetbrains.k2js.translate.general;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.declarations.Declarations;
@@ -16,6 +18,7 @@ import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator;
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
import org.jetbrains.k2js.translate.reference.ReferenceTranslator;
import org.jetbrains.k2js.translate.utils.BindingUtils;
/**
* @author Talanov Pavel
@@ -90,11 +93,16 @@ public final class Translation {
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
}
public static void generateAst(@NotNull JsProgram result, @NotNull BindingContext bindingContext,
@NotNull Declarations declarations, @NotNull JetNamespace namespace) {
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
@NotNull JetNamespace namespace, @NotNull Project project) {
//TODO hardcoded
JsProgram result = new JsProgram("main");
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
Declarations declarations = Declarations.extractDeclarations(descriptor, result.getRootScope());
JsBlock block = result.getFragmentBlock(0);
TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations);
TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations, project);
block.addStatement(Translation.translateNamespace(namespace, context));
return result;
}
@@ -5,11 +5,13 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.backend.js.ast.JsProgram;
import com.google.dart.compiler.backend.js.ast.JsScope;
import com.google.dart.compiler.util.AstUtil;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.k2js.declarations.Declarations;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.Namer;
@@ -37,11 +39,14 @@ public final class TranslationContext {
@NotNull
public static TranslationContext rootContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext,
@NotNull Declarations extractor) {
@NotNull Declarations extractor, @NotNull Project project) {
JsScope rootScope = program.getRootScope();
Scopes scopes = new Scopes(rootScope, rootScope, rootScope);
Namer namer = Namer.newInstance(rootScope);
Aliaser aliaser = Aliaser.aliasesForStandardClasses
(JetStandardLibrary.getJetStandardLibrary(project), namer);
return new TranslationContext(null, program, bindingContext,
scopes, extractor, Aliaser.aliasesForStandardClasses(), Namer.newInstance(rootScope));
scopes, extractor, aliaser, namer);
}
@NotNull
@@ -120,6 +120,11 @@ public final class Namer {
return reference;
}
@NotNull
public JsName declareStandardClass(@NotNull String name) {
return kotlinScope.declareName(name);
}
@NotNull
public JsNameRef isOperationReference() {
return kotlin(AstUtil.newQualifiedNameRef("isType"));