
.kotlin.kotlin-compiler.1.3.61.source-code.KotlinIr.proto Maven / Gradle / Ivy
syntax = "proto2";
package org.jetbrains.kotlin.backend.common.serialization.proto;
option java_multiple_files = true;
option java_outer_classname = "KotlinIr";
option optimize_for = LITE_RUNTIME;
message DescriptorReference {
required FqName package_fq_name = 1;
required FqName class_fq_name = 2;
required IrDataIndex name = 3;
optional UniqId uniq_id = 4;
optional bool is_getter = 5 [default = false];
optional bool is_setter = 6 [default = false];
optional bool is_backing_field = 7 [default = false];
optional bool is_fake_override = 8 [default = false];
optional bool is_default_constructor = 9 [default = false];
optional bool is_enum_entry = 10 [default = false];
optional bool is_enum_special = 11 [default = false];
optional bool is_type_parameter = 12 [default = false];
}
message UniqId {
required uint64 index = 1;
required bool isLocal = 2;
}
message Coordinates {
required int32 start_offset = 1;
required int32 end_offset = 2;
}
message Visibility {
required IrDataIndex name = 1;
}
message IrStatementOrigin {
required IrDataIndex name = 1;
}
enum KnownOrigin {
CUSTOM = 1;
DEFINED = 2;
FAKE_OVERRIDE = 3;
FOR_LOOP_ITERATOR = 4;
FOR_LOOP_VARIABLE = 5;
FOR_LOOP_IMPLICIT_VARIABLE = 6;
PROPERTY_BACKING_FIELD = 7;
DEFAULT_PROPERTY_ACCESSOR = 8;
DELEGATE = 9;
DELEGATED_PROPERTY_ACCESSOR = 10;
DELEGATED_MEMBER = 11;
ENUM_CLASS_SPECIAL_MEMBER = 12;
FUNCTION_FOR_DEFAULT_PARAMETER = 13;
FILE_CLASS = 14;
GENERATED_DATA_CLASS_MEMBER = 15;
GENERATED_INLINE_CLASS_MEMBER = 16;
LOCAL_FUNCTION_FOR_LAMBDA = 17;
CATCH_PARAMETER = 19;
INSTANCE_RECEIVER = 20;
PRIMARY_CONSTRUCTOR_PARAMETER = 21;
IR_TEMPORARY_VARIABLE = 22;
IR_EXTERNAL_DECLARATION_STUB = 23;
IR_EXTERNAL_JAVA_DECLARATION_STUB = 24;
IR_BUILTINS_STUB = 25;
BRIDGE = 26;
FIELD_FOR_ENUM_ENTRY = 27;
FIELD_FOR_ENUM_VALUES = 28;
FIELD_FOR_OBJECT_INSTANCE = 29;
}
message IrDeclarationOrigin {
oneof either {
KnownOrigin origin = 1;
IrDataIndex custom = 2;
}
}
message IrDataIndex {
required int32 index = 1;
}
message FqName {
repeated IrDataIndex segment = 1;
}
/* ------ Top Level---------------------------------------------- */
message IrDeclarationContainer {
repeated IrDeclaration declaration = 1;
}
message FileEntry {
required string name = 1;
repeated int32 line_start_offsets = 2;
}
message IrFile {
repeated UniqId declaration_id = 1;
required FileEntry file_entry = 2;
required FqName fq_name = 3;
required Annotations annotations = 4;
repeated IrDataIndex explicitly_exported_to_compiler = 5;
}
//message IrModule {
// required string name = 1;
// repeated IrFile file = 2;
//}
/* ------ String Table ------------------------------------------ */
message StringTable {
repeated string strings = 1;
}
/* ------ IrSymbols --------------------------------------------- */
enum IrSymbolKind {
FUNCTION_SYMBOL = 1;
CONSTRUCTOR_SYMBOL = 2;
ENUM_ENTRY_SYMBOL = 3;
FIELD_SYMBOL = 4;
VALUE_PARAMETER_SYMBOL = 5;
RETURNABLE_BLOCK_SYMBOL = 6;
CLASS_SYMBOL = 7;
TYPE_PARAMETER_SYMBOL = 8;
VARIABLE_SYMBOL = 9;
ANONYMOUS_INIT_SYMBOL = 10;
STANDALONE_FIELD_SYMBOL = 11; // For fields without properties. WrappedFieldDescriptor, rather than WrappedPropertyDescriptor.
RECEIVER_PARAMETER_SYMBOL = 12; // ReceiverParameterDescriptor rather than ValueParameterDescriptor.
PROPERTY_SYMBOL = 13;
LOCAL_DELEGATED_PROPERTY_SYMBOL = 14;
TYPEALIAS_SYMBOL = 15;
}
message IrSymbolData {
required IrSymbolKind kind = 1;
required UniqId uniq_id = 2;
required UniqId top_level_uniq_id = 3;
optional FqName fqname = 4;
optional DescriptorReference descriptor_reference = 5;
}
message IrSymbolTable {
repeated IrSymbolData symbols = 1;
}
/* ------ IrTypes --------------------------------------------- */
enum IrTypeVariance { // Should we import metadata variance, or better stay separate?
IN = 0;
OUT = 1;
INV = 2;
}
message Annotations {
repeated IrConstructorCall annotation = 1;
}
message TypeArguments {
repeated IrDataIndex type_argument = 1;
}
message IrStarProjection {
optional bool void = 1;
}
message IrTypeProjection {
required IrTypeVariance variance = 1;
required IrDataIndex type = 2;
}
message IrTypeArgument {
oneof kind {
IrStarProjection star = 1;
IrTypeProjection type = 2;
}
}
message IrSimpleType {
required Annotations annotations = 1;
required IrDataIndex classifier = 2;
required bool has_question_mark = 3;
repeated IrTypeArgument argument = 4;
optional IrTypeAbbreviation abbreviation = 5;
}
message IrTypeAbbreviation {
required Annotations annotations = 1;
required IrDataIndex type_alias = 2;
required bool has_question_mark = 3;
repeated IrTypeArgument argument = 4;
}
message IrDynamicType {
required Annotations annotations = 1;
}
message IrErrorType {
required Annotations annotations = 1;
}
message IrType {
oneof kind {
IrSimpleType simple = 1;
IrDynamicType dynamic = 2;
IrErrorType error = 3;
}
}
message IrTypeTable {
repeated IrType types = 1;
}
/* ------ IrExpressions --------------------------------------------- */
message IrBreak {
required int32 loop_id = 1;
optional IrDataIndex label = 2;
}
message IrBlock {
optional IrStatementOrigin origin = 1;
repeated IrStatement statement = 2;
}
message MemberAccessCommon {
optional IrExpression dispatch_receiver = 1;
optional IrExpression extension_receiver = 2;
repeated NullableIrExpression value_argument = 3;
required TypeArguments type_arguments = 4;
}
message IrCall {
required IrDataIndex symbol = 1;
required MemberAccessCommon member_access = 2;
optional IrDataIndex super = 3;
optional IrStatementOrigin origin = 4;
}
message IrConstructorCall {
required IrDataIndex symbol = 1;
required int32 constructor_type_arguments_count = 2;
required MemberAccessCommon member_access = 3;
}
message IrFunctionReference {
required IrDataIndex symbol = 1;
optional IrStatementOrigin origin = 2;
required MemberAccessCommon member_access = 3;
}
message IrLocalDelegatedPropertyReference {
required IrDataIndex delegate = 1;
optional IrDataIndex getter = 2;
optional IrDataIndex setter = 3;
required IrDataIndex symbol = 4;
optional IrStatementOrigin origin = 5;
}
message IrPropertyReference {
optional IrDataIndex field = 1;
optional IrDataIndex getter = 2;
optional IrDataIndex setter = 3;
optional IrStatementOrigin origin = 4;
required MemberAccessCommon member_access = 5;
required IrDataIndex symbol = 6;
}
message IrComposite {
repeated IrStatement statement = 1;
optional IrStatementOrigin origin = 2;
}
message IrClassReference {
required IrDataIndex class_symbol = 1;
required IrDataIndex class_type = 2;
}
message IrConst {
oneof value {
bool null = 1;
bool boolean = 2;
int32 char = 3;
int32 byte = 4;
int32 short = 5;
int32 int = 6;
int64 long = 7;
float float = 8;
double double = 9;
IrDataIndex string = 10;
}
}
message IrContinue {
required int32 loop_id = 1;
optional IrDataIndex label = 2;
}
message IrDelegatingConstructorCall {
required IrDataIndex symbol = 1;
required MemberAccessCommon member_access = 2;
}
message IrDoWhile {
required Loop loop = 1;
}
message IrEnumConstructorCall {
required IrDataIndex symbol = 1;
required MemberAccessCommon member_access = 2;
}
message IrGetClass {
required IrExpression argument = 1;
}
message IrGetEnumValue {
required IrDataIndex symbol = 2;
}
message FieldAccessCommon {
required IrDataIndex symbol = 1;
optional IrDataIndex super = 2;
optional IrExpression receiver = 3;
}
message IrGetField {
required FieldAccessCommon field_access = 1;
optional IrStatementOrigin origin = 2;
}
message IrGetValue {
required IrDataIndex symbol = 1;
optional IrStatementOrigin origin = 2;
}
message IrGetObject {
required IrDataIndex symbol = 1;
}
message IrInstanceInitializerCall {
required IrDataIndex symbol = 1;
}
message Loop {
required int32 loop_id = 1;
required IrExpression condition = 2;
optional IrDataIndex label = 3;
optional IrExpression body = 4;
optional IrStatementOrigin origin = 5;
}
message IrReturn {
required IrDataIndex return_target = 1;
required IrExpression value = 2;
}
message IrSetField {
required FieldAccessCommon field_access = 1;
required IrExpression value = 2;
optional IrStatementOrigin origin = 3;
}
message IrSetVariable {
required IrDataIndex symbol = 1;
required IrExpression value = 2;
optional IrStatementOrigin origin = 3;
}
message IrSpreadElement {
required IrExpression expression = 1;
required Coordinates coordinates = 2;
}
message IrStringConcat {
repeated IrExpression argument = 1;
}
message IrThrow {
required IrExpression value = 1;
}
message IrTry {
required IrExpression result = 1;
repeated IrStatement catch = 2;
optional IrExpression finally = 3;
}
message IrTypeOp {
required IrTypeOperator operator = 1;
required IrDataIndex operand = 2;
required IrExpression argument = 3;
}
message IrVararg {
required IrDataIndex element_type = 1;
repeated IrVarargElement element = 2;
}
message IrVarargElement {
oneof vararg_element {
IrExpression expression = 1;
IrSpreadElement spread_element = 2;
}
}
message IrWhen {
repeated IrStatement branch = 1;
optional IrStatementOrigin origin = 2;
}
message IrWhile {
required Loop loop = 1;
}
message IrFunctionExpression {
required IrFunction function = 1;
required IrStatementOrigin origin = 2;
}
/* ------ Dynamic expression --------------------------------------------- */
message IrDynamicMemberExpression {
required IrDataIndex memberName = 1;
required IrExpression receiver = 2;
}
message IrDynamicOperatorExpression {
enum IrDynamicOperator {
UNARY_PLUS = 1;
UNARY_MINUS = 2;
EXCL = 3;
PREFIX_INCREMENT = 4;
POSTFIX_INCREMENT = 5;
PREFIX_DECREMENT = 6;
POSTFIX_DECREMENT = 7;
BINARY_PLUS = 8;
BINARY_MINUS = 9;
MUL = 10;
DIV = 11;
MOD = 12;
GT = 13;
LT = 14;
GE = 15;
LE = 16;
EQEQ = 17;
EXCLEQ = 18;
EQEQEQ = 19;
EXCLEQEQ = 20;
ANDAND = 21;
OROR = 22;
EQ = 23;
PLUSEQ = 24;
MINUSEQ = 25;
MULEQ = 26;
DIVEQ = 27;
MODEQ = 28;
ARRAY_ACCESS = 29;
INVOKE = 30;
}
required IrDynamicOperator operator = 1;
required IrExpression receiver = 2;
repeated IrExpression argument = 3;
}
// TODO: we need an extension mechanism to accomodate new
// IR operators in upcoming releases.
message IrOperation {
oneof operation {
IrBlock block = 1;
IrBreak break = 2;
IrCall call = 3;
IrClassReference class_reference = 4;
IrComposite composite = 5;
IrConst const = 6;
IrContinue continue = 7;
IrDelegatingConstructorCall delegating_constructor_call = 8;
IrDoWhile do_while = 9;
IrEnumConstructorCall enum_constructor_call = 10;
IrFunctionReference function_reference = 11;
IrGetClass get_class = 12;
IrGetEnumValue get_enum_value = 13;
IrGetField get_field = 14;
IrGetObject get_object = 15;
IrGetValue get_value = 16;
IrInstanceInitializerCall instance_initializer_call = 17;
IrPropertyReference property_reference = 18;
IrReturn return = 19;
IrSetField set_field = 20;
IrSetVariable set_variable = 21;
IrStringConcat string_concat = 22;
IrThrow throw = 23;
IrTry try = 24;
IrTypeOp type_op = 25;
IrVararg vararg = 26;
IrWhen when = 27;
IrWhile while = 28;
IrDynamicMemberExpression dynamic_member = 29;
IrDynamicOperatorExpression dynamic_operator = 30;
IrLocalDelegatedPropertyReference local_delegated_property_reference = 31;
IrConstructorCall constructor_call = 32;
IrFunctionExpression function_expression = 33;
}
}
enum IrTypeOperator {
CAST = 1;
IMPLICIT_CAST = 2;
IMPLICIT_NOTNULL = 3;
IMPLICIT_COERCION_TO_UNIT = 4;
IMPLICIT_INTEGER_COERCION = 5;
SAFE_CAST = 6;
INSTANCEOF = 7;
NOT_INSTANCEOF = 8;
SAM_CONVERSION = 9;
IMPLICIT_DYNAMIC_CAST = 10;
}
message IrExpression {
required IrOperation operation = 1;
required IrDataIndex type = 2;
required Coordinates coordinates = 3;
}
message NullableIrExpression {
optional IrExpression expression = 1;
}
/* ------ Declarations --------------------------------------------- */
message IrDeclarationBase {
required IrDataIndex symbol = 1;
required IrDeclarationOrigin origin = 2;
required Coordinates coordinates = 3;
required Annotations annotations = 4;
}
message IrFunctionBase {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required Visibility visibility = 3;
required bool is_inline = 4;
required bool is_external = 5;
required IrTypeParameterContainer type_parameters = 6;
optional IrValueParameter dispatch_receiver = 7;
optional IrValueParameter extension_receiver = 8;
repeated IrValueParameter value_parameter = 9;
optional IrDataIndex body = 10;
required IrDataIndex return_type = 11;
}
message IrFunction {
required IrFunctionBase base = 1;
required ModalityKind modality = 2;
required bool is_tailrec = 3;
required bool is_suspend = 4;
repeated IrDataIndex overridden = 5;
//optional UniqId corresponding_property = 7;
}
message IrConstructor {
required IrFunctionBase base = 1;
required bool is_primary = 2;
}
message IrField {
required IrDeclarationBase base = 1;
optional IrDataIndex initializer = 2;
required IrDataIndex name = 3;
required Visibility visibility = 4;
required bool is_final = 5;
required bool is_external = 6;
required bool is_static = 7;
required IrDataIndex type = 8;
}
message IrLocalDelegatedProperty {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required IrDataIndex type = 3;
required bool is_var = 4;
required IrVariable delegate = 5;
optional IrFunction getter = 6;
optional IrFunction setter = 7;
}
message IrProperty {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required Visibility visibility = 3;
required ModalityKind modality = 4;
required bool is_var = 5;
required bool is_const = 6;
required bool is_lateinit = 7;
required bool is_delegated = 8;
required bool is_external = 9;
optional IrField backing_field = 10;
optional IrFunction getter = 11;
optional IrFunction setter = 12;
}
message IrVariable {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required IrDataIndex type = 3;
required bool is_var = 4;
required bool is_const = 5;
required bool is_lateinit = 6;
optional IrExpression initializer = 7;
}
enum ClassKind {
CLASS = 1;
INTERFACE = 2;
ENUM_CLASS = 3;
ENUM_ENTRY = 4;
ANNOTATION_CLASS = 5;
OBJECT = 6;
}
enum ModalityKind { // It is ModalityKind to not clash with Modality in descriptor metadata.
FINAL_MODALITY = 1;
SEALED_MODALITY = 2;
OPEN_MODALITY = 3;
ABSTRACT_MODALITY = 4;
}
message IrValueParameter {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required int32 index = 3;
required IrDataIndex type = 4;
optional IrDataIndex vararg_element_type = 5;
required bool is_crossinline = 6;
required bool is_noinline = 7;
optional IrDataIndex default_value = 8;
}
message IrTypeParameter {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required int32 index = 3;
required IrTypeVariance variance = 4;
repeated IrDataIndex super_type = 5;
required bool is_reified = 6;
}
message IrTypeParameterContainer {
repeated IrTypeParameter type_parameter = 1;
}
message IrClass {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required ClassKind kind = 3;
required Visibility visibility = 4;
required ModalityKind modality = 5;
// TODO: consider using flags for the booleans.
required bool is_companion = 6;
required bool is_inner = 7;
required bool is_data = 8;
required bool is_external = 9;
required bool is_inline = 10;
optional IrValueParameter this_receiver = 11;
required IrTypeParameterContainer type_parameters = 12;
required IrDeclarationContainer declaration_container = 13;
repeated IrDataIndex super_type = 14;
}
message IrTypeAlias {
required IrDeclarationBase base = 1;
required IrDataIndex name = 2;
required Visibility visibility = 3;
required IrTypeParameterContainer type_parameters = 4;
required IrDataIndex expanded_type = 5;
required bool is_actual = 6;
}
message IrEnumEntry {
required IrDeclarationBase base = 1;
optional IrDataIndex initializer = 2;
optional IrClass corresponding_class = 3;
required IrDataIndex name = 4;
}
message IrAnonymousInit {
required IrDeclarationBase base = 1;
required IrDataIndex body = 2;
}
// TODO: we need an extension mechanism to accomodate new
// IR operators in upcoming releases.
message IrDeclaration {
oneof declarator {
IrAnonymousInit ir_anonymous_init = 1;
IrClass ir_class = 2;
IrConstructor ir_constructor = 3;
IrEnumEntry ir_enum_entry = 4;
IrField ir_field = 5;
IrFunction ir_function = 6;
IrProperty ir_property = 7;
IrTypeParameter ir_type_parameter = 8;
IrVariable ir_variable = 9;
IrValueParameter ir_value_parameter = 10;
IrLocalDelegatedProperty ir_local_delegated_property = 11;
IrTypeAlias ir_type_alias = 12;
}
}
/* ------- IrStatements --------------------------------------------- */
message IrBranch {
required IrExpression condition = 1;
required IrExpression result = 2;
}
message IrBlockBody {
repeated IrStatement statement = 1;
}
message IrCatch {
required IrVariable catch_parameter = 1;
required IrExpression result = 2;
}
enum IrSyntheticBodyKind {
ENUM_VALUES = 1;
ENUM_VALUEOF = 2;
}
message IrSyntheticBody {
required IrSyntheticBodyKind kind = 1;
}
// Let's try to map IrElement as well as IrStatement to IrStatement.
message IrStatement {
required Coordinates coordinates = 1;
oneof statement {
IrDeclaration declaration = 2;
IrExpression expression = 3;
IrBlockBody block_body = 4;
IrBranch branch = 5;
IrCatch catch = 6;
IrSyntheticBody synthetic_body = 7;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy