From 02ca374dc9674de665429d7f468f6723d4092ae3 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Mon, 27 Feb 2017 17:50:40 +0300 Subject: [PATCH] JS: fix inlining in incremental compilation --- .../js/ast/DebugJsAstProtoBuf.java | 737 +++++++++++++----- .../kotlin/js/backend/ast/JsImportedModule.kt | 2 +- .../kotlin/js/backend/ast/JsNameBinding.kt | 2 +- js/js.serializer/src/js-ast.proto | 9 + .../js/KotlinJavascriptSerializationUtil.kt | 2 +- .../serialization/js/ast/JsAstDeserializer.kt | 26 +- .../serialization/js/ast/JsAstProtoBuf.java | 329 ++++++++ .../serialization/js/ast/JsAstSerializer.kt | 20 +- .../js/test/semantics/BoxJsTestGenerated.java | 6 + .../kotlin/js/translate/general/Merger.kt | 27 +- .../testData/box/incremental/inline.kt | 17 + 11 files changed, 966 insertions(+), 211 deletions(-) create mode 100644 js/js.translator/testData/box/incremental/inline.kt diff --git a/build-common/test/org/jetbrains/kotlin/serialization/js/ast/DebugJsAstProtoBuf.java b/build-common/test/org/jetbrains/kotlin/serialization/js/ast/DebugJsAstProtoBuf.java index a7061771e03..51b236e83fd 100644 --- a/build-common/test/org/jetbrains/kotlin/serialization/js/ast/DebugJsAstProtoBuf.java +++ b/build-common/test/org/jetbrains/kotlin/serialization/js/ast/DebugJsAstProtoBuf.java @@ -99,6 +99,97 @@ public final class DebugJsAstProtoBuf { // @@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.ProtocolMessageEnum { + /** + * AS_FUNCTION = 0; + */ + AS_FUNCTION(0, 0), + /** + * IN_PLACE = 1; + */ + IN_PLACE(1, 1), + /** + * NOT_INLINE = 2; + */ + NOT_INLINE(2, 2), + ; + + /** + * AS_FUNCTION = 0; + */ + public static final int AS_FUNCTION_VALUE = 0; + /** + * IN_PLACE = 1; + */ + public static final int IN_PLACE_VALUE = 1; + /** + * NOT_INLINE = 2; + */ + 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 + internalGetValueMap() { + return internalValueMap; + } + private static org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap + internalValueMap = + new org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap() { + public InlineStrategy findValueByNumber(int number) { + return InlineStrategy.valueOf(number); + } + }; + + public final org.jetbrains.kotlin.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final org.jetbrains.kotlin.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final org.jetbrains.kotlin.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.getDescriptor().getEnumTypes().get(1); + } + + private static final InlineStrategy[] VALUES = values(); + + public static InlineStrategy valueOf( + org.jetbrains.kotlin.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private InlineStrategy(int index, int value) { + this.index = index; + 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.MessageOrBuilder { @@ -17688,6 +17779,15 @@ public final class DebugJsAstProtoBuf { * optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2; */ org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.ExpressionOrBuilder getQualifierOrBuilder(); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy(); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.NameReference} @@ -17759,6 +17859,17 @@ public final class DebugJsAstProtoBuf { bitField0_ |= 0x00000002; break; } + case 24: { + int rawValue = input.readEnum(); + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(3, rawValue); + } else { + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + } + break; + } } } } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { @@ -17835,9 +17946,25 @@ public final class DebugJsAstProtoBuf { return qualifier_; } + public static final int INLINE_STRATEGY_FIELD_NUMBER = 3; + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + private void initFields() { nameId_ = 0; qualifier_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.Expression.getDefaultInstance(); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -17868,6 +17995,9 @@ public final class DebugJsAstProtoBuf { if (((bitField0_ & 0x00000002) == 0x00000002)) { output.writeMessage(2, qualifier_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeEnum(3, inlineStrategy_.getNumber()); + } getUnknownFields().writeTo(output); } @@ -17885,6 +18015,10 @@ public final class DebugJsAstProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(2, qualifier_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeEnumSize(3, inlineStrategy_.getNumber()); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -18011,6 +18145,8 @@ public final class DebugJsAstProtoBuf { qualifierBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000002); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -18051,6 +18187,10 @@ public final class DebugJsAstProtoBuf { } else { result.qualifier_ = qualifierBuilder_.build(); } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.inlineStrategy_ = inlineStrategy_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -18073,6 +18213,9 @@ public final class DebugJsAstProtoBuf { if (other.hasQualifier()) { mergeQualifier(other.getQualifier()); } + if (other.hasInlineStrategy()) { + setInlineStrategy(other.getInlineStrategy()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -18258,6 +18401,41 @@ public final class DebugJsAstProtoBuf { return qualifierBuilder_; } + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + onChanged(); + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder clearInlineStrategy() { + bitField0_ = (bitField0_ & ~0x00000004); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.NameReference) } @@ -18294,6 +18472,15 @@ public final class DebugJsAstProtoBuf { * optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2; */ org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.ExpressionOrBuilder getQualifierOrBuilder(); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy(); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.PropertyReference} @@ -18365,6 +18552,17 @@ public final class DebugJsAstProtoBuf { bitField0_ |= 0x00000002; break; } + case 24: { + int rawValue = input.readEnum(); + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(3, rawValue); + } else { + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + } + break; + } } } } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { @@ -18441,9 +18639,25 @@ public final class DebugJsAstProtoBuf { return qualifier_; } + public static final int INLINE_STRATEGY_FIELD_NUMBER = 3; + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + private void initFields() { stringId_ = 0; qualifier_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.Expression.getDefaultInstance(); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -18474,6 +18688,9 @@ public final class DebugJsAstProtoBuf { if (((bitField0_ & 0x00000002) == 0x00000002)) { output.writeMessage(2, qualifier_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeEnum(3, inlineStrategy_.getNumber()); + } getUnknownFields().writeTo(output); } @@ -18491,6 +18708,10 @@ public final class DebugJsAstProtoBuf { size += org.jetbrains.kotlin.protobuf.CodedOutputStream .computeMessageSize(2, qualifier_); } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += org.jetbrains.kotlin.protobuf.CodedOutputStream + .computeEnumSize(3, inlineStrategy_.getNumber()); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -18617,6 +18838,8 @@ public final class DebugJsAstProtoBuf { qualifierBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000002); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -18657,6 +18880,10 @@ public final class DebugJsAstProtoBuf { } else { result.qualifier_ = qualifierBuilder_.build(); } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.inlineStrategy_ = inlineStrategy_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -18679,6 +18906,9 @@ public final class DebugJsAstProtoBuf { if (other.hasQualifier()) { mergeQualifier(other.getQualifier()); } + if (other.hasInlineStrategy()) { + setInlineStrategy(other.getInlineStrategy()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -18864,6 +19094,41 @@ public final class DebugJsAstProtoBuf { return qualifierBuilder_; } + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + onChanged(); + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder clearInlineStrategy() { + bitField0_ = (bitField0_ & ~0x00000004); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.PropertyReference) } @@ -18915,6 +19180,15 @@ public final class DebugJsAstProtoBuf { */ org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.ExpressionOrBuilder getArgumentOrBuilder( int index); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy(); } /** * Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.Invocation} @@ -18989,6 +19263,17 @@ public final class DebugJsAstProtoBuf { argument_.add(input.readMessage(org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.Expression.PARSER, extensionRegistry)); break; } + case 24: { + int rawValue = input.readEnum(); + org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(3, rawValue); + } else { + bitField0_ |= 0x00000002; + inlineStrategy_ = value; + } + break; + } } } } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) { @@ -19088,9 +19373,25 @@ public final class DebugJsAstProtoBuf { return argument_.get(index); } + public static final int INLINE_STRATEGY_FIELD_NUMBER = 3; + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + private void initFields() { qualifier_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.Expression.getDefaultInstance(); argument_ = java.util.Collections.emptyList(); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -19125,6 +19426,9 @@ public final class DebugJsAstProtoBuf { for (int i = 0; i < argument_.size(); i++) { output.writeMessage(2, argument_.get(i)); } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeEnum(3, inlineStrategy_.getNumber()); + } getUnknownFields().writeTo(output); } @@ -19142,6 +19446,10 @@ public final class DebugJsAstProtoBuf { 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 += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -19273,6 +19581,8 @@ public final class DebugJsAstProtoBuf { } else { argumentBuilder_.clear(); } + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + bitField0_ = (bitField0_ & ~0x00000004); return this; } @@ -19318,6 +19628,10 @@ public final class DebugJsAstProtoBuf { } else { result.argument_ = argumentBuilder_.build(); } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000002; + } + result.inlineStrategy_ = inlineStrategy_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -19363,6 +19677,9 @@ public final class DebugJsAstProtoBuf { } } } + if (other.hasInlineStrategy()) { + setInlineStrategy(other.getInlineStrategy()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -19760,6 +20077,41 @@ public final class DebugJsAstProtoBuf { return argumentBuilder_; } + private org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + onChanged(); + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder clearInlineStrategy() { + bitField0_ = (bitField0_ & ~0x00000004); + inlineStrategy_ = org.jetbrains.kotlin.serialization.js.ast.DebugJsAstProtoBuf.InlineStrategy.NOT_INLINE; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.Invocation) } @@ -49675,202 +50027,195 @@ public final class DebugJsAstProtoBuf { "_BIT_OR\020\"\022\017\n\013ASG_BIT_XOR\020#\022\t\n\005COMMA\020$\"\233\002" + "\n\016UnaryOperation\022F\n\007operand\030\001 \002(\01325.org." + "jetbrains.kotlin.serialization.js.ast.Ex" + - "pression\022M\n\004type\030\003 \002(\0162?.org.jetbrains.k" + - "otlin.serialization.js.ast.BinaryOperati" + - "on.Type\"\231\003\n\004Type\022\007\n\003MUL\020\001\022\007\n\003DIV\020\002\022\007\n\003MO" + - "D\020\003\022\007\n\003ADD\020\004\022\007\n\003SUB\020\005\022\007\n\003SHL\020\006\022\007\n\003SHR\020\007\022" + - "\010\n\004SHRU\020\010\022\006\n\002LT\020\t\022\007\n\003LTE\020\n\022\006\n\002GT\020\013\022\007\n\003GT" + - "E\020\014\022\016\n\nINSTANCEOF\020\r\022\006\n\002IN\020\016\022\006\n\002EQ\020\017\022\007\n\003N" + - "EQ\020\020\022\n\n\006REF_EQ\020\021\022\013\n\007REF_NEQ\020\022\022\013\n\007BIT_AND" + - "\020\023\022\013\n\007BIT_XOR\020\024\022\n\n\006BIT_OR\020\025\022\007\n\003AND\020\026\022\006\n\002", - "OR\020\027\022\007\n\003ASG\020\030\022\013\n\007ASG_ADD\020\031\022\013\n\007ASG_SUB\020\032\022" + - "\013\n\007ASG_MUL\020\033\022\013\n\007ASG_DIV\020\034\022\013\n\007ASG_MOD\020\035\022\013" + - "\n\007ASG_SHL\020\036\022\013\n\007ASG_SHR\020\037\022\014\n\010ASG_SHRU\020 \022\017" + - "\n\013ASG_BIT_AND\020!\022\016\n\nASG_BIT_OR\020\"\022\017\n\013ASG_B" + - "IT_XOR\020#\022\t\n\005COMMA\020$\"\233\002\n\016UnaryOperation\022F" + - "\n\007operand\030\001 \002(\01325.org.jetbrains.kotlin.s" + - "erialization.js.ast.Expression\022L\n\004type\030\002" + - " \002(\0162>.org.jetbrains.kotlin.serializatio" + - "n.js.ast.UnaryOperation.Type\022\017\n\007postfix\030" + - "\003 \002(\010\"b\n\004Type\022\013\n\007BIT_NOT\020\001\022\007\n\003DEC\020\002\022\n\n\006D", - "ELETE\020\003\022\007\n\003INC\020\004\022\007\n\003NEG\020\005\022\007\n\003POS\020\006\022\007\n\003NO" + - "T\020\007\022\n\n\006TYPEOF\020\010\022\010\n\004VOID\020\t\"\375\001\n\013Conditiona" + - "l\022N\n\017test_expression\030\001 \002(\01325.org.jetbrai" + - "ns.kotlin.serialization.js.ast.Expressio" + - "n\022N\n\017then_expression\030\002 \002(\01325.org.jetbrai" + - "ns.kotlin.serialization.js.ast.Expressio" + - "n\022N\n\017else_expression\030\003 \002(\01325.org.jetbrai" + - "ns.kotlin.serialization.js.ast.Expressio" + - "n\"\231\001\n\013ArrayAccess\022D\n\005array\030\001 \002(\01325.org.j" + - "etbrains.kotlin.serialization.js.ast.Exp", - "ression\022D\n\005index\030\002 \002(\01325.org.jetbrains.k" + - "otlin.serialization.js.ast.Expression\"j\n" + - "\rNameReference\022\017\n\007name_id\030\001 \002(\005\022H\n\tquali" + - "fier\030\002 \001(\01325.org.jetbrains.kotlin.serial" + - "ization.js.ast.Expression\"p\n\021PropertyRef" + - "erence\022\021\n\tstring_id\030\001 \002(\005\022H\n\tqualifier\030\002" + - " \001(\01325.org.jetbrains.kotlin.serializatio" + - "n.js.ast.Expression\"\237\001\n\nInvocation\022H\n\tqu" + - "alifier\030\001 \002(\01325.org.jetbrains.kotlin.ser" + - "ialization.js.ast.Expression\022G\n\010argument", - "\030\002 \003(\01325.org.jetbrains.kotlin.serializat" + - "ion.js.ast.Expression\"\242\001\n\rInstantiation\022" + - "H\n\tqualifier\030\001 \002(\01325.org.jetbrains.kotli" + - "n.serialization.js.ast.Expression\022G\n\010arg" + - "ument\030\002 \003(\01325.org.jetbrains.kotlin.seria" + - "lization.js.ast.Expression\"\323\013\n\tStatement" + - "\022\016\n\006fileId\030\001 \001(\005\022E\n\010location\030\002 \001(\01323.org" + - ".jetbrains.kotlin.serialization.js.ast.L" + - "ocation\022\030\n\tsynthetic\030\003 \001(\010:\005false\022M\n\020ret" + - "urn_statement\030\025 \001(\01321.org.jetbrains.kotl", - "in.serialization.js.ast.ReturnH\000\022K\n\017thro" + - "w_statement\030\026 \001(\01320.org.jetbrains.kotlin" + - ".serialization.js.ast.ThrowH\000\022K\n\017break_s" + - "tatement\030\027 \001(\01320.org.jetbrains.kotlin.se" + - "rialization.js.ast.BreakH\000\022Q\n\022continue_s" + - "tatement\030\030 \001(\01323.org.jetbrains.kotlin.se" + - "rialization.js.ast.ContinueH\000\022G\n\010debugge" + - "r\030\031 \001(\01323.org.jetbrains.kotlin.serializa" + - "tion.js.ast.DebuggerH\000\022T\n\nexpression\030\032 \001" + - "(\0132>.org.jetbrains.kotlin.serialization.", - "js.ast.ExpressionStatementH\000\022?\n\004vars\030\033 \001" + - "(\0132/.org.jetbrains.kotlin.serialization." + - "js.ast.VarsH\000\022A\n\005block\030\034 \001(\01320.org.jetbr" + - "ains.kotlin.serialization.js.ast.BlockH\000" + - "\022N\n\014global_block\030\035 \001(\01326.org.jetbrains.k" + - "otlin.serialization.js.ast.GlobalBlockH\000" + - "\022A\n\005label\030\036 \001(\01320.org.jetbrains.kotlin.s" + - "erialization.js.ast.LabelH\000\022E\n\014if_statem" + - "ent\030\037 \001(\0132-.org.jetbrains.kotlin.seriali" + - "zation.js.ast.IfH\000\022M\n\020switch_statement\030 ", - " \001(\01321.org.jetbrains.kotlin.serializatio" + - "n.js.ast.SwitchH\000\022K\n\017while_statement\030! \001" + - "(\01320.org.jetbrains.kotlin.serialization." + - "js.ast.WhileH\000\022P\n\022do_while_statement\030\" \001" + - "(\01322.org.jetbrains.kotlin.serialization." + - "js.ast.DoWhileH\000\022G\n\rfor_statement\030# \001(\0132" + - "..org.jetbrains.kotlin.serialization.js." + - "ast.ForH\000\022L\n\020for_in_statement\030$ \001(\01320.or" + - "g.jetbrains.kotlin.serialization.js.ast." + - "ForInH\000\022G\n\rtry_statement\030% \001(\0132..org.jet", - "brains.kotlin.serialization.js.ast.TryH\000" + - "\022A\n\005empty\030& \001(\01320.org.jetbrains.kotlin.s" + - "erialization.js.ast.EmptyH\000B\013\n\tstatement" + - "\"N\n\006Return\022D\n\005value\030\001 \001(\01325.org.jetbrain" + - "s.kotlin.serialization.js.ast.Expression" + - "\"Q\n\005Throw\022H\n\texception\030\001 \002(\01325.org.jetbr" + - "ains.kotlin.serialization.js.ast.Express" + - "ion\"\031\n\005Break\022\020\n\010label_id\030\001 \001(\005\"\034\n\010Contin" + - "ue\022\020\n\010label_id\030\001 \001(\005\"\n\n\010Debugger\"`\n\023Expr" + - "essionStatement\022I\n\nexpression\030\001 \002(\01325.or", - "g.jetbrains.kotlin.serialization.js.ast." + - "Expression\"\215\001\n\004Vars\022N\n\013declaration\030\001 \003(\013" + + "pression\022L\n\004type\030\002 \002(\0162>.org.jetbrains.k" + + "otlin.serialization.js.ast.UnaryOperatio" + + "n.Type\022\017\n\007postfix\030\003 \002(\010\"b\n\004Type\022\013\n\007BIT_N" + + "OT\020\001\022\007\n\003DEC\020\002\022\n\n\006DELETE\020\003\022\007\n\003INC\020\004\022\007\n\003NE", + "G\020\005\022\007\n\003POS\020\006\022\007\n\003NOT\020\007\022\n\n\006TYPEOF\020\010\022\010\n\004VOI" + + "D\020\t\"\375\001\n\013Conditional\022N\n\017test_expression\030\001" + + " \002(\01325.org.jetbrains.kotlin.serializatio" + + "n.js.ast.Expression\022N\n\017then_expression\030\002" + + " \002(\01325.org.jetbrains.kotlin.serializatio" + + "n.js.ast.Expression\022N\n\017else_expression\030\003" + + " \002(\01325.org.jetbrains.kotlin.serializatio" + + "n.js.ast.Expression\"\231\001\n\013ArrayAccess\022D\n\005a" + + "rray\030\001 \002(\01325.org.jetbrains.kotlin.serial" + + "ization.js.ast.Expression\022D\n\005index\030\002 \002(\013", + "25.org.jetbrains.kotlin.serialization.js" + + ".ast.Expression\"\312\001\n\rNameReference\022\017\n\007nam" + + "e_id\030\001 \002(\005\022H\n\tqualifier\030\002 \001(\01325.org.jetb" + + "rains.kotlin.serialization.js.ast.Expres" + + "sion\022^\n\017inline_strategy\030\003 \001(\01629.org.jetb" + + "rains.kotlin.serialization.js.ast.Inline" + + "Strategy:\nNOT_INLINE\"\320\001\n\021PropertyReferen" + + "ce\022\021\n\tstring_id\030\001 \002(\005\022H\n\tqualifier\030\002 \001(\013" + + "25.org.jetbrains.kotlin.serialization.js" + + ".ast.Expression\022^\n\017inline_strategy\030\003 \001(\016", "29.org.jetbrains.kotlin.serialization.js" + - ".ast.VarDeclaration\022\030\n\tmultiline\030\002 \001(\010:\005" + - "false\022\033\n\023exported_package_id\030\003 \001(\005\"o\n\016Va" + - "rDeclaration\022\017\n\007name_id\030\001 \002(\005\022L\n\rinitial" + - "_value\030\002 \001(\01325.org.jetbrains.kotlin.seri" + - "alization.js.ast.Expression\"P\n\005Block\022G\n\t" + - "statement\030\001 \003(\01324.org.jetbrains.kotlin.s" + - "erialization.js.ast.Statement\"V\n\013GlobalB", - "lock\022G\n\tstatement\030\001 \003(\01324.org.jetbrains." + - "kotlin.serialization.js.ast.Statement\"f\n" + - "\005Label\022\016\n\006nameId\030\001 \002(\005\022M\n\017inner_statemen" + - "t\030\002 \002(\01324.org.jetbrains.kotlin.serializa" + - "tion.js.ast.Statement\"\352\001\n\002If\022H\n\tconditio" + - "n\030\001 \002(\01325.org.jetbrains.kotlin.serializa" + - "tion.js.ast.Expression\022L\n\016then_statement" + - "\030\002 \002(\01324.org.jetbrains.kotlin.serializat" + - "ion.js.ast.Statement\022L\n\016else_statement\030\003" + - " \001(\01324.org.jetbrains.kotlin.serializatio", - "n.js.ast.Statement\"\232\001\n\006Switch\022I\n\nexpress" + - "ion\030\001 \002(\01325.org.jetbrains.kotlin.seriali" + - "zation.js.ast.Expression\022E\n\005entry\030\002 \003(\0132" + - "6.org.jetbrains.kotlin.serialization.js." + - "ast.SwitchEntry\"\234\001\n\013SwitchEntry\022D\n\005label" + - "\030\001 \001(\01325.org.jetbrains.kotlin.serializat" + - "ion.js.ast.Expression\022G\n\tstatement\030\002 \003(\013" + - "24.org.jetbrains.kotlin.serialization.js" + - ".ast.Statement\"\225\001\n\005While\022H\n\tcondition\030\001 " + - "\002(\01325.org.jetbrains.kotlin.serialization", - ".js.ast.Expression\022B\n\004body\030\002 \002(\01324.org.j" + - "etbrains.kotlin.serialization.js.ast.Sta" + - "tement\"\227\001\n\007DoWhile\022H\n\tcondition\030\001 \002(\01325." + - "org.jetbrains.kotlin.serialization.js.as" + - "t.Expression\022B\n\004body\030\002 \002(\01324.org.jetbrai" + - "ns.kotlin.serialization.js.ast.Statement" + - "\"\277\003\n\003For\022D\n\tvariables\030\001 \001(\0132/.org.jetbra" + - "ins.kotlin.serialization.js.ast.VarsH\000\022K" + - "\n\nexpression\030\002 \001(\01325.org.jetbrains.kotli" + - "n.serialization.js.ast.ExpressionH\000\022E\n\005e", - "mpty\030\003 \001(\01324.org.jetbrains.kotlin.serial" + - "ization.js.ast.EmptyInitH\000\022H\n\tcondition\030" + - "\004 \001(\01325.org.jetbrains.kotlin.serializati" + - "on.js.ast.Expression\022H\n\tincrement\030\005 \001(\0132" + + ".ast.InlineStrategy:\nNOT_INLINE\"\377\001\n\nInvo" + + "cation\022H\n\tqualifier\030\001 \002(\01325.org.jetbrain" + + "s.kotlin.serialization.js.ast.Expression" + + "\022G\n\010argument\030\002 \003(\01325.org.jetbrains.kotli" + + "n.serialization.js.ast.Expression\022^\n\017inl" + + "ine_strategy\030\003 \001(\01629.org.jetbrains.kotli" + + "n.serialization.js.ast.InlineStrategy:\nN" + + "OT_INLINE\"\242\001\n\rInstantiation\022H\n\tqualifier" + + "\030\001 \002(\01325.org.jetbrains.kotlin.serializat", + "ion.js.ast.Expression\022G\n\010argument\030\002 \003(\0132" + "5.org.jetbrains.kotlin.serialization.js." + - "ast.Expression\022B\n\004body\030\006 \002(\01324.org.jetbr" + - "ains.kotlin.serialization.js.ast.Stateme" + - "ntB\006\n\004init\"\013\n\tEmptyInit\"\374\001\n\005ForIn\022\020\n\006nam" + - "eId\030\001 \001(\005H\000\022K\n\nexpression\030\002 \001(\01325.org.je" + - "tbrains.kotlin.serialization.js.ast.Expr", - "essionH\000\022G\n\010iterable\030\003 \002(\01325.org.jetbrai" + - "ns.kotlin.serialization.js.ast.Expressio" + - "n\022B\n\004body\030\004 \002(\01324.org.jetbrains.kotlin.s" + - "erialization.js.ast.StatementB\007\n\005value\"\337" + - "\001\n\003Try\022F\n\010tryBlock\030\001 \002(\01324.org.jetbrains" + - ".kotlin.serialization.js.ast.Statement\022D" + - "\n\ncatchBlock\030\002 \001(\01320.org.jetbrains.kotli" + - "n.serialization.js.ast.Catch\022J\n\014finallyB" + - "lock\030\003 \001(\01324.org.jetbrains.kotlin.serial" + - "ization.js.ast.Statement\"\224\001\n\005Catch\022G\n\tpa", - "rameter\030\001 \002(\01324.org.jetbrains.kotlin.ser" + - "ialization.js.ast.Parameter\022B\n\004body\030\002 \002(" + - "\01324.org.jetbrains.kotlin.serialization.j" + - "s.ast.Statement\"\007\n\005Empty\"\327\005\n\010Fragment\022R\n" + - "\017imported_module\030\001 \003(\01329.org.jetbrains.k" + - "otlin.serialization.js.ast.ImportedModul" + - "e\022G\n\014import_entry\030\002 \003(\01321.org.jetbrains." + - "kotlin.serialization.js.ast.Import\022Q\n\021de" + - "claration_block\030\003 \001(\01326.org.jetbrains.ko" + - "tlin.serialization.js.ast.GlobalBlock\022L\n", - "\014export_block\030\004 \001(\01326.org.jetbrains.kotl" + - "in.serialization.js.ast.GlobalBlock\022Q\n\021i" + - "nitializer_block\030\005 \001(\01326.org.jetbrains.k" + - "otlin.serialization.js.ast.GlobalBlock\022L" + - "\n\014name_binding\030\006 \003(\01326.org.jetbrains.kot" + - "lin.serialization.js.ast.NameBinding\022J\n\013" + - "class_model\030\007 \003(\01325.org.jetbrains.kotlin" + - ".serialization.js.ast.ClassModel\022P\n\021modu" + - "le_expression\030\010 \003(\01325.org.jetbrains.kotl" + - "in.serialization.js.ast.Expression\022N\n\rin", - "line_module\030\t \003(\01327.org.jetbrains.kotlin" + - ".serialization.js.ast.InlineModule\"\224\001\n\016I" + - "mportedModule\022\030\n\020external_name_id\030\001 \002(\005\022" + - "\030\n\020internal_name_id\030\002 \002(\005\022N\n\017plain_refer" + - "ence\030\003 \001(\01325.org.jetbrains.kotlin.serial" + - "ization.js.ast.Expression\"i\n\006Import\022\024\n\014s" + - "ignature_id\030\001 \002(\005\022I\n\nexpression\030\002 \002(\01325." + - "org.jetbrains.kotlin.serialization.js.as" + - "t.Expression\"3\n\013NameBinding\022\024\n\014signature" + - "_id\030\001 \002(\005\022\016\n\006nameId\030\002 \002(\005\"\214\001\n\nClassModel", - "\022\017\n\007name_id\030\001 \002(\005\022\025\n\rsuper_name_id\030\002 \001(\005" + - "\022V\n\026post_declaration_block\030\003 \001(\01326.org.j" + - "etbrains.kotlin.serialization.js.ast.Glo" + - "balBlock\";\n\014InlineModule\022\024\n\014signature_id" + - "\030\001 \002(\005\022\025\n\rexpression_id\030\002 \002(\005\"\034\n\013StringT" + - "able\022\r\n\005entry\030\001 \003(\t\"K\n\tNameTable\022>\n\005entr" + - "y\030\001 \003(\0132/.org.jetbrains.kotlin.serializa" + - "tion.js.ast.Name\"M\n\004Name\022\021\n\ttemporary\030\001 " + - "\002(\010\022\022\n\nidentifier\030\002 \001(\005\022\036\n\026signature_ref" + - "erence_id\030\003 \001(\005\"\346\001\n\005Chunk\022L\n\014string_tabl", - "e\030\001 \002(\01326.org.jetbrains.kotlin.serializa" + - "tion.js.ast.StringTable\022H\n\nname_table\030\002 " + - "\002(\01324.org.jetbrains.kotlin.serialization" + - ".js.ast.NameTable\022E\n\010fragment\030\003 \002(\01323.or" + + "ast.Expression\"\323\013\n\tStatement\022\016\n\006fileId\030\001" + + " \001(\005\022E\n\010location\030\002 \001(\01323.org.jetbrains.k" + + "otlin.serialization.js.ast.Location\022\030\n\ts" + + "ynthetic\030\003 \001(\010:\005false\022M\n\020return_statemen" + + "t\030\025 \001(\01321.org.jetbrains.kotlin.serializa" + + "tion.js.ast.ReturnH\000\022K\n\017throw_statement\030" + + "\026 \001(\01320.org.jetbrains.kotlin.serializati" + + "on.js.ast.ThrowH\000\022K\n\017break_statement\030\027 \001", + "(\01320.org.jetbrains.kotlin.serialization." + + "js.ast.BreakH\000\022Q\n\022continue_statement\030\030 \001" + + "(\01323.org.jetbrains.kotlin.serialization." + + "js.ast.ContinueH\000\022G\n\010debugger\030\031 \001(\01323.or" + "g.jetbrains.kotlin.serialization.js.ast." + - "Fragment*@\n\013SideEffects\022\021\n\rAFFECTS_STATE" + - "\020\001\022\024\n\020DEPENDS_ON_STATE\020\002\022\010\n\004PURE\020\003B\024B\022De" + - "bugJsAstProtoBuf" + "DebuggerH\000\022T\n\nexpression\030\032 \001(\0132>.org.jet" + + "brains.kotlin.serialization.js.ast.Expre" + + "ssionStatementH\000\022?\n\004vars\030\033 \001(\0132/.org.jet" + + "brains.kotlin.serialization.js.ast.VarsH" + + "\000\022A\n\005block\030\034 \001(\01320.org.jetbrains.kotlin.", + "serialization.js.ast.BlockH\000\022N\n\014global_b" + + "lock\030\035 \001(\01326.org.jetbrains.kotlin.serial" + + "ization.js.ast.GlobalBlockH\000\022A\n\005label\030\036 " + + "\001(\01320.org.jetbrains.kotlin.serialization" + + ".js.ast.LabelH\000\022E\n\014if_statement\030\037 \001(\0132-." + + "org.jetbrains.kotlin.serialization.js.as" + + "t.IfH\000\022M\n\020switch_statement\030 \001(\01321.org.j" + + "etbrains.kotlin.serialization.js.ast.Swi" + + "tchH\000\022K\n\017while_statement\030! \001(\01320.org.jet" + + "brains.kotlin.serialization.js.ast.While", + "H\000\022P\n\022do_while_statement\030\" \001(\01322.org.jet" + + "brains.kotlin.serialization.js.ast.DoWhi" + + "leH\000\022G\n\rfor_statement\030# \001(\0132..org.jetbra" + + "ins.kotlin.serialization.js.ast.ForH\000\022L\n" + + "\020for_in_statement\030$ \001(\01320.org.jetbrains." + + "kotlin.serialization.js.ast.ForInH\000\022G\n\rt" + + "ry_statement\030% \001(\0132..org.jetbrains.kotli" + + "n.serialization.js.ast.TryH\000\022A\n\005empty\030& " + + "\001(\01320.org.jetbrains.kotlin.serialization" + + ".js.ast.EmptyH\000B\013\n\tstatement\"N\n\006Return\022D", + "\n\005value\030\001 \001(\01325.org.jetbrains.kotlin.ser" + + "ialization.js.ast.Expression\"Q\n\005Throw\022H\n" + + "\texception\030\001 \002(\01325.org.jetbrains.kotlin." + + "serialization.js.ast.Expression\"\031\n\005Break" + + "\022\020\n\010label_id\030\001 \001(\005\"\034\n\010Continue\022\020\n\010label_" + + "id\030\001 \001(\005\"\n\n\010Debugger\"`\n\023ExpressionStatem" + + "ent\022I\n\nexpression\030\001 \002(\01325.org.jetbrains." + + "kotlin.serialization.js.ast.Expression\"\215" + + "\001\n\004Vars\022N\n\013declaration\030\001 \003(\01329.org.jetbr" + + "ains.kotlin.serialization.js.ast.VarDecl", + "aration\022\030\n\tmultiline\030\002 \001(\010:\005false\022\033\n\023exp" + + "orted_package_id\030\003 \001(\005\"o\n\016VarDeclaration" + + "\022\017\n\007name_id\030\001 \002(\005\022L\n\rinitial_value\030\002 \001(\013" + + "25.org.jetbrains.kotlin.serialization.js" + + ".ast.Expression\"P\n\005Block\022G\n\tstatement\030\001 " + + "\003(\01324.org.jetbrains.kotlin.serialization" + + ".js.ast.Statement\"V\n\013GlobalBlock\022G\n\tstat" + + "ement\030\001 \003(\01324.org.jetbrains.kotlin.seria" + + "lization.js.ast.Statement\"f\n\005Label\022\016\n\006na" + + "meId\030\001 \002(\005\022M\n\017inner_statement\030\002 \002(\01324.or", + "g.jetbrains.kotlin.serialization.js.ast." + + "Statement\"\352\001\n\002If\022H\n\tcondition\030\001 \002(\01325.or" + + "g.jetbrains.kotlin.serialization.js.ast." + + "Expression\022L\n\016then_statement\030\002 \002(\01324.org" + + ".jetbrains.kotlin.serialization.js.ast.S" + + "tatement\022L\n\016else_statement\030\003 \001(\01324.org.j" + + "etbrains.kotlin.serialization.js.ast.Sta" + + "tement\"\232\001\n\006Switch\022I\n\nexpression\030\001 \002(\01325." + + "org.jetbrains.kotlin.serialization.js.as" + + "t.Expression\022E\n\005entry\030\002 \003(\01326.org.jetbra", + "ins.kotlin.serialization.js.ast.SwitchEn" + + "try\"\234\001\n\013SwitchEntry\022D\n\005label\030\001 \001(\01325.org" + + ".jetbrains.kotlin.serialization.js.ast.E" + + "xpression\022G\n\tstatement\030\002 \003(\01324.org.jetbr" + + "ains.kotlin.serialization.js.ast.Stateme" + + "nt\"\225\001\n\005While\022H\n\tcondition\030\001 \002(\01325.org.je" + + "tbrains.kotlin.serialization.js.ast.Expr" + + "ession\022B\n\004body\030\002 \002(\01324.org.jetbrains.kot" + + "lin.serialization.js.ast.Statement\"\227\001\n\007D" + + "oWhile\022H\n\tcondition\030\001 \002(\01325.org.jetbrain", + "s.kotlin.serialization.js.ast.Expression" + + "\022B\n\004body\030\002 \002(\01324.org.jetbrains.kotlin.se" + + "rialization.js.ast.Statement\"\277\003\n\003For\022D\n\t" + + "variables\030\001 \001(\0132/.org.jetbrains.kotlin.s" + + "erialization.js.ast.VarsH\000\022K\n\nexpression" + + "\030\002 \001(\01325.org.jetbrains.kotlin.serializat" + + "ion.js.ast.ExpressionH\000\022E\n\005empty\030\003 \001(\01324" + + ".org.jetbrains.kotlin.serialization.js.a" + + "st.EmptyInitH\000\022H\n\tcondition\030\004 \001(\01325.org." + + "jetbrains.kotlin.serialization.js.ast.Ex", + "pression\022H\n\tincrement\030\005 \001(\01325.org.jetbra" + + "ins.kotlin.serialization.js.ast.Expressi" + + "on\022B\n\004body\030\006 \002(\01324.org.jetbrains.kotlin." + + "serialization.js.ast.StatementB\006\n\004init\"\013" + + "\n\tEmptyInit\"\374\001\n\005ForIn\022\020\n\006nameId\030\001 \001(\005H\000\022" + + "K\n\nexpression\030\002 \001(\01325.org.jetbrains.kotl" + + "in.serialization.js.ast.ExpressionH\000\022G\n\010" + + "iterable\030\003 \002(\01325.org.jetbrains.kotlin.se" + + "rialization.js.ast.Expression\022B\n\004body\030\004 " + + "\002(\01324.org.jetbrains.kotlin.serialization", + ".js.ast.StatementB\007\n\005value\"\337\001\n\003Try\022F\n\010tr" + + "yBlock\030\001 \002(\01324.org.jetbrains.kotlin.seri" + + "alization.js.ast.Statement\022D\n\ncatchBlock" + + "\030\002 \001(\01320.org.jetbrains.kotlin.serializat" + + "ion.js.ast.Catch\022J\n\014finallyBlock\030\003 \001(\01324" + + ".org.jetbrains.kotlin.serialization.js.a" + + "st.Statement\"\224\001\n\005Catch\022G\n\tparameter\030\001 \002(" + + "\01324.org.jetbrains.kotlin.serialization.j" + + "s.ast.Parameter\022B\n\004body\030\002 \002(\01324.org.jetb" + + "rains.kotlin.serialization.js.ast.Statem", + "ent\"\007\n\005Empty\"\327\005\n\010Fragment\022R\n\017imported_mo" + + "dule\030\001 \003(\01329.org.jetbrains.kotlin.serial" + + "ization.js.ast.ImportedModule\022G\n\014import_" + + "entry\030\002 \003(\01321.org.jetbrains.kotlin.seria" + + "lization.js.ast.Import\022Q\n\021declaration_bl" + + "ock\030\003 \001(\01326.org.jetbrains.kotlin.seriali" + + "zation.js.ast.GlobalBlock\022L\n\014export_bloc" + + "k\030\004 \001(\01326.org.jetbrains.kotlin.serializa" + + "tion.js.ast.GlobalBlock\022Q\n\021initializer_b" + + "lock\030\005 \001(\01326.org.jetbrains.kotlin.serial", + "ization.js.ast.GlobalBlock\022L\n\014name_bindi" + + "ng\030\006 \003(\01326.org.jetbrains.kotlin.serializ" + + "ation.js.ast.NameBinding\022J\n\013class_model\030" + + "\007 \003(\01325.org.jetbrains.kotlin.serializati" + + "on.js.ast.ClassModel\022P\n\021module_expressio" + + "n\030\010 \003(\01325.org.jetbrains.kotlin.serializa" + + "tion.js.ast.Expression\022N\n\rinline_module\030" + + "\t \003(\01327.org.jetbrains.kotlin.serializati" + + "on.js.ast.InlineModule\"\224\001\n\016ImportedModul" + + "e\022\030\n\020external_name_id\030\001 \002(\005\022\030\n\020internal_", + "name_id\030\002 \002(\005\022N\n\017plain_reference\030\003 \001(\01325" + + ".org.jetbrains.kotlin.serialization.js.a" + + "st.Expression\"i\n\006Import\022\024\n\014signature_id\030" + + "\001 \002(\005\022I\n\nexpression\030\002 \002(\01325.org.jetbrain" + + "s.kotlin.serialization.js.ast.Expression" + + "\"3\n\013NameBinding\022\024\n\014signature_id\030\001 \002(\005\022\016\n" + + "\006nameId\030\002 \002(\005\"\214\001\n\nClassModel\022\017\n\007name_id\030" + + "\001 \002(\005\022\025\n\rsuper_name_id\030\002 \001(\005\022V\n\026post_dec" + + "laration_block\030\003 \001(\01326.org.jetbrains.kot" + + "lin.serialization.js.ast.GlobalBlock\";\n\014", + "InlineModule\022\024\n\014signature_id\030\001 \002(\005\022\025\n\rex" + + "pression_id\030\002 \002(\005\"\034\n\013StringTable\022\r\n\005entr" + + "y\030\001 \003(\t\"K\n\tNameTable\022>\n\005entry\030\001 \003(\0132/.or" + + "g.jetbrains.kotlin.serialization.js.ast." + + "Name\"-\n\004Name\022\021\n\ttemporary\030\001 \002(\010\022\022\n\nident" + + "ifier\030\002 \001(\005\"\346\001\n\005Chunk\022L\n\014string_table\030\001 " + + "\002(\01326.org.jetbrains.kotlin.serialization" + + ".js.ast.StringTable\022H\n\nname_table\030\002 \002(\0132" + + "4.org.jetbrains.kotlin.serialization.js." + + "ast.NameTable\022E\n\010fragment\030\003 \002(\01323.org.je", + "tbrains.kotlin.serialization.js.ast.Frag" + + "ment*@\n\013SideEffects\022\021\n\rAFFECTS_STATE\020\001\022\024" + + "\n\020DEPENDS_ON_STATE\020\002\022\010\n\004PURE\020\003*?\n\016Inline" + + "Strategy\022\017\n\013AS_FUNCTION\020\000\022\014\n\010IN_PLACE\020\001\022" + + "\016\n\nNOT_INLINE\020\002B\024B\022DebugJsAstProtoBuf" }; org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -50015,19 +50360,19 @@ public final class DebugJsAstProtoBuf { internal_static_org_jetbrains_kotlin_serialization_js_ast_NameReference_fieldAccessorTable = new org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_js_ast_NameReference_descriptor, - new java.lang.String[] { "NameId", "Qualifier", }); + new java.lang.String[] { "NameId", "Qualifier", "InlineStrategy", }); internal_static_org_jetbrains_kotlin_serialization_js_ast_PropertyReference_descriptor = getDescriptor().getMessageTypes().get(22); internal_static_org_jetbrains_kotlin_serialization_js_ast_PropertyReference_fieldAccessorTable = new org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_js_ast_PropertyReference_descriptor, - new java.lang.String[] { "StringId", "Qualifier", }); + new java.lang.String[] { "StringId", "Qualifier", "InlineStrategy", }); internal_static_org_jetbrains_kotlin_serialization_js_ast_Invocation_descriptor = getDescriptor().getMessageTypes().get(23); internal_static_org_jetbrains_kotlin_serialization_js_ast_Invocation_fieldAccessorTable = new org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_org_jetbrains_kotlin_serialization_js_ast_Invocation_descriptor, - new java.lang.String[] { "Qualifier", "Argument", }); + new java.lang.String[] { "Qualifier", "Argument", "InlineStrategy", }); internal_static_org_jetbrains_kotlin_serialization_js_ast_Instantiation_descriptor = getDescriptor().getMessageTypes().get(24); internal_static_org_jetbrains_kotlin_serialization_js_ast_Instantiation_fieldAccessorTable = new diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt index f4bad4540e8..1cd5864e8a3 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.js.backend.ast -class JsImportedModule(val externalName: String, val internalName: JsName, val plainReference: JsExpression?) { +class JsImportedModule(val externalName: String, var internalName: JsName, val plainReference: JsExpression?) { val key = JsImportedModuleKey(externalName, plainReference?.toString()) } diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsNameBinding.kt b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsNameBinding.kt index 7985fc1d0c6..23a774438b4 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsNameBinding.kt +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsNameBinding.kt @@ -16,4 +16,4 @@ package org.jetbrains.kotlin.js.backend.ast -class JsNameBinding(val key: String, val name: JsName) \ No newline at end of file +class JsNameBinding(val key: String, var name: JsName) \ No newline at end of file diff --git a/js/js.serializer/src/js-ast.proto b/js/js.serializer/src/js-ast.proto index 5ae9b9302cb..c7d9cf2cca5 100644 --- a/js/js.serializer/src/js-ast.proto +++ b/js/js.serializer/src/js-ast.proto @@ -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 diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt index 1a64f817113..68a078bdf57 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt @@ -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) } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt index b58ea6d0c18..89836901ed0 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstDeserializer.kt @@ -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 withLocation(fileId: Int?, location: Location?, action: () -> T): T { val lastLocation = locationStack.peek() val deserializedLocation = if (fileId != null || location != null) { diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstProtoBuf.java b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstProtoBuf.java index 096c7e9be01..3aeeb2426fc 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstProtoBuf.java +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstProtoBuf.java @@ -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 { + /** + * AS_FUNCTION = 0; + */ + AS_FUNCTION(0, 0), + /** + * IN_PLACE = 1; + */ + IN_PLACE(1, 1), + /** + * NOT_INLINE = 2; + */ + NOT_INLINE(2, 2), + ; + + /** + * AS_FUNCTION = 0; + */ + public static final int AS_FUNCTION_VALUE = 0; + /** + * IN_PLACE = 1; + */ + public static final int IN_PLACE_VALUE = 1; + /** + * NOT_INLINE = 2; + */ + 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 + internalGetValueMap() { + return internalValueMap; + } + private static org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap + internalValueMap = + new org.jetbrains.kotlin.protobuf.Internal.EnumLiteMap() { + 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 { * optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2; */ org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression getQualifier(); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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 { * optional .org.jetbrains.kotlin.serialization.js.ast.Expression qualifier = 2; */ org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression getQualifier(); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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 { * repeated .org.jetbrains.kotlin.serialization.js.ast.Expression argument = 2; */ int getArgumentCount(); + + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + boolean hasInlineStrategy(); + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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_; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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; + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public boolean hasInlineStrategy() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy getInlineStrategy() { + return inlineStrategy_; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + public Builder setInlineStrategy(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.InlineStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + inlineStrategy_ = value; + + return this; + } + /** + * optional .org.jetbrains.kotlin.serialization.js.ast.InlineStrategy inline_strategy = 3 [default = NOT_INLINE]; + */ + 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) } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstSerializer.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstSerializer.kt index 59666c80a43..b136c492548 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstSerializer.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/ast/JsAstSerializer.kt @@ -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() diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 71b152004bf..568c590edf9 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -3443,6 +3443,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("js/js.translator/testData/box/incremental"), Pattern.compile("^([^_](.+))\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("inline.kt") + public void testInline() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/incremental/inline.kt"); + doTest(fileName); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/incremental/simple.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt index 34031b74f05..d88981a8e6f 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/general/Merger.kt @@ -44,7 +44,7 @@ class Merger(private val rootFunction: JsFunction, val internalModuleName: JsNam for ((key, importExpr) in fragment.imports) { if (declaredImports.add(key)) { val name = nameTable[key]!! - importBlock.statements += JsAstUtils.newVar(nameMap.rename(name), nameMap.rename(importExpr)) + importBlock.statements += JsAstUtils.newVar(name, importExpr) } } @@ -52,12 +52,7 @@ class Merger(private val rootFunction: JsFunction, val internalModuleName: JsNam initializerBlock.statements += fragment.initializerBlock addExportStatements(fragment) - classes += fragment.classes.values.map { cls -> - val name = nameMap.rename(cls.name) - name to JsClassModel(name, cls.superName?.let { nameMap.rename(it) }).also { copy -> - copy.postDeclarationBlock.statements += cls.postDeclarationBlock.statements.map { nameMap.rename(it) } - } - } + classes += fragment.classes } val importedModules: List @@ -113,6 +108,24 @@ class Merger(private val rootFunction: JsFunction, val internalModuleName: JsNam rename(fragment.declarationBlock) rename(fragment.exportBlock) rename(fragment.initializerBlock) + + fragment.nameBindings.forEach { it.name = rename(it.name) } + fragment.imports.entries.forEach { it.setValue(rename(it.value)) } + + fragment.importedModules.forEach { import -> + import.internalName = rename(import.internalName) + import.plainReference?.let { rename(it) } + } + + val classes = fragment.classes.values.map { cls -> + JsClassModel(rename(cls.name), cls.superName?.let { rename(it) }).apply { + postDeclarationBlock.statements += rename(cls.postDeclarationBlock).statements + } + } + fragment.classes.clear() + fragment.classes += classes.map { it.name to it } + + fragment.inlineModuleMap.forEach { (_, value) -> rename(value) } } private fun Map.rename(node: T): T { diff --git a/js/js.translator/testData/box/incremental/inline.kt b/js/js.translator/testData/box/incremental/inline.kt new file mode 100644 index 00000000000..a6e3bca5f1e --- /dev/null +++ b/js/js.translator/testData/box/incremental/inline.kt @@ -0,0 +1,17 @@ +// FILE: a.kt + +private inline fun bar(f: () -> String): String = "bar(${f()})" + +internal inline fun foo(f: () -> String): String = "foo(${bar(f)})" + +inline fun baz(f: () -> String): String = "baz(${f()})" + +// FILE: b.kt +// RECOMPILE + +fun box(): String { + val result = foo { "O" } + baz { "K" } + if (result != "foo(bar(O))baz(K)") return "fail: $result" + + return "OK" +} \ No newline at end of file