JS backend: Remove {value: function...} and {value: Kotlin.createClass() } structures.
This commit is contained in:
@@ -72,6 +72,10 @@ public class RegressionMergeEcmaTest extends SingleFileTranslationTest {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testLiteralFun() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testOverloadExtension() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
+5
-7
@@ -16,7 +16,9 @@
|
||||
|
||||
package org.jetbrains.k2js.translate.declaration;
|
||||
|
||||
import com.google.dart.compiler.backend.js.ast.*;
|
||||
import com.google.dart.compiler.backend.js.ast.JsExpression;
|
||||
import com.google.dart.compiler.backend.js.ast.JsFunction;
|
||||
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
@@ -29,14 +31,14 @@ import org.jetbrains.k2js.translate.general.Translation;
|
||||
import org.jetbrains.k2js.translate.general.TranslatorVisitor;
|
||||
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
|
||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||
import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||
import org.jetbrains.k2js.translate.utils.TranslationUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createPropertyInitializer;
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.*;
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor;
|
||||
|
||||
public class DeclarationBodyVisitor extends TranslatorVisitor<Void> {
|
||||
protected final List<JsPropertyInitializer> result;
|
||||
@@ -120,10 +122,6 @@ public class DeclarationBodyVisitor extends TranslatorVisitor<Void> {
|
||||
}
|
||||
|
||||
JsPropertyInitializer methodAsPropertyInitializer = Translation.functionTranslator(expression, context).translateAsMethod();
|
||||
if (context.isEcma5()) {
|
||||
JsExpression methodBodyExpression = methodAsPropertyInitializer.getValueExpr();
|
||||
methodAsPropertyInitializer.setValueExpr(JsAstUtils.createPropertyDataDescriptor(descriptor, methodBodyExpression));
|
||||
}
|
||||
result.add(methodAsPropertyInitializer);
|
||||
return null;
|
||||
}
|
||||
|
||||
+1
-2
@@ -37,7 +37,6 @@ import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||
import org.jetbrains.k2js.translate.context.UsageTracker;
|
||||
import org.jetbrains.k2js.translate.declaration.ClassTranslator;
|
||||
import org.jetbrains.k2js.translate.general.AbstractTranslator;
|
||||
import org.jetbrains.k2js.translate.initializer.InitializerUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -136,7 +135,7 @@ public class LiteralFunctionTranslator extends AbstractTranslator {
|
||||
private JsNameRef createReference(JsFunction fun) {
|
||||
Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression> place = definitionPlace.getValue();
|
||||
JsNameRef nameRef = new JsNameRef(place.second.generate(), place.third);
|
||||
place.first.add(new JsPropertyInitializer(nameRef, InitializerUtils.toDataDescriptor(fun, context())));
|
||||
place.first.add(new JsPropertyInitializer(nameRef, fun));
|
||||
return nameRef;
|
||||
}
|
||||
|
||||
|
||||
+3
-18
@@ -65,26 +65,11 @@ public final class InitializerUtils {
|
||||
) {
|
||||
ClassDescriptor descriptor = getClassDescriptor(context.bindingContext(), declaration);
|
||||
JsExpression value = ClassTranslator.generateObjectLiteral(declaration, descriptor, context);
|
||||
initializers.add(create(descriptor, !(descriptor.getContainingDeclaration() instanceof NamespaceDescriptor), value, context));
|
||||
}
|
||||
|
||||
private static JsStatement create(DeclarationDescriptor descriptor, boolean enumerable, JsExpression value, TranslationContext context) {
|
||||
JsExpression expression;
|
||||
if (context.isEcma5()) {
|
||||
expression = JsAstUtils.defineProperty(descriptor.getName().asString(), JsAstUtils.createDataDescriptor(value, false, enumerable), context);
|
||||
}
|
||||
else {
|
||||
expression = assignment(new JsNameRef(descriptor.getName().asString(), JsLiteral.THIS), value);
|
||||
}
|
||||
return expression.makeStmt();
|
||||
}
|
||||
|
||||
|
||||
public static JsExpression toDataDescriptor(JsExpression value, TranslationContext context) {
|
||||
return context.isEcma5() ? JsAstUtils.createDataDescriptor(value) : value;
|
||||
JsExpression expression = assignment(new JsNameRef(descriptor.getName().asString(), JsLiteral.THIS), value);
|
||||
initializers.add(expression.makeStmt());
|
||||
}
|
||||
|
||||
public static JsPropertyInitializer createPropertyInitializer(Named named, JsExpression value, TranslationContext context) {
|
||||
return new JsPropertyInitializer(context.nameToLiteral(named), toDataDescriptor(value, context));
|
||||
return new JsPropertyInitializer(context.nameToLiteral(named), value);
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,6 @@ import com.google.dart.compiler.backend.js.ast.*;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetElement;
|
||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||
|
||||
@@ -238,12 +236,6 @@ public final class JsAstUtils {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsObjectLiteral createPropertyDataDescriptor(@NotNull FunctionDescriptor descriptor,
|
||||
@NotNull JsExpression value) {
|
||||
return createPropertyDataDescriptor(descriptor, descriptor.getModality().isOverridable(), value);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsObjectLiteral createDataDescriptor(@NotNull JsExpression value) {
|
||||
return createDataDescriptor(value, false, false);
|
||||
@@ -262,15 +254,6 @@ public final class JsAstUtils {
|
||||
return dataDescriptor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JsObjectLiteral createPropertyDataDescriptor(
|
||||
@NotNull DeclarationDescriptor descriptor,
|
||||
boolean writable,
|
||||
@NotNull JsExpression value
|
||||
) {
|
||||
return createDataDescriptor(value, writable, AnnotationsUtils.isEnumerable(descriptor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsFunction createPackage(@NotNull List<JsStatement> to, @NotNull JsScope scope) {
|
||||
JsFunction packageBlockFunction = createFunctionWithEmptyBody(scope);
|
||||
|
||||
@@ -289,7 +289,23 @@ var Kotlin = Object.create(null);
|
||||
return KotlinNew.isType(object, type);
|
||||
};
|
||||
|
||||
function propertyToOldDescriptorConverter(propertyDescriptor) {
|
||||
if (propertyDescriptor === null || propertyDescriptor === undefined) {
|
||||
return propertyDescriptor;
|
||||
}
|
||||
for (var p in propertyDescriptor) {
|
||||
if (propertyDescriptor.hasOwnProperty(p)) {
|
||||
if ((typeof propertyDescriptor[p]) === "function") {
|
||||
propertyDescriptor[p] = {value: propertyDescriptor[p]};
|
||||
}
|
||||
propertyDescriptor[p].enumerable = true;
|
||||
}
|
||||
}
|
||||
return propertyDescriptor;
|
||||
}
|
||||
|
||||
function propertyDescriptorConverter(propertyDescriptor) {
|
||||
propertyDescriptor = propertyToOldDescriptorConverter(propertyDescriptor);
|
||||
var obj = {};
|
||||
if (propertyDescriptor === null || propertyDescriptor === undefined) {
|
||||
return obj;
|
||||
@@ -318,11 +334,11 @@ var Kotlin = Object.create(null);
|
||||
};
|
||||
|
||||
Kotlin.definePackage = function (initializer, members) {
|
||||
return KotlinNew.definePackage(initializer, members);
|
||||
return KotlinNew.definePackage(initializer, propertyToOldDescriptorConverter(members));
|
||||
};
|
||||
|
||||
Kotlin.defineRootPackage = function (initializer, members) {
|
||||
return KotlinNew.defineRootPackage(initializer, members);
|
||||
return KotlinNew.defineRootPackage(initializer, propertyToOldDescriptorConverter(members));
|
||||
};
|
||||
|
||||
Kotlin.defineModule = function (id, module) {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
fun ok(f: (s: String) -> String): String {
|
||||
return f("O");
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return ok { (s) -> s + "K" }
|
||||
}
|
||||
Reference in New Issue
Block a user