JS: fix inlining in incremental compilation

This commit is contained in:
Alexey Andreev
2017-02-27 17:50:40 +03:00
parent c85108602a
commit 02ca374dc9
11 changed files with 966 additions and 211 deletions
+9
View File
@@ -210,16 +210,19 @@ message ArrayAccess {
message NameReference {
required int32 name_id = 1;
optional Expression qualifier = 2;
optional InlineStrategy inline_strategy = 3 [default=NOT_INLINE];
}
message PropertyReference {
required int32 string_id = 1;
optional Expression qualifier = 2;
optional InlineStrategy inline_strategy = 3 [default=NOT_INLINE];
}
message Invocation {
required Expression qualifier = 1;
repeated Expression argument = 2;
optional InlineStrategy inline_strategy = 3 [default=NOT_INLINE];
}
message Instantiation {
@@ -368,6 +371,12 @@ message Catch {
message Empty {
}
enum InlineStrategy {
AS_FUNCTION = 0;
IN_PLACE = 1;
NOT_INLINE = 2;
}
// Fragment
@@ -57,7 +57,7 @@ object KotlinJavascriptSerializationUtil {
module: ModuleDescriptor,
configuration: DeserializationConfiguration
): PackageFragmentProvider {
val scopeProto = metadata.map { JsProtoBuf.Library.Part.parseFrom(it) }
val scopeProto = metadata.map { JsProtoBuf.Library.Part.parseFrom(it, JsSerializerProtocol.extensionRegistry) }
return createKotlinJavascriptPackageFragmentProvider(storageManager, module, scopeProto, configuration)
}
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.serialization.js.ast
import org.jetbrains.kotlin.js.backend.ast.*
import org.jetbrains.kotlin.js.backend.ast.metadata.*
import org.jetbrains.kotlin.protobuf.CodedInputStream
import org.jetbrains.kotlin.resolve.inline.InlineStrategy as KotlinInlineStrategy
import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.*
import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.ExpressionCase
import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.StatementCase
@@ -341,13 +342,22 @@ class JsAstDeserializer(private val program: JsProgram) {
ExpressionCase.NAME_REFERENCE -> {
val nameRefProto = proto.nameReference
JsNameRef(deserializeName(nameRefProto.nameId), if (nameRefProto.hasQualifier()) deserialize(nameRefProto.qualifier) else null)
val qualifier = if (nameRefProto.hasQualifier()) deserialize(nameRefProto.qualifier) else null
JsNameRef(deserializeName(nameRefProto.nameId), qualifier).apply {
if (nameRefProto.hasInlineStrategy()) {
inlineStrategy = map(nameRefProto.inlineStrategy)
}
}
}
ExpressionCase.PROPERTY_REFERENCE -> {
val propertyRefProto = proto.propertyReference
val qualifier = if (propertyRefProto.hasQualifier()) deserialize(propertyRefProto.qualifier) else null
JsNameRef(deserializeString(propertyRefProto.stringId), qualifier)
JsNameRef(deserializeString(propertyRefProto.stringId), qualifier).apply {
if (propertyRefProto.hasInlineStrategy()) {
inlineStrategy = map(propertyRefProto.inlineStrategy)
}
}
}
ExpressionCase.INVOCATION -> {
@@ -355,7 +365,11 @@ class JsAstDeserializer(private val program: JsProgram) {
JsInvocation(
deserialize(invocationProto.qualifier),
invocationProto.argumentList.map { deserialize(it) }
)
).apply {
if (invocationProto.hasInlineStrategy()) {
inlineStrategy = map(invocationProto.inlineStrategy)
}
}
}
ExpressionCase.INSTANTIATION -> {
@@ -466,6 +480,12 @@ class JsAstDeserializer(private val program: JsProgram) {
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 <T : JsNode> withLocation(fileId: Int?, location: Location?, action: () -> T): T {
val lastLocation = locationStack.peek()
val deserializedLocation = if (fileId != null || location != null) {
@@ -73,6 +73,71 @@ public final class JsAstProtoBuf {
// @@protoc_insertion_point(enum_scope:org.jetbrains.kotlin.serialization.js.ast.SideEffects)
}
/**
* Protobuf enum {@code org.jetbrains.kotlin.serialization.js.ast.InlineStrategy}
*/
public enum InlineStrategy
implements org.jetbrains.kotlin.protobuf.Internal.EnumLite {
/**
* <code>AS_FUNCTION = 0;</code>
*/
AS_FUNCTION(0, 0),
/**
* <code>IN_PLACE = 1;</code>
*/
IN_PLACE(1, 1),
/**
* <code>NOT_INLINE = 2;</code>
*/
NOT_INLINE(2, 2),
;
/**
* <code>AS_FUNCTION = 0;</code>
*/
public static final int AS_FUNCTION_VALUE = 0;
/**
* <code>IN_PLACE = 1;</code>
*/
public static final int IN_PLACE_VALUE = 1;
/**
* <code>NOT_INLINE = 2;</code>
*/
public static final int NOT_INLINE_VALUE = 2;
public final int getNumber() { return value; }
public static InlineStrategy valueOf(int value) {
switch (value) {
case 0: return AS_FUNCTION;
case 1: return IN_PLACE;
case 2: return NOT_INLINE;
default: return null;
}
}
public static org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap<InlineStrategy>
internalGetValueMap() {
return internalValueMap;
}
private static org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap<InlineStrategy>
internalValueMap =
new org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap<InlineStrategy>() {
public InlineStrategy findValueByNumber(int number) {
return InlineStrategy.valueOf(number);
}
};
private final int value;
private InlineStrategy(int index, int value) {
this.value = value;
}
// @@protoc_insertion_point(enum_scope:org.jetbrains.kotlin.serialization.js.ast.InlineStrategy)
}
public interface LocationOrBuilder extends
// @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.ast.Location)
org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
@@ -13314,6 +13379,15 @@ public final class JsAstProtoBuf {
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2;</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression getQualifier();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
boolean hasInlineStrategy();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy();
}
/**
* Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.NameReference}
@@ -13383,6 +13457,18 @@ public final class JsAstProtoBuf {
bitField0_ |= 0x00000002;
break;
}
case 24: {
int rawValue = input.readEnum();
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.valueOf(rawValue);
if (value == null) {
unknownFieldsCodedOutput.writeRawVarint32(tag);
unknownFieldsCodedOutput.writeRawVarint32(rawValue);
} else {
bitField0_ |= 0x00000004;
inlineStrategy_ = value;
}
break;
}
}
}
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
@@ -13447,9 +13533,25 @@ public final class JsAstProtoBuf {
return qualifier_;
}
public static final int INLINE_STRATEGY_FIELD_NUMBER = 3;
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
private void initFields() {
nameId_ = 0;
qualifier_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -13480,6 +13582,9 @@ public final class JsAstProtoBuf {
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeMessage(2, qualifier_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
output.writeEnum(3, inlineStrategy_.getNumber());
}
output.writeRawBytes(unknownFields);
}
@@ -13497,6 +13602,10 @@ public final class JsAstProtoBuf {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(2, qualifier_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeEnumSize(3, inlineStrategy_.getNumber());
}
size += unknownFields.size();
memoizedSerializedSize = size;
return size;
@@ -13595,6 +13704,8 @@ public final class JsAstProtoBuf {
bitField0_ = (bitField0_ & ~0x00000001);
qualifier_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000002);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
bitField0_ = (bitField0_ & ~0x00000004);
return this;
}
@@ -13626,6 +13737,10 @@ public final class JsAstProtoBuf {
to_bitField0_ |= 0x00000002;
}
result.qualifier_ = qualifier_;
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
to_bitField0_ |= 0x00000004;
}
result.inlineStrategy_ = inlineStrategy_;
result.bitField0_ = to_bitField0_;
return result;
}
@@ -13638,6 +13753,9 @@ public final class JsAstProtoBuf {
if (other.hasQualifier()) {
mergeQualifier(other.getQualifier());
}
if (other.hasInlineStrategy()) {
setInlineStrategy(other.getInlineStrategy());
}
setUnknownFields(
getUnknownFields().concat(other.unknownFields));
return this;
@@ -13768,6 +13886,41 @@ public final class JsAstProtoBuf {
return this;
}
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
inlineStrategy_ = value;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder clearInlineStrategy() {
bitField0_ = (bitField0_ & ~0x00000004);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
return this;
}
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.NameReference)
}
@@ -13800,6 +13953,15 @@ public final class JsAstProtoBuf {
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2;</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression getQualifier();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
boolean hasInlineStrategy();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy();
}
/**
* Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.PropertyReference}
@@ -13869,6 +14031,18 @@ public final class JsAstProtoBuf {
bitField0_ |= 0x00000002;
break;
}
case 24: {
int rawValue = input.readEnum();
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.valueOf(rawValue);
if (value == null) {
unknownFieldsCodedOutput.writeRawVarint32(tag);
unknownFieldsCodedOutput.writeRawVarint32(rawValue);
} else {
bitField0_ |= 0x00000004;
inlineStrategy_ = value;
}
break;
}
}
}
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
@@ -13933,9 +14107,25 @@ public final class JsAstProtoBuf {
return qualifier_;
}
public static final int INLINE_STRATEGY_FIELD_NUMBER = 3;
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
private void initFields() {
stringId_ = 0;
qualifier_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -13966,6 +14156,9 @@ public final class JsAstProtoBuf {
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeMessage(2, qualifier_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
output.writeEnum(3, inlineStrategy_.getNumber());
}
output.writeRawBytes(unknownFields);
}
@@ -13983,6 +14176,10 @@ public final class JsAstProtoBuf {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(2, qualifier_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeEnumSize(3, inlineStrategy_.getNumber());
}
size += unknownFields.size();
memoizedSerializedSize = size;
return size;
@@ -14081,6 +14278,8 @@ public final class JsAstProtoBuf {
bitField0_ = (bitField0_ & ~0x00000001);
qualifier_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000002);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
bitField0_ = (bitField0_ & ~0x00000004);
return this;
}
@@ -14112,6 +14311,10 @@ public final class JsAstProtoBuf {
to_bitField0_ |= 0x00000002;
}
result.qualifier_ = qualifier_;
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
to_bitField0_ |= 0x00000004;
}
result.inlineStrategy_ = inlineStrategy_;
result.bitField0_ = to_bitField0_;
return result;
}
@@ -14124,6 +14327,9 @@ public final class JsAstProtoBuf {
if (other.hasQualifier()) {
mergeQualifier(other.getQualifier());
}
if (other.hasInlineStrategy()) {
setInlineStrategy(other.getInlineStrategy());
}
setUnknownFields(
getUnknownFields().concat(other.unknownFields));
return this;
@@ -14254,6 +14460,41 @@ public final class JsAstProtoBuf {
return this;
}
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
inlineStrategy_ = value;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder clearInlineStrategy() {
bitField0_ = (bitField0_ & ~0x00000004);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
return this;
}
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.PropertyReference)
}
@@ -14291,6 +14532,15 @@ public final class JsAstProtoBuf {
* <code>repeated .org.jetbrains.kotlin.serialization.js.ast.Expression argument = 2;</code>
*/
int getArgumentCount();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
boolean hasInlineStrategy();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy();
}
/**
* Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.Invocation}
@@ -14363,6 +14613,18 @@ public final class JsAstProtoBuf {
argument_.add(input.readMessage(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.PARSER, extensionRegistry));
break;
}
case 24: {
int rawValue = input.readEnum();
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.valueOf(rawValue);
if (value == null) {
unknownFieldsCodedOutput.writeRawVarint32(tag);
unknownFieldsCodedOutput.writeRawVarint32(rawValue);
} else {
bitField0_ |= 0x00000002;
inlineStrategy_ = value;
}
break;
}
}
}
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
@@ -14450,9 +14712,25 @@ public final class JsAstProtoBuf {
return argument_.get(index);
}
public static final int INLINE_STRATEGY_FIELD_NUMBER = 3;
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000002) == 0x00000002);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
private void initFields() {
qualifier_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
argument_ = java.util.Collections.emptyList();
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -14487,6 +14765,9 @@ public final class JsAstProtoBuf {
for (int i = 0; i < argument_.size(); i++) {
output.writeMessage(2, argument_.get(i));
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeEnum(3, inlineStrategy_.getNumber());
}
output.writeRawBytes(unknownFields);
}
@@ -14504,6 +14785,10 @@ public final class JsAstProtoBuf {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(2, argument_.get(i));
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeEnumSize(3, inlineStrategy_.getNumber());
}
size += unknownFields.size();
memoizedSerializedSize = size;
return size;
@@ -14602,6 +14887,8 @@ public final class JsAstProtoBuf {
bitField0_ = (bitField0_ & ~0x00000001);
argument_ = java.util.Collections.emptyList();
bitField0_ = (bitField0_ & ~0x00000002);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
bitField0_ = (bitField0_ & ~0x00000004);
return this;
}
@@ -14634,6 +14921,10 @@ public final class JsAstProtoBuf {
bitField0_ = (bitField0_ & ~0x00000002);
}
result.argument_ = argument_;
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
to_bitField0_ |= 0x00000002;
}
result.inlineStrategy_ = inlineStrategy_;
result.bitField0_ = to_bitField0_;
return result;
}
@@ -14653,6 +14944,9 @@ public final class JsAstProtoBuf {
}
}
if (other.hasInlineStrategy()) {
setInlineStrategy(other.getInlineStrategy());
}
setUnknownFields(
getUnknownFields().concat(other.unknownFields));
return this;
@@ -14880,6 +15174,41 @@ public final class JsAstProtoBuf {
return this;
}
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public boolean hasInlineStrategy() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() {
return inlineStrategy_;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000004;
inlineStrategy_ = value;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE];</code>
*/
public Builder clearInlineStrategy() {
bitField0_ = (bitField0_ & ~0x00000004);
inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy.NOT_INLINE;
return this;
}
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.Invocation)
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.BinaryOperation.T
import org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.UnaryOperation.Type.*
import java.io.OutputStream
import java.util.*
import org.jetbrains.kotlin.resolve.inline.InlineStrategy as KotlinInlineStrategy
class JsAstSerializer {
private val nameTableBuilder = NameTable.newBuilder()
@@ -385,10 +386,13 @@ class JsAstSerializer {
val name = nameRef.name
val qualifier = nameRef.qualifier
if (name != null) {
if (qualifier != null) {
if (qualifier != null || (nameRef.inlineStrategy?.isInline ?: false)) {
val nameRefBuilder = NameReference.newBuilder()
nameRefBuilder.nameId = serialize(name)
nameRefBuilder.qualifier = serialize(qualifier)
if (qualifier != null) {
nameRefBuilder.qualifier = serialize(qualifier)
}
nameRef.inlineStrategy?.let { nameRefBuilder.inlineStrategy = map(it) }
builder.nameReference = nameRefBuilder.build()
}
else {
@@ -399,6 +403,7 @@ class JsAstSerializer {
val propertyRefBuilder = PropertyReference.newBuilder()
propertyRefBuilder.stringId = serialize(nameRef.ident)
qualifier?.let { propertyRefBuilder.qualifier = serialize(it) }
nameRef.inlineStrategy?.let { propertyRefBuilder.inlineStrategy = map(it) }
builder.propertyReference = propertyRefBuilder.build()
}
}
@@ -407,6 +412,11 @@ class JsAstSerializer {
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)
}
}
builder.invocation = invocationBuilder.build()
}
@@ -529,6 +539,12 @@ class JsAstSerializer {
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 serialize(name: JsName) = nameMap.getOrPut(name) {
val result = nameTableBuilder.entryCount
val builder = Name.newBuilder()