/* * Copyright 2010-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.kotlin.serialization.js.ast; option java_outer_classname = "JsAstProtoBuf"; option optimize_for = LITE_RUNTIME; message Location { required int32 startLine = 1; required int32 startChar = 2; } enum SideEffects { AFFECTS_STATE = 1; DEPENDS_ON_STATE = 2; PURE = 3; } // Expressions // message Expression { optional int32 fileId = 1; optional Location location = 2; optional bool synthetic = 3 [default = false]; optional SideEffects side_effects = 4 [default = AFFECTS_STATE]; optional int32 local_alias = 5; oneof expression { int32 simple_name_reference = 22; ThisLiteral this_literal = 23; NullLiteral null_literal = 24; TrueLiteral true_literal = 25; FalseLiteral false_literal = 26; int32 string_literal = 27; RegExpLiteral reg_exp_literal = 28; int32 int_literal = 29; double double_literal = 30; ArrayLiteral array_literal = 31; ObjectLiteral object_literal = 32; Function function = 33; DocComment doc_comment = 34; BinaryOperation binary = 35; UnaryOperation unary = 36; Conditional conditional = 37; ArrayAccess array_access = 38; NameReference name_reference = 39; PropertyReference property_reference = 40; Invocation invocation = 41; Instantiation instantiation = 42; } } message ThisLiteral { } message NullLiteral { } message TrueLiteral { } message FalseLiteral { } message RegExpLiteral { required int32 pattern_string_id = 1; optional int32 flags_string_id = 2; } message ArrayLiteral { repeated Expression element = 1; } message ObjectLiteral { repeated ObjectLiteralEntry entry = 1; optional bool multiline = 2 [default = true]; } message ObjectLiteralEntry { required Expression key = 1; required Expression value = 2; } message Function { repeated Parameter parameter = 1; optional int32 name_id = 2; required Statement body = 3; optional bool local = 4 [default = false]; } message Parameter { required int32 name_id = 1; optional bool has_default_value = 2 [default = false]; } message DocComment { repeated DocCommentTag tag = 1; } message DocCommentTag { required int32 name_id = 1; oneof value { int32 value_string_id = 2; Expression expression = 3; } } message BinaryOperation { required Expression left = 1; required Expression right = 2; required Type type = 3; enum Type { MUL = 1; DIV = 2; MOD = 3; ADD = 4; SUB = 5; SHL = 6; SHR = 7; SHRU = 8; LT = 9; LTE = 10; GT = 11; GTE = 12; INSTANCEOF = 13; IN = 14; EQ = 15; NEQ = 16; REF_EQ = 17; REF_NEQ = 18; BIT_AND = 19; BIT_XOR = 20; BIT_OR = 21; AND = 22; OR = 23; ASG = 24; ASG_ADD = 25; ASG_SUB = 26; ASG_MUL = 27; ASG_DIV = 28; ASG_MOD = 29; ASG_SHL = 30; ASG_SHR = 31; ASG_SHRU = 32; ASG_BIT_AND = 33; ASG_BIT_OR = 34; ASG_BIT_XOR = 35; COMMA = 36; } } message UnaryOperation { required Expression operand = 1; required Type type = 2; required bool postfix = 3; enum Type { BIT_NOT = 1; DEC = 2; DELETE = 3; INC = 4; NEG = 5; POS = 6; NOT = 7; TYPEOF = 8; VOID = 9; } } message Conditional { required Expression test_expression = 1; required Expression then_expression = 2; required Expression else_expression = 3; } message ArrayAccess { required Expression array = 1; required Expression index = 2; } 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 { required Expression qualifier = 1; repeated Expression argument = 2; } // Statements // message Statement { optional int32 fileId = 1; optional Location location = 2; optional bool synthetic = 3 [default = false]; oneof statement { Return return_statement = 21; Throw throw_statement = 22; Break break_statement = 23; Continue continue_statement = 24; Debugger debugger = 25; ExpressionStatement expression = 26; Vars vars = 27; Block block = 28; GlobalBlock global_block = 29; Label label = 30; If if_statement = 31; Switch switch_statement = 32; While while_statement = 33; DoWhile do_while_statement = 34; For for_statement = 35; ForIn for_in_statement = 36; Try try_statement = 37; Empty empty = 38; } } message Return { optional Expression value = 1; } message Throw { required Expression exception = 1; } message Break { optional int32 label_id = 1; } message Continue { optional int32 label_id = 1; } message Debugger { } message ExpressionStatement { required Expression expression = 1; optional int32 exported_tag_id = 2; } message Vars { repeated VarDeclaration declaration = 1; optional bool multiline = 2 [default = false]; optional int32 exported_package_id = 3; } message VarDeclaration { required int32 name_id = 1; optional Expression initial_value = 2; optional int32 fileId = 3; optional Location location = 4; } message Block { repeated Statement statement = 1; } message GlobalBlock { repeated Statement statement = 1; } message Label { required int32 nameId = 1; required Statement inner_statement = 2; } message If { required Expression condition = 1; required Statement then_statement = 2; optional Statement else_statement = 3; } message Switch { required Expression expression = 1; repeated SwitchEntry entry = 2; } message SwitchEntry { optional Expression label = 1; repeated Statement statement = 2; optional int32 fileId = 3; optional Location location = 4; } message While { required Expression condition = 1; required Statement body = 2; } message DoWhile { required Expression condition = 1; required Statement body = 2; } message For { oneof init { Statement variables = 1; Expression expression = 2; EmptyInit empty = 3; } optional Expression condition = 4; optional Expression increment = 5; required Statement body = 6; } message EmptyInit { } message ForIn { oneof value { int32 nameId = 1; Expression expression = 2; } required Expression iterable = 3; required Statement body = 4; } message Try { required Statement tryBlock = 1; optional Catch catchBlock = 2; optional Statement finallyBlock = 3; } message Catch { required Parameter parameter = 1; required Statement body = 2; } message Empty { } enum InlineStrategy { AS_FUNCTION = 0; IN_PLACE = 1; NOT_INLINE = 2; } // Fragment message Fragment { repeated ImportedModule imported_module = 1; repeated Import import_entry = 2; optional GlobalBlock declaration_block = 3; optional GlobalBlock export_block = 4; optional GlobalBlock initializer_block = 5; repeated NameBinding name_binding = 6; repeated ClassModel class_model = 7; repeated Expression module_expression = 8; repeated InlineModule inline_module = 9; } message ImportedModule { required int32 external_name_id = 1; required int32 internal_name_id = 2; optional Expression plain_reference = 3; } message Import { required int32 signature_id = 1; required Expression expression = 2; } message NameBinding { required int32 signature_id = 1; required int32 nameId = 2; } message ClassModel { required int32 name_id = 1; optional int32 super_name_id = 2; repeated int32 interface_name_id = 4; optional GlobalBlock post_declaration_block = 3; } message InlineModule { required int32 signature_id = 1; required int32 expression_id = 2; } // Tables // message StringTable { repeated string entry = 1; } message NameTable { repeated Name entry = 1; } message Name { required bool temporary = 1; optional int32 identifier = 2; optional int32 local_name_id = 3; optional bool imported = 4 [default = false]; optional SpecialFunction special_function = 5; } enum SpecialFunction { DEFINE_INLINE_FUNCTION = 1; WRAP_FUNCTION = 2; TO_BOXED_CHAR = 3; UNBOX_CHAR = 4; SUSPEND_CALL = 5; COROUTINE_RESULT = 6; COROUTINE_CONTROLLER = 7; COROUTINE_RECEIVER = 8; SET_COROUTINE_RESULT = 9; } // Chunk // message Chunk { required StringTable string_table = 1; required NameTable name_table = 2; required Fragment fragment = 3; }