JS: refactor Dart AST
This commit is contained in:
+5
-3
@@ -18,10 +18,12 @@ package org.jetbrains.kotlin.js.translate.callTranslator
|
||||
|
||||
import com.google.dart.compiler.backend.js.ast.JsExpression
|
||||
import com.google.dart.compiler.backend.js.ast.JsName
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.HasMetadata
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.SideEffectKind
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.sideEffects
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||
import org.jetbrains.kotlin.js.translate.reference.ReferenceTranslator
|
||||
@@ -84,7 +86,7 @@ fun VariableAccessInfo.constructAccessExpression(ref: JsExpression): JsExpressio
|
||||
// This is useful when passing AST to TemporaryAssignmentElimination. It can bring
|
||||
// property assignment like `obj.propertyName = $tmp` to places where `$tmp` gets its value,
|
||||
// but only when it's sure that no side effects possible.
|
||||
(ref as? HasMetadata)?.let { it.sideEffects = SideEffectKind.PURE }
|
||||
ref.sideEffects = SideEffectKind.PURE
|
||||
JsAstUtils.assignment(ref, value!!)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.js.translate.context;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.dart.compiler.backend.js.ast.*;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.HasMetadata;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.MetadataProperties;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.SideEffectKind;
|
||||
import com.intellij.openapi.util.Factory;
|
||||
@@ -619,13 +618,11 @@ public final class StaticContext {
|
||||
}
|
||||
|
||||
private static JsExpression applySideEffects(JsExpression expression, DeclarationDescriptor descriptor) {
|
||||
if (expression instanceof HasMetadata) {
|
||||
if (descriptor instanceof FunctionDescriptor ||
|
||||
descriptor instanceof PackageFragmentDescriptor ||
|
||||
descriptor instanceof ClassDescriptor
|
||||
) {
|
||||
MetadataProperties.setSideEffects((HasMetadata) expression, SideEffectKind.PURE);
|
||||
}
|
||||
if (descriptor instanceof FunctionDescriptor ||
|
||||
descriptor instanceof PackageFragmentDescriptor ||
|
||||
descriptor instanceof ClassDescriptor
|
||||
) {
|
||||
MetadataProperties.setSideEffects(expression, SideEffectKind.PURE);
|
||||
}
|
||||
return expression;
|
||||
}
|
||||
|
||||
-1
@@ -20,7 +20,6 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
|
||||
import com.google.dart.compiler.backend.js.ast.JsInvocation;
|
||||
import com.google.dart.compiler.backend.js.ast.JsName;
|
||||
import com.google.dart.compiler.backend.js.ast.JsNameRef;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.HasMetadata;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.MetadataProperties;
|
||||
import com.google.dart.compiler.backend.js.ast.metadata.SideEffectKind;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -28,13 +28,12 @@ import org.jetbrains.kotlin.js.translate.context.TranslationContext;
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public final class JsAstUtils {
|
||||
private static final JsNameRef DEFINE_PROPERTY = pureFqn("defineProperty", null);
|
||||
public static final JsNameRef CREATE_OBJECT = pureFqn("create", null);
|
||||
private static final JsNameRef CREATE_OBJECT = pureFqn("create", null);
|
||||
|
||||
private static final JsNameRef VALUE = new JsNameRef("value");
|
||||
private static final JsPropertyInitializer WRITABLE = new JsPropertyInitializer(pureFqn("writable", null), JsLiteral.TRUE);
|
||||
@@ -205,11 +204,6 @@ public final class JsAstUtils {
|
||||
return invokeMethod(Namer.kotlinLong(), Namer.LONG_FROM_NUMBER, expression);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsExpression equalsForObject(@NotNull JsExpression left, @NotNull JsExpression right) {
|
||||
return invokeMethod(left, Namer.EQUALS_METHOD_NAME, right);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsExpression compareForObject(@NotNull JsExpression left, @NotNull JsExpression right) {
|
||||
return invokeMethod(left, Namer.COMPARE_TO_METHOD_NAME, right);
|
||||
@@ -267,7 +261,7 @@ public final class JsAstUtils {
|
||||
return new JsBinaryOperation(JsBinaryOperator.OR, op1, op2);
|
||||
}
|
||||
|
||||
public static void setQualifier(@NotNull JsExpression selector, @Nullable JsExpression receiver) {
|
||||
private static void setQualifier(@NotNull JsExpression selector, @Nullable JsExpression receiver) {
|
||||
assert (selector instanceof JsInvocation || selector instanceof JsNameRef);
|
||||
if (selector instanceof JsInvocation) {
|
||||
setQualifier(((JsInvocation) selector).getQualifier(), receiver);
|
||||
@@ -398,16 +392,6 @@ public final class JsAstUtils {
|
||||
return new JsVars(new JsVars.JsVar(name, expr));
|
||||
}
|
||||
|
||||
public static void setArguments(@NotNull HasArguments invocation, @NotNull List<JsExpression> newArgs) {
|
||||
List<JsExpression> arguments = invocation.getArguments();
|
||||
assert arguments.isEmpty() : "Arguments already set.";
|
||||
arguments.addAll(newArgs);
|
||||
}
|
||||
|
||||
public static void setArguments(@NotNull HasArguments invocation, JsExpression... arguments) {
|
||||
setArguments(invocation, Arrays.asList(arguments));
|
||||
}
|
||||
|
||||
public static void setParameters(@NotNull JsFunction function, @NotNull List<JsParameter> newParams) {
|
||||
List<JsParameter> parameters = function.getParameters();
|
||||
assert parameters.isEmpty() : "Arguments already set.";
|
||||
|
||||
Reference in New Issue
Block a user