Remove obsolete InlineStrategy

Replace corresponding metadata property in js.ast with Boolean. This
allows to get rid of dependency of 'js.ast' on 'frontend'.
This commit is contained in:
Alexander Udalov
2020-03-15 13:57:03 +01:00
committed by Alexander Udalov
parent 4156a9c80b
commit 8dd04789ad
12 changed files with 44 additions and 101 deletions
@@ -30,7 +30,6 @@ import java.io.FileInputStream
import java.io.InputStream
import java.io.InputStreamReader
import java.util.*
import org.jetbrains.kotlin.resolve.inline.InlineStrategy as KotlinInlineStrategy
class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<File>) {
private val scope = JsRootScope(program)
@@ -386,7 +385,7 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<Fi
val qualifier = if (nameRefProto.hasQualifier()) deserialize(nameRefProto.qualifier) else null
JsNameRef(deserializeName(nameRefProto.nameId), qualifier).apply {
if (nameRefProto.hasInlineStrategy()) {
inlineStrategy = map(nameRefProto.inlineStrategy)
isInline = map(nameRefProto.inlineStrategy)
}
}
}
@@ -396,7 +395,7 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<Fi
val qualifier = if (propertyRefProto.hasQualifier()) deserialize(propertyRefProto.qualifier) else null
JsNameRef(deserializeString(propertyRefProto.stringId), qualifier).apply {
if (propertyRefProto.hasInlineStrategy()) {
inlineStrategy = map(propertyRefProto.inlineStrategy)
isInline = map(propertyRefProto.inlineStrategy)
}
}
}
@@ -408,7 +407,7 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<Fi
invocationProto.argumentList.map { deserialize(it) }
).apply {
if (invocationProto.hasInlineStrategy()) {
inlineStrategy = map(invocationProto.inlineStrategy)
isInline = map(invocationProto.inlineStrategy)
}
}
}
@@ -541,11 +540,8 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<Fi
SideEffects.PURE -> SideEffectKind.PURE
}
private fun map(inlineStrategy: InlineStrategy) = when(inlineStrategy) {
InlineStrategy.AS_FUNCTION -> KotlinInlineStrategy.AS_FUNCTION
InlineStrategy.IN_PLACE -> KotlinInlineStrategy.IN_PLACE
InlineStrategy.NOT_INLINE -> KotlinInlineStrategy.NOT_INLINE
}
private fun map(inlineStrategy: InlineStrategy) =
inlineStrategy == InlineStrategy.AS_FUNCTION || inlineStrategy == InlineStrategy.IN_PLACE
private fun map(specialFunction: JsAstProtoBuf.SpecialFunction) = when(specialFunction) {
JsAstProtoBuf.SpecialFunction.DEFINE_INLINE_FUNCTION -> SpecialFunction.DEFINE_INLINE_FUNCTION
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.UnaryOperation.Ty
import java.io.File
import java.io.OutputStream
import java.util.*
import org.jetbrains.kotlin.resolve.inline.InlineStrategy as KotlinInlineStrategy
class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsName>) -> Unit)?,
private val pathResolver: (File) -> String) {
@@ -418,13 +417,15 @@ class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsNam
val name = nameRef.name
val qualifier = nameRef.qualifier
if (name != null) {
if (qualifier != null || nameRef.inlineStrategy?.isInline == true) {
if (qualifier != null || nameRef.isInline == true) {
val nameRefBuilder = NameReference.newBuilder()
nameRefBuilder.nameId = serialize(name)
if (qualifier != null) {
nameRefBuilder.qualifier = serialize(qualifier)
}
nameRef.inlineStrategy?.let { nameRefBuilder.inlineStrategy = map(it) }
nameRef.isInline?.let {
nameRefBuilder.inlineStrategy = if (it) InlineStrategy.IN_PLACE else InlineStrategy.NOT_INLINE
}
builder.nameReference = nameRefBuilder.build()
}
else {
@@ -435,7 +436,9 @@ class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsNam
val propertyRefBuilder = PropertyReference.newBuilder()
propertyRefBuilder.stringId = serialize(nameRef.ident)
qualifier?.let { propertyRefBuilder.qualifier = serialize(it) }
nameRef.inlineStrategy?.let { propertyRefBuilder.inlineStrategy = map(it) }
nameRef.isInline?.let {
propertyRefBuilder.inlineStrategy = if (it) InlineStrategy.IN_PLACE else InlineStrategy.NOT_INLINE
}
builder.propertyReference = propertyRefBuilder.build()
}
}
@@ -444,10 +447,8 @@ class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsNam
val invocationBuilder = Invocation.newBuilder()
invocationBuilder.qualifier = serialize(invocation.qualifier)
invocation.arguments.forEach { invocationBuilder.addArgument(serialize(it)) }
invocation.inlineStrategy?.let { inlineStrategy ->
if (inlineStrategy != KotlinInlineStrategy.NOT_INLINE) {
invocationBuilder.inlineStrategy = map(inlineStrategy)
}
if (invocation.isInline == true) {
invocationBuilder.inlineStrategy = InlineStrategy.IN_PLACE
}
builder.invocation = invocationBuilder.build()
}
@@ -584,12 +585,6 @@ class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsNam
SideEffectKind.PURE -> SideEffects.PURE
}
private fun map(inlineStrategy: KotlinInlineStrategy) = when (inlineStrategy) {
KotlinInlineStrategy.AS_FUNCTION -> InlineStrategy.AS_FUNCTION
KotlinInlineStrategy.IN_PLACE -> InlineStrategy.IN_PLACE
KotlinInlineStrategy.NOT_INLINE -> InlineStrategy.NOT_INLINE
}
private fun map(specialFunction: SpecialFunction) = when (specialFunction) {
SpecialFunction.DEFINE_INLINE_FUNCTION -> JsAstProtoBuf.SpecialFunction.DEFINE_INLINE_FUNCTION
SpecialFunction.WRAP_FUNCTION -> JsAstProtoBuf.SpecialFunction.WRAP_FUNCTION
@@ -685,4 +680,4 @@ class JsAstSerializer(private val jsAstValidator: ((JsProgramFragment, Set<JsNam
return JsLocation(path, startLine, startChar)
}
}
}