diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll
index c4134d240ab..b4def7fe4ae 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/Opcode.qll
@@ -30,6 +30,7 @@ private newtype TOpcode =
TNegate() or
TShiftLeft() or
TShiftRight() or
+ TUnsignedShiftRight() or
TBitAnd() or
TBitOr() or
TBitXor() or
@@ -652,6 +653,15 @@ module Opcode {
final override string toString() { result = "ShiftRight" }
}
+ /**
+ * The `Opcode` for a `UnsignedShiftRightInstruction`.
+ *
+ * See the `UnsignedShiftRightInstruction` documentation for more details.
+ */
+ class UnsignedShiftRight extends BinaryBitwiseOpcode, TUnsignedShiftRight {
+ final override string toString() { result = "UnsignedShiftRight" }
+ }
+
/**
* The `Opcode` for a `BitAndInstruction`.
*
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll
index 7afe954023b..0aa7c552638 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll
@@ -1204,6 +1204,17 @@ class ShiftRightInstruction extends BinaryBitwiseInstruction {
ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight }
}
+/**
+ * An instruction that shifts its left operand to the right by the number of bits specified by its
+ * right operand.
+ *
+ * Both operands must have an integer type. The result has the same type as the left operand.
+ * The leftmost bits are zero-filled.
+ */
+class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction {
+ UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight }
+}
+
/**
* An instruction that performs a binary arithmetic operation involving at least one pointer
* operand.
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll
index 7afe954023b..0aa7c552638 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll
@@ -1204,6 +1204,17 @@ class ShiftRightInstruction extends BinaryBitwiseInstruction {
ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight }
}
+/**
+ * An instruction that shifts its left operand to the right by the number of bits specified by its
+ * right operand.
+ *
+ * Both operands must have an integer type. The result has the same type as the left operand.
+ * The leftmost bits are zero-filled.
+ */
+class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction {
+ UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight }
+}
+
/**
* An instruction that performs a binary arithmetic operation involving at least one pointer
* operand.
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll
index 7afe954023b..0aa7c552638 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll
@@ -1204,6 +1204,17 @@ class ShiftRightInstruction extends BinaryBitwiseInstruction {
ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight }
}
+/**
+ * An instruction that shifts its left operand to the right by the number of bits specified by its
+ * right operand.
+ *
+ * Both operands must have an integer type. The result has the same type as the left operand.
+ * The leftmost bits are zero-filled.
+ */
+class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction {
+ UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight }
+}
+
/**
* An instruction that performs a binary arithmetic operation involving at least one pointer
* operand.
diff --git a/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/expressions.ql b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/expressions.ql
new file mode 100644
index 00000000000..6afabce797e
--- /dev/null
+++ b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/expressions.ql
@@ -0,0 +1,13 @@
+class Expression extends @expr {
+ string toString() { none() }
+}
+
+class TypeOrRef extends @type_or_ref {
+ string toString() { none() }
+}
+
+from Expression e, int k, int kind, TypeOrRef t
+where
+ expressions(e, k, t) and
+ if k = [133, 134] then kind = 106 else kind = k
+select e, kind, t
diff --git a/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/old.dbscheme b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/old.dbscheme
new file mode 100644
index 00000000000..d0fba103f7d
--- /dev/null
+++ b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/old.dbscheme
@@ -0,0 +1,2069 @@
+/* This is a dummy line to alter the dbscheme, so we can make a database upgrade
+ * without actually changing any of the dbscheme predicates. It contains a date
+ * to allow for such updates in the future as well.
+ *
+ * 2021-07-14
+ *
+ * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a
+ * previously seen state (matching a previously seen SHA), which would make the upgrade
+ * mechanism not work properly.
+ */
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | --compiler
+ * 1 | *path to compiler*
+ * 2 | f1.cs
+ * 3 | f2.cs
+ * 4 | f3.cs
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.cs
+ * 1 | f2.cs
+ * 2 | f3.cs
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The references used by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | ref1.dll
+ * 1 | ref2.dll
+ * 2 | ref3.dll
+ */
+#keyset[id, num]
+compilation_referencing_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+extractor_messages(
+ unique int id: @extractor_message,
+ int severity: int ref,
+ string origin : string ref,
+ string text : string ref,
+ string entity : string ref,
+ int location: @location_default ref,
+ string stack_trace : string ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+compilation_assembly(
+ unique int id : @compilation ref,
+ int assembly: @assembly ref
+)
+
+// Populated by the CSV extractor
+externalData(
+ int id: @externalDataElement,
+ string path: string ref,
+ int column: int ref,
+ string value: string ref);
+
+sourceLocationPrefix(
+ string prefix: string ref);
+
+/*
+ * C# dbscheme
+ */
+
+/** ELEMENTS **/
+
+@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration
+ | @using_directive | @type_parameter_constraints | @externalDataElement
+ | @xmllocatable | @asp_element | @namespace | @preprocessor_directive;
+
+@declaration = @callable | @generic | @assignable | @namespace;
+
+@named_element = @namespace | @declaration;
+
+@declaration_with_accessors = @property | @indexer | @event;
+
+@assignable = @variable | @assignable_with_accessors | @event;
+
+@assignable_with_accessors = @property | @indexer;
+
+@attributable = @assembly | @field | @parameter | @operator | @method | @constructor
+ | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors
+ | @local_function | @lambda_expr;
+
+/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/
+
+@location = @location_default | @assembly;
+
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+locations_mapped(
+ unique int id: @location_default ref,
+ int mapped_to: @location_default ref);
+
+@sourceline = @file | @callable | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref);
+
+assemblies(
+ unique int id: @assembly,
+ int file: @file ref,
+ string fullname: string ref,
+ string name: string ref,
+ string version: string ref);
+
+files(
+ unique int id: @file,
+ string name: string ref);
+
+folders(
+ unique int id: @folder,
+ string name: string ref);
+
+@container = @folder | @file ;
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref);
+
+file_extraction_mode(
+ unique int file: @file ref,
+ int mode: int ref
+ /* 0 = normal, 1 = standalone extractor */
+ );
+
+/** NAMESPACES **/
+
+@type_container = @namespace | @type;
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref);
+
+namespace_declarations(
+ unique int id: @namespace_declaration,
+ int namespace_id: @namespace ref);
+
+namespace_declaration_location(
+ unique int id: @namespace_declaration ref,
+ int loc: @location ref);
+
+parent_namespace(
+ unique int child_id: @type_container ref,
+ int namespace_id: @namespace ref);
+
+@declaration_or_directive = @namespace_declaration | @type | @using_directive;
+
+parent_namespace_declaration(
+ int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes
+ int namespace_id: @namespace_declaration ref);
+
+@using_directive = @using_namespace_directive | @using_static_directive;
+
+using_global(
+ unique int id: @using_directive ref
+);
+
+using_namespace_directives(
+ unique int id: @using_namespace_directive,
+ int namespace_id: @namespace ref);
+
+using_static_directives(
+ unique int id: @using_static_directive,
+ int type_id: @type_or_ref ref);
+
+using_directive_location(
+ unique int id: @using_directive ref,
+ int loc: @location ref);
+
+@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning
+ | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if
+ | @directive_elif | @directive_else | @directive_endif;
+
+@conditional_directive = @directive_if | @directive_elif;
+@branch_directive = @directive_if | @directive_elif | @directive_else;
+
+directive_ifs(
+ unique int id: @directive_if,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref); /* 0: false, 1: true */
+
+directive_elifs(
+ unique int id: @directive_elif,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+directive_elses(
+ unique int id: @directive_else,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+#keyset[id, start]
+directive_endifs(
+ unique int id: @directive_endif,
+ unique int start: @directive_if ref);
+
+directive_define_symbols(
+ unique int id: @define_symbol_expr ref,
+ string name: string ref);
+
+directive_regions(
+ unique int id: @directive_region,
+ string name: string ref);
+
+#keyset[id, start]
+directive_endregions(
+ unique int id: @directive_endregion,
+ unique int start: @directive_region ref);
+
+directive_lines(
+ unique int id: @directive_line,
+ int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */
+
+directive_line_value(
+ unique int id: @directive_line ref,
+ int line: int ref);
+
+directive_line_file(
+ unique int id: @directive_line ref,
+ int file: @file ref);
+
+directive_line_offset(
+ unique int id: @directive_line ref,
+ int offset: int ref);
+
+directive_line_span(
+ unique int id: @directive_line ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+directive_nullables(
+ unique int id: @directive_nullable,
+ int setting: int ref, /* 0: disable, 1: enable, 2: restore */
+ int target: int ref); /* 0: none, 1: annotations, 2: warnings */
+
+directive_warnings(
+ unique int id: @directive_warning,
+ string message: string ref);
+
+directive_errors(
+ unique int id: @directive_error,
+ string message: string ref);
+
+directive_undefines(
+ unique int id: @directive_undefine,
+ string name: string ref);
+
+directive_defines(
+ unique int id: @directive_define,
+ string name: string ref);
+
+pragma_checksums(
+ unique int id: @pragma_checksum,
+ int file: @file ref,
+ string guid: string ref,
+ string bytes: string ref);
+
+pragma_warnings(
+ unique int id: @pragma_warning,
+ int kind: int ref /* 0 = disable, 1 = restore */);
+
+#keyset[id, index]
+pragma_warning_error_codes(
+ int id: @pragma_warning ref,
+ string errorCode: string ref,
+ int index: int ref);
+
+preprocessor_directive_location(
+ unique int id: @preprocessor_directive ref,
+ int loc: @location ref);
+
+preprocessor_directive_compilation(
+ unique int id: @preprocessor_directive ref,
+ int compilation: @compilation ref);
+
+preprocessor_directive_active(
+ unique int id: @preprocessor_directive ref,
+ int active: int ref); /* 0: false, 1: true */
+
+/** TYPES **/
+
+types(
+ unique int id: @type,
+ int kind: int ref,
+ string name: string ref);
+
+case @type.kind of
+ 1 = @bool_type
+| 2 = @char_type
+| 3 = @decimal_type
+| 4 = @sbyte_type
+| 5 = @short_type
+| 6 = @int_type
+| 7 = @long_type
+| 8 = @byte_type
+| 9 = @ushort_type
+| 10 = @uint_type
+| 11 = @ulong_type
+| 12 = @float_type
+| 13 = @double_type
+| 14 = @enum_type
+| 15 = @struct_type
+| 17 = @class_type
+| 19 = @interface_type
+| 20 = @delegate_type
+| 21 = @null_type
+| 22 = @type_parameter
+| 23 = @pointer_type
+| 24 = @nullable_type
+| 25 = @array_type
+| 26 = @void_type
+| 27 = @int_ptr_type
+| 28 = @uint_ptr_type
+| 29 = @dynamic_type
+| 30 = @arglist_type
+| 31 = @unknown_type
+| 32 = @tuple_type
+| 33 = @function_pointer_type
+ ;
+
+@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type;
+@integral_type = @signed_integral_type | @unsigned_integral_type;
+@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type;
+@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type;
+@floating_point_type = @float_type | @double_type;
+@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type
+ | @uint_ptr_type | @tuple_type;
+@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type
+ | @dynamic_type;
+@value_or_ref_type = @value_type | @ref_type;
+
+typerefs(
+ unique int id: @typeref,
+ string name: string ref);
+
+typeref_type(
+ int id: @typeref ref,
+ unique int typeId: @type ref);
+
+@type_or_ref = @type | @typeref;
+
+array_element_type(
+ unique int array: @array_type ref,
+ int dimension: int ref,
+ int rank: int ref,
+ int element: @type_or_ref ref);
+
+nullable_underlying_type(
+ unique int nullable: @nullable_type ref,
+ int underlying: @type_or_ref ref);
+
+pointer_referent_type(
+ unique int pointer: @pointer_type ref,
+ int referent: @type_or_ref ref);
+
+enum_underlying_type(
+ unique int enum_id: @enum_type ref,
+ int underlying_type_id: @type_or_ref ref);
+
+delegate_return_type(
+ unique int delegate_id: @delegate_type ref,
+ int return_type_id: @type_or_ref ref);
+
+function_pointer_return_type(
+ unique int function_pointer_id: @function_pointer_type ref,
+ int return_type_id: @type_or_ref ref);
+
+extend(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+anonymous_types(
+ unique int id: @type ref);
+
+@interface_or_ref = @interface_type | @typeref;
+
+implement(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+type_location(
+ int id: @type ref,
+ int loc: @location ref);
+
+tuple_underlying_type(
+ unique int tuple: @tuple_type ref,
+ int struct: @type_or_ref ref);
+
+#keyset[tuple, index]
+tuple_element(
+ int tuple: @tuple_type ref,
+ int index: int ref,
+ unique int field: @field ref);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ int type_id: @type_or_ref ref,
+ int target: @attributable ref);
+
+case @attribute.kind of
+ 0 = @attribute_default
+| 1 = @attribute_return
+| 2 = @attribute_assembly
+| 3 = @attribute_module
+;
+
+attribute_location(
+ int id: @attribute ref,
+ int loc: @location ref);
+
+@type_mention_parent = @element | @type_mention;
+
+type_mention(
+ unique int id: @type_mention,
+ int type_id: @type_or_ref ref,
+ int parent: @type_mention_parent ref);
+
+type_mention_location(
+ unique int id: @type_mention ref,
+ int loc: @location ref);
+
+@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type;
+
+/**
+ * A direct annotation on an entity, for example `string? x;`.
+ *
+ * Annotations:
+ * 2 = reftype is not annotated "!"
+ * 3 = reftype is annotated "?"
+ * 4 = readonly ref type / in parameter
+ * 5 = ref type parameter, return or local variable
+ * 6 = out parameter
+ *
+ * Note that the annotation depends on the element it annotates.
+ * @assignable: The annotation is on the type of the assignable, for example the variable type.
+ * @type_parameter: The annotation is on the reftype constraint
+ * @callable: The annotation is on the return type
+ * @array_type: The annotation is on the element type
+ */
+type_annotation(int id: @has_type_annotation ref, int annotation: int ref);
+
+nullability(unique int nullability: @nullability, int kind: int ref);
+
+case @nullability.kind of
+ 0 = @oblivious
+| 1 = @not_annotated
+| 2 = @annotated
+;
+
+#keyset[parent, index]
+nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref)
+
+type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref);
+
+/**
+ * The nullable flow state of an expression, as determined by Roslyn.
+ * 0 = none (default, not populated)
+ * 1 = not null
+ * 2 = maybe null
+ */
+expr_flowstate(unique int id: @expr ref, int state: int ref);
+
+/** GENERICS **/
+
+@generic = @type | @method | @local_function;
+
+type_parameters(
+ unique int id: @type_parameter ref,
+ int index: int ref,
+ int generic_id: @generic ref,
+ int variance: int ref /* none = 0, out = 1, in = 2 */);
+
+#keyset[constructed_id, index]
+type_arguments(
+ int id: @type_or_ref ref,
+ int index: int ref,
+ int constructed_id: @generic_or_ref ref);
+
+@generic_or_ref = @generic | @typeref;
+
+constructed_generic(
+ unique int constructed: @generic ref,
+ int generic: @generic_or_ref ref);
+
+type_parameter_constraints(
+ unique int id: @type_parameter_constraints,
+ int param_id: @type_parameter ref);
+
+type_parameter_constraints_location(
+ int id: @type_parameter_constraints ref,
+ int loc: @location ref);
+
+general_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int kind: int ref /* class = 1, struct = 2, new = 3 */);
+
+specific_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref);
+
+specific_type_parameter_nullability(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref,
+ int nullability: @nullability ref);
+
+/** FUNCTION POINTERS */
+
+function_pointer_calling_conventions(
+ int id: @function_pointer_type ref,
+ int kind: int ref);
+
+#keyset[id, index]
+has_unmanaged_calling_conventions(
+ int id: @function_pointer_type ref,
+ int index: int ref,
+ int conv_id: @type_or_ref ref);
+
+/** MODIFIERS */
+
+@modifiable = @modifiable_direct | @event_accessor;
+
+@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr;
+
+modifiers(
+ unique int id: @modifier,
+ string name: string ref);
+
+has_modifiers(
+ int id: @modifiable_direct ref,
+ int mod_id: @modifier ref);
+
+compiler_generated(unique int id: @modifiable ref);
+
+/** MEMBERS **/
+
+@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type;
+
+@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr;
+
+@virtualizable = @method | @property | @indexer | @event;
+
+exprorstmt_name(
+ unique int parent_id: @named_exprorstmt ref,
+ string name: string ref);
+
+nested_types(
+ unique int id: @type ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @type ref);
+
+properties(
+ unique int id: @property,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @property ref);
+
+property_location(
+ int id: @property ref,
+ int loc: @location ref);
+
+indexers(
+ unique int id: @indexer,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @indexer ref);
+
+indexer_location(
+ int id: @indexer ref,
+ int loc: @location ref);
+
+accessors(
+ unique int id: @accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_member_id: @member ref,
+ int unbound_id: @accessor ref);
+
+case @accessor.kind of
+ 1 = @getter
+| 2 = @setter
+ ;
+
+init_only_accessors(
+ unique int id: @accessor ref);
+
+accessor_location(
+ int id: @accessor ref,
+ int loc: @location ref);
+
+events(
+ unique int id: @event,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @event ref);
+
+event_location(
+ int id: @event ref,
+ int loc: @location ref);
+
+event_accessors(
+ unique int id: @event_accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_event_id: @event ref,
+ int unbound_id: @event_accessor ref);
+
+case @event_accessor.kind of
+ 1 = @add_event_accessor
+| 2 = @remove_event_accessor
+ ;
+
+event_accessor_location(
+ int id: @event_accessor ref,
+ int loc: @location ref);
+
+operators(
+ unique int id: @operator,
+ string name: string ref,
+ string symbol: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @operator ref);
+
+operator_location(
+ int id: @operator ref,
+ int loc: @location ref);
+
+constant_value(
+ int id: @variable ref,
+ string value: string ref);
+
+/** CALLABLES **/
+
+@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function;
+
+@callable_accessor = @accessor | @event_accessor;
+
+methods(
+ unique int id: @method,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @method ref);
+
+method_location(
+ int id: @method ref,
+ int loc: @location ref);
+
+constructors(
+ unique int id: @constructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @constructor ref);
+
+constructor_location(
+ int id: @constructor ref,
+ int loc: @location ref);
+
+destructors(
+ unique int id: @destructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @destructor ref);
+
+destructor_location(
+ int id: @destructor ref,
+ int loc: @location ref);
+
+overrides(
+ int id: @callable ref,
+ int base_id: @callable ref);
+
+explicitly_implements(
+ int id: @member ref,
+ int interface_id: @interface_or_ref ref);
+
+local_functions(
+ unique int id: @local_function,
+ string name: string ref,
+ int return_type: @type ref,
+ int unbound_id: @local_function ref);
+
+local_function_stmts(
+ unique int fn: @local_function_stmt ref,
+ int stmt: @local_function ref);
+
+/** VARIABLES **/
+
+@variable = @local_scope_variable | @field;
+
+@local_scope_variable = @local_variable | @parameter;
+
+fields(
+ unique int id: @field,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @field ref);
+
+case @field.kind of
+ 1 = @addressable_field
+| 2 = @constant
+ ;
+
+field_location(
+ int id: @field ref,
+ int loc: @location ref);
+
+localvars(
+ unique int id: @local_variable,
+ int kind: int ref,
+ string name: string ref,
+ int implicitly_typed: int ref /* 0 = no, 1 = yes */,
+ int type_id: @type_or_ref ref,
+ int parent_id: @local_var_decl_expr ref);
+
+case @local_variable.kind of
+ 1 = @addressable_local_variable
+| 2 = @local_constant
+| 3 = @local_variable_ref
+ ;
+
+localvar_location(
+ unique int id: @local_variable ref,
+ int loc: @location ref);
+
+@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type;
+
+#keyset[name, parent_id]
+#keyset[index, parent_id]
+params(
+ unique int id: @parameter,
+ string name: string ref,
+ int type_id: @type_or_ref ref,
+ int index: int ref,
+ int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */
+ int parent_id: @parameterizable ref,
+ int unbound_id: @parameter ref);
+
+param_location(
+ int id: @parameter ref,
+ int loc: @location ref);
+
+/** STATEMENTS **/
+
+@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent;
+
+statements(
+ unique int id: @stmt,
+ int kind: int ref);
+
+#keyset[index, parent]
+stmt_parent(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_stmt_parent = @callable;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+stmt_parent_top_level(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @top_level_stmt_parent ref);
+
+case @stmt.kind of
+ 1 = @block_stmt
+| 2 = @expr_stmt
+| 3 = @if_stmt
+| 4 = @switch_stmt
+| 5 = @while_stmt
+| 6 = @do_stmt
+| 7 = @for_stmt
+| 8 = @foreach_stmt
+| 9 = @break_stmt
+| 10 = @continue_stmt
+| 11 = @goto_stmt
+| 12 = @goto_case_stmt
+| 13 = @goto_default_stmt
+| 14 = @throw_stmt
+| 15 = @return_stmt
+| 16 = @yield_stmt
+| 17 = @try_stmt
+| 18 = @checked_stmt
+| 19 = @unchecked_stmt
+| 20 = @lock_stmt
+| 21 = @using_block_stmt
+| 22 = @var_decl_stmt
+| 23 = @const_decl_stmt
+| 24 = @empty_stmt
+| 25 = @unsafe_stmt
+| 26 = @fixed_stmt
+| 27 = @label_stmt
+| 28 = @catch
+| 29 = @case_stmt
+| 30 = @local_function_stmt
+| 31 = @using_decl_stmt
+ ;
+
+@using_stmt = @using_block_stmt | @using_decl_stmt;
+
+@labeled_stmt = @label_stmt | @case;
+
+@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt;
+
+@cond_stmt = @if_stmt | @switch_stmt;
+
+@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt;
+
+@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt
+ | @yield_stmt;
+
+@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt;
+
+
+stmt_location(
+ unique int id: @stmt ref,
+ int loc: @location ref);
+
+catch_type(
+ unique int catch_id: @catch ref,
+ int type_id: @type_or_ref ref,
+ int kind: int ref /* explicit = 1, implicit = 2 */);
+
+foreach_stmt_info(
+ unique int id: @foreach_stmt ref,
+ int kind: int ref /* non-async = 1, async = 2 */);
+
+@foreach_symbol = @method | @property | @type_or_ref;
+
+#keyset[id, kind]
+foreach_stmt_desugar(
+ int id: @foreach_stmt ref,
+ int symbol: @foreach_symbol ref,
+ int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */);
+
+/** EXPRESSIONS **/
+
+expressions(
+ unique int id: @expr,
+ int kind: int ref,
+ int type_id: @type_or_ref ref);
+
+#keyset[index, parent]
+expr_parent(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif;
+
+@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+expr_parent_top_level(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @top_level_exprorstmt_parent ref);
+
+case @expr.kind of
+/* literal */
+ 1 = @bool_literal_expr
+| 2 = @char_literal_expr
+| 3 = @decimal_literal_expr
+| 4 = @int_literal_expr
+| 5 = @long_literal_expr
+| 6 = @uint_literal_expr
+| 7 = @ulong_literal_expr
+| 8 = @float_literal_expr
+| 9 = @double_literal_expr
+| 10 = @string_literal_expr
+| 11 = @null_literal_expr
+/* primary & unary */
+| 12 = @this_access_expr
+| 13 = @base_access_expr
+| 14 = @local_variable_access_expr
+| 15 = @parameter_access_expr
+| 16 = @field_access_expr
+| 17 = @property_access_expr
+| 18 = @method_access_expr
+| 19 = @event_access_expr
+| 20 = @indexer_access_expr
+| 21 = @array_access_expr
+| 22 = @type_access_expr
+| 23 = @typeof_expr
+| 24 = @method_invocation_expr
+| 25 = @delegate_invocation_expr
+| 26 = @operator_invocation_expr
+| 27 = @cast_expr
+| 28 = @object_creation_expr
+| 29 = @explicit_delegate_creation_expr
+| 30 = @implicit_delegate_creation_expr
+| 31 = @array_creation_expr
+| 32 = @default_expr
+| 33 = @plus_expr
+| 34 = @minus_expr
+| 35 = @bit_not_expr
+| 36 = @log_not_expr
+| 37 = @post_incr_expr
+| 38 = @post_decr_expr
+| 39 = @pre_incr_expr
+| 40 = @pre_decr_expr
+/* multiplicative */
+| 41 = @mul_expr
+| 42 = @div_expr
+| 43 = @rem_expr
+/* additive */
+| 44 = @add_expr
+| 45 = @sub_expr
+/* shift */
+| 46 = @lshift_expr
+| 47 = @rshift_expr
+/* relational */
+| 48 = @lt_expr
+| 49 = @gt_expr
+| 50 = @le_expr
+| 51 = @ge_expr
+/* equality */
+| 52 = @eq_expr
+| 53 = @ne_expr
+/* logical */
+| 54 = @bit_and_expr
+| 55 = @bit_xor_expr
+| 56 = @bit_or_expr
+| 57 = @log_and_expr
+| 58 = @log_or_expr
+/* type testing */
+| 59 = @is_expr
+| 60 = @as_expr
+/* null coalescing */
+| 61 = @null_coalescing_expr
+/* conditional */
+| 62 = @conditional_expr
+/* assignment */
+| 63 = @simple_assign_expr
+| 64 = @assign_add_expr
+| 65 = @assign_sub_expr
+| 66 = @assign_mul_expr
+| 67 = @assign_div_expr
+| 68 = @assign_rem_expr
+| 69 = @assign_and_expr
+| 70 = @assign_xor_expr
+| 71 = @assign_or_expr
+| 72 = @assign_lshift_expr
+| 73 = @assign_rshift_expr
+/* more */
+| 74 = @object_init_expr
+| 75 = @collection_init_expr
+| 76 = @array_init_expr
+| 77 = @checked_expr
+| 78 = @unchecked_expr
+| 79 = @constructor_init_expr
+| 80 = @add_event_expr
+| 81 = @remove_event_expr
+| 82 = @par_expr
+| 83 = @local_var_decl_expr
+| 84 = @lambda_expr
+| 85 = @anonymous_method_expr
+| 86 = @namespace_expr
+/* dynamic */
+| 92 = @dynamic_element_access_expr
+| 93 = @dynamic_member_access_expr
+/* unsafe */
+| 100 = @pointer_indirection_expr
+| 101 = @address_of_expr
+| 102 = @sizeof_expr
+/* async */
+| 103 = @await_expr
+/* C# 6.0 */
+| 104 = @nameof_expr
+| 105 = @interpolated_string_expr
+| 106 = @unknown_expr
+/* C# 7.0 */
+| 107 = @throw_expr
+| 108 = @tuple_expr
+| 109 = @local_function_invocation_expr
+| 110 = @ref_expr
+| 111 = @discard_expr
+/* C# 8.0 */
+| 112 = @range_expr
+| 113 = @index_expr
+| 114 = @switch_expr
+| 115 = @recursive_pattern_expr
+| 116 = @property_pattern_expr
+| 117 = @positional_pattern_expr
+| 118 = @switch_case_expr
+| 119 = @assign_coalesce_expr
+| 120 = @suppress_nullable_warning_expr
+| 121 = @namespace_access_expr
+/* C# 9.0 */
+| 122 = @lt_pattern_expr
+| 123 = @gt_pattern_expr
+| 124 = @le_pattern_expr
+| 125 = @ge_pattern_expr
+| 126 = @not_pattern_expr
+| 127 = @and_pattern_expr
+| 128 = @or_pattern_expr
+| 129 = @function_pointer_invocation_expr
+| 130 = @with_expr
+/* C# 11.0 */
+| 131 = @list_pattern_expr
+| 132 = @slice_pattern_expr
+| 133 = @urshift_expr
+| 134 = @assign_urshift_expr
+/* Preprocessor */
+| 999 = @define_symbol_expr
+;
+
+@switch = @switch_stmt | @switch_expr;
+@case = @case_stmt | @switch_case_expr;
+@pattern_match = @case | @is_expr;
+@unary_pattern_expr = @not_pattern_expr;
+@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr;
+@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr;
+
+@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr;
+@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr;
+@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr
+ | @string_literal_expr | @null_literal_expr;
+
+@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr;
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr;
+@assign_event_expr = @add_event_expr | @remove_event_expr;
+
+@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
+ | @assign_rem_expr
+@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
+ | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr;
+
+@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr
+ | @method_access_expr | @type_access_expr | @dynamic_member_access_expr;
+@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr;
+@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr;
+
+@local_variable_access = @local_variable_access_expr | @local_var_decl_expr;
+@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access;
+@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr;
+
+@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr
+ | @event_access_expr | @dynamic_member_access_expr;
+
+@objectorcollection_init_expr = @object_init_expr | @collection_init_expr;
+
+@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr;
+
+@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr;
+@incr_op_expr = @pre_incr_expr | @post_incr_expr;
+@decr_op_expr = @pre_decr_expr | @post_decr_expr;
+@mut_op_expr = @incr_op_expr | @decr_op_expr;
+@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr;
+@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr;
+
+@ternary_log_op_expr = @conditional_expr;
+@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr;
+@un_log_op_expr = @log_not_expr;
+@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr;
+
+@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr
+ | @rshift_expr | @urshift_expr;
+@un_bit_op_expr = @bit_not_expr;
+@bit_expr = @un_bit_op_expr | @bin_bit_op_expr;
+
+@equality_op_expr = @eq_expr | @ne_expr;
+@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr;
+@comp_expr = @equality_op_expr | @rel_op_expr;
+
+@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op;
+
+@ternary_op = @ternary_log_op_expr;
+@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr;
+@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr
+ | @pointer_indirection_expr | @address_of_expr;
+
+@anonymous_function_expr = @lambda_expr | @anonymous_method_expr;
+
+@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr
+ | @delegate_invocation_expr | @object_creation_expr | @call_access_expr
+ | @local_function_invocation_expr | @function_pointer_invocation_expr;
+
+@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr;
+
+@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr
+ | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr;
+
+@throw_element = @throw_expr | @throw_stmt;
+
+@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr;
+
+implicitly_typed_array_creation(
+ unique int id: @array_creation_expr ref);
+
+explicitly_sized_array_creation(
+ unique int id: @array_creation_expr ref);
+
+stackalloc_array_creation(
+ unique int id: @array_creation_expr ref);
+
+implicitly_typed_object_creation(
+ unique int id: @implicitly_typeable_object_creation_expr ref);
+
+mutator_invocation_mode(
+ unique int id: @operator_invocation_expr ref,
+ int mode: int ref /* prefix = 1, postfix = 2*/);
+
+expr_compiler_generated(
+ unique int id: @expr ref);
+
+expr_value(
+ unique int id: @expr ref,
+ string value: string ref);
+
+expr_call(
+ unique int caller_id: @expr ref,
+ int target_id: @callable ref);
+
+expr_access(
+ unique int accesser_id: @access_expr ref,
+ int target_id: @accessible ref);
+
+@accessible = @method | @assignable | @local_function | @namespace;
+
+expr_location(
+ unique int id: @expr ref,
+ int loc: @location ref);
+
+dynamic_member_name(
+ unique int id: @late_bindable_expr ref,
+ string name: string ref);
+
+@qualifiable_expr = @member_access_expr
+ | @method_invocation_expr
+ | @element_access_expr;
+
+conditional_access(
+ unique int id: @qualifiable_expr ref);
+
+expr_argument(
+ unique int id: @expr ref,
+ int mode: int ref);
+ /* mode is the same as params: value = 0, ref = 1, out = 2 */
+
+expr_argument_name(
+ unique int id: @expr ref,
+ string name: string ref);
+
+lambda_expr_return_type(
+ unique int id: @lambda_expr ref,
+ int type_id: @type_or_ref ref);
+
+/** CONTROL/DATA FLOW **/
+
+@control_flow_element = @stmt | @expr;
+
+/* XML Files */
+
+xmlEncoding (
+ unique int id: @file ref,
+ string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/* Comments */
+
+commentline(
+ unique int id: @commentline,
+ int kind: int ref,
+ string text: string ref,
+ string rawtext: string ref);
+
+case @commentline.kind of
+ 0 = @singlelinecomment
+| 1 = @xmldoccomment
+| 2 = @multilinecomment;
+
+commentline_location(
+ unique int id: @commentline ref,
+ int loc: @location ref);
+
+commentblock(
+ unique int id : @commentblock);
+
+commentblock_location(
+ unique int id: @commentblock ref,
+ int loc: @location ref);
+
+commentblock_binding(
+ int id: @commentblock ref,
+ int entity: @element ref,
+ int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */
+
+commentblock_child(
+ int id: @commentblock ref,
+ int commentline: @commentline ref,
+ int index: int ref);
+
+/* ASP.NET */
+
+case @asp_element.kind of
+ 0=@asp_close_tag
+| 1=@asp_code
+| 2=@asp_comment
+| 3=@asp_data_binding
+| 4=@asp_directive
+| 5=@asp_open_tag
+| 6=@asp_quoted_string
+| 7=@asp_text
+| 8=@asp_xml_directive;
+
+@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string;
+
+asp_elements(
+ unique int id: @asp_element,
+ int kind: int ref,
+ int loc: @location ref);
+
+asp_comment_server(unique int comment: @asp_comment ref);
+asp_code_inline(unique int code: @asp_code ref);
+asp_directive_attribute(
+ int directive: @asp_directive ref,
+ int index: int ref,
+ string name: string ref,
+ int value: @asp_quoted_string ref);
+asp_directive_name(
+ unique int directive: @asp_directive ref,
+ string name: string ref);
+asp_element_body(
+ unique int element: @asp_element ref,
+ string body: string ref);
+asp_tag_attribute(
+ int tag: @asp_open_tag ref,
+ int index: int ref,
+ string name: string ref,
+ int attribute: @asp_attribute ref);
+asp_tag_name(
+ unique int tag: @asp_open_tag ref,
+ string name: string ref);
+asp_tag_isempty(int tag: @asp_open_tag ref);
+
+/* Common Intermediate Language - CIL */
+
+case @cil_instruction.opcode of
+ 0 = @cil_nop
+| 1 = @cil_break
+| 2 = @cil_ldarg_0
+| 3 = @cil_ldarg_1
+| 4 = @cil_ldarg_2
+| 5 = @cil_ldarg_3
+| 6 = @cil_ldloc_0
+| 7 = @cil_ldloc_1
+| 8 = @cil_ldloc_2
+| 9 = @cil_ldloc_3
+| 10 = @cil_stloc_0
+| 11 = @cil_stloc_1
+| 12 = @cil_stloc_2
+| 13 = @cil_stloc_3
+| 14 = @cil_ldarg_s
+| 15 = @cil_ldarga_s
+| 16 = @cil_starg_s
+| 17 = @cil_ldloc_s
+| 18 = @cil_ldloca_s
+| 19 = @cil_stloc_s
+| 20 = @cil_ldnull
+| 21 = @cil_ldc_i4_m1
+| 22 = @cil_ldc_i4_0
+| 23 = @cil_ldc_i4_1
+| 24 = @cil_ldc_i4_2
+| 25 = @cil_ldc_i4_3
+| 26 = @cil_ldc_i4_4
+| 27 = @cil_ldc_i4_5
+| 28 = @cil_ldc_i4_6
+| 29 = @cil_ldc_i4_7
+| 30 = @cil_ldc_i4_8
+| 31 = @cil_ldc_i4_s
+| 32 = @cil_ldc_i4
+| 33 = @cil_ldc_i8
+| 34 = @cil_ldc_r4
+| 35 = @cil_ldc_r8
+| 37 = @cil_dup
+| 38 = @cil_pop
+| 39 = @cil_jmp
+| 40 = @cil_call
+| 41 = @cil_calli
+| 42 = @cil_ret
+| 43 = @cil_br_s
+| 44 = @cil_brfalse_s
+| 45 = @cil_brtrue_s
+| 46 = @cil_beq_s
+| 47 = @cil_bge_s
+| 48 = @cil_bgt_s
+| 49 = @cil_ble_s
+| 50 = @cil_blt_s
+| 51 = @cil_bne_un_s
+| 52 = @cil_bge_un_s
+| 53 = @cil_bgt_un_s
+| 54 = @cil_ble_un_s
+| 55 = @cil_blt_un_s
+| 56 = @cil_br
+| 57 = @cil_brfalse
+| 58 = @cil_brtrue
+| 59 = @cil_beq
+| 60 = @cil_bge
+| 61 = @cil_bgt
+| 62 = @cil_ble
+| 63 = @cil_blt
+| 64 = @cil_bne_un
+| 65 = @cil_bge_un
+| 66 = @cil_bgt_un
+| 67 = @cil_ble_un
+| 68 = @cil_blt_un
+| 69 = @cil_switch
+| 70 = @cil_ldind_i1
+| 71 = @cil_ldind_u1
+| 72 = @cil_ldind_i2
+| 73 = @cil_ldind_u2
+| 74 = @cil_ldind_i4
+| 75 = @cil_ldind_u4
+| 76 = @cil_ldind_i8
+| 77 = @cil_ldind_i
+| 78 = @cil_ldind_r4
+| 79 = @cil_ldind_r8
+| 80 = @cil_ldind_ref
+| 81 = @cil_stind_ref
+| 82 = @cil_stind_i1
+| 83 = @cil_stind_i2
+| 84 = @cil_stind_i4
+| 85 = @cil_stind_i8
+| 86 = @cil_stind_r4
+| 87 = @cil_stind_r8
+| 88 = @cil_add
+| 89 = @cil_sub
+| 90 = @cil_mul
+| 91 = @cil_div
+| 92 = @cil_div_un
+| 93 = @cil_rem
+| 94 = @cil_rem_un
+| 95 = @cil_and
+| 96 = @cil_or
+| 97 = @cil_xor
+| 98 = @cil_shl
+| 99 = @cil_shr
+| 100 = @cil_shr_un
+| 101 = @cil_neg
+| 102 = @cil_not
+| 103 = @cil_conv_i1
+| 104 = @cil_conv_i2
+| 105 = @cil_conv_i4
+| 106 = @cil_conv_i8
+| 107 = @cil_conv_r4
+| 108 = @cil_conv_r8
+| 109 = @cil_conv_u4
+| 110 = @cil_conv_u8
+| 111 = @cil_callvirt
+| 112 = @cil_cpobj
+| 113 = @cil_ldobj
+| 114 = @cil_ldstr
+| 115 = @cil_newobj
+| 116 = @cil_castclass
+| 117 = @cil_isinst
+| 118 = @cil_conv_r_un
+| 121 = @cil_unbox
+| 122 = @cil_throw
+| 123 = @cil_ldfld
+| 124 = @cil_ldflda
+| 125 = @cil_stfld
+| 126 = @cil_ldsfld
+| 127 = @cil_ldsflda
+| 128 = @cil_stsfld
+| 129 = @cil_stobj
+| 130 = @cil_conv_ovf_i1_un
+| 131 = @cil_conv_ovf_i2_un
+| 132 = @cil_conv_ovf_i4_un
+| 133 = @cil_conv_ovf_i8_un
+| 134 = @cil_conv_ovf_u1_un
+| 135 = @cil_conv_ovf_u2_un
+| 136 = @cil_conv_ovf_u4_un
+| 137 = @cil_conv_ovf_u8_un
+| 138 = @cil_conv_ovf_i_un
+| 139 = @cil_conv_ovf_u_un
+| 140 = @cil_box
+| 141 = @cil_newarr
+| 142 = @cil_ldlen
+| 143 = @cil_ldelema
+| 144 = @cil_ldelem_i1
+| 145 = @cil_ldelem_u1
+| 146 = @cil_ldelem_i2
+| 147 = @cil_ldelem_u2
+| 148 = @cil_ldelem_i4
+| 149 = @cil_ldelem_u4
+| 150 = @cil_ldelem_i8
+| 151 = @cil_ldelem_i
+| 152 = @cil_ldelem_r4
+| 153 = @cil_ldelem_r8
+| 154 = @cil_ldelem_ref
+| 155 = @cil_stelem_i
+| 156 = @cil_stelem_i1
+| 157 = @cil_stelem_i2
+| 158 = @cil_stelem_i4
+| 159 = @cil_stelem_i8
+| 160 = @cil_stelem_r4
+| 161 = @cil_stelem_r8
+| 162 = @cil_stelem_ref
+| 163 = @cil_ldelem
+| 164 = @cil_stelem
+| 165 = @cil_unbox_any
+| 179 = @cil_conv_ovf_i1
+| 180 = @cil_conv_ovf_u1
+| 181 = @cil_conv_ovf_i2
+| 182 = @cil_conv_ovf_u2
+| 183 = @cil_conv_ovf_i4
+| 184 = @cil_conv_ovf_u4
+| 185 = @cil_conv_ovf_i8
+| 186 = @cil_conv_ovf_u8
+| 194 = @cil_refanyval
+| 195 = @cil_ckinfinite
+| 198 = @cil_mkrefany
+| 208 = @cil_ldtoken
+| 209 = @cil_conv_u2
+| 210 = @cil_conv_u1
+| 211 = @cil_conv_i
+| 212 = @cil_conv_ovf_i
+| 213 = @cil_conv_ovf_u
+| 214 = @cil_add_ovf
+| 215 = @cil_add_ovf_un
+| 216 = @cil_mul_ovf
+| 217 = @cil_mul_ovf_un
+| 218 = @cil_sub_ovf
+| 219 = @cil_sub_ovf_un
+| 220 = @cil_endfinally
+| 221 = @cil_leave
+| 222 = @cil_leave_s
+| 223 = @cil_stind_i
+| 224 = @cil_conv_u
+| 65024 = @cil_arglist
+| 65025 = @cil_ceq
+| 65026 = @cil_cgt
+| 65027 = @cil_cgt_un
+| 65028 = @cil_clt
+| 65029 = @cil_clt_un
+| 65030 = @cil_ldftn
+| 65031 = @cil_ldvirtftn
+| 65033 = @cil_ldarg
+| 65034 = @cil_ldarga
+| 65035 = @cil_starg
+| 65036 = @cil_ldloc
+| 65037 = @cil_ldloca
+| 65038 = @cil_stloc
+| 65039 = @cil_localloc
+| 65041 = @cil_endfilter
+| 65042 = @cil_unaligned
+| 65043 = @cil_volatile
+| 65044 = @cil_tail
+| 65045 = @cil_initobj
+| 65046 = @cil_constrained
+| 65047 = @cil_cpblk
+| 65048 = @cil_initblk
+| 65050 = @cil_rethrow
+| 65052 = @cil_sizeof
+| 65053 = @cil_refanytype
+| 65054 = @cil_readonly
+;
+
+// CIL ignored instructions
+
+@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned;
+
+// CIL local/parameter/field access
+
+@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga;
+@cil_starg_any = @cil_starg | @cil_starg_s;
+
+@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca;
+@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc;
+
+@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda;
+@cil_stfld_any = @cil_stfld | @cil_stsfld;
+
+@cil_local_access = @cil_stloc_any | @cil_ldloc_any;
+@cil_arg_access = @cil_starg_any | @cil_ldarg_any;
+@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any;
+@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any;
+
+@cil_stack_access = @cil_local_access | @cil_arg_access;
+@cil_field_access = @cil_ldfld_any | @cil_stfld_any;
+
+@cil_access = @cil_read_access | @cil_write_access;
+
+// CIL constant/literal instructions
+
+@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8;
+
+@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 |
+ @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4;
+
+@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8;
+
+@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr;
+
+// Control flow
+
+@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump;
+@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s |
+ @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s |
+ @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt |
+ @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un;
+@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch;
+@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any;
+@cil_leave_any = @cil_leave | @cil_leave_s;
+@cil_jump = @cil_unconditional_jump | @cil_conditional_jump;
+
+// CIL call instructions
+
+@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj;
+
+// CIL expression instructions
+
+@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access |
+ @cil_newarr | @cil_ldtoken | @cil_sizeof |
+ @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup;
+
+@cil_unary_expr =
+ @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation|
+ @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any |
+ @cil_ldind | @cil_unbox;
+
+@cil_conversion_operation =
+ @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 |
+ @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 |
+ @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un |
+ @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un |
+ @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un |
+ @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un |
+ @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_i | @cil_conv_u | @cil_conv_r_un;
+
+@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 |
+ @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4;
+
+@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 |
+ @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref;
+
+@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation;
+
+@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl;
+
+@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un |
+ @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un |
+ @cil_sub_ovf | @cil_sub_ovf_un;
+
+@cil_unary_bitwise_operation = @cil_not;
+
+@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation;
+
+@cil_unary_arithmetic_operation = @cil_neg;
+
+@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un;
+
+// Elements that retrieve an address of something
+@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema;
+
+// CIL array instructions
+
+@cil_read_array =
+ @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i |
+ @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 |
+ @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4;
+
+@cil_write_array = @cil_stelem | @cil_stelem_ref |
+ @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 |
+ @cil_stelem_r4 | @cil_stelem_r8;
+
+@cil_throw_any = @cil_throw | @cil_rethrow;
+
+#keyset[impl, index]
+cil_instruction(
+ unique int id: @cil_instruction,
+ int opcode: int ref,
+ int index: int ref,
+ int impl: @cil_method_implementation ref);
+
+cil_jump(
+ unique int instruction: @cil_jump ref,
+ int target: @cil_instruction ref);
+
+cil_access(
+ unique int instruction: @cil_instruction ref,
+ int target: @cil_accessible ref);
+
+cil_value(
+ unique int instruction: @cil_literal ref,
+ string value: string ref);
+
+#keyset[instruction, index]
+cil_switch(
+ int instruction: @cil_switch ref,
+ int index: int ref,
+ int target: @cil_instruction ref);
+
+cil_instruction_location(
+ unique int id: @cil_instruction ref,
+ int loc: @location ref);
+
+cil_type_location(
+ int id: @cil_type ref,
+ int loc: @location ref);
+
+cil_method_location(
+ int id: @cil_method ref,
+ int loc: @location ref);
+
+@cil_namespace = @namespace;
+
+@cil_type_container = @cil_type | @cil_namespace | @cil_method;
+
+case @cil_type.kind of
+ 0 = @cil_valueorreftype
+| 1 = @cil_typeparameter
+| 2 = @cil_array_type
+| 3 = @cil_pointer_type
+| 4 = @cil_function_pointer_type
+;
+
+cil_type(
+ unique int id: @cil_type,
+ string name: string ref,
+ int kind: int ref,
+ int parent: @cil_type_container ref,
+ int sourceDecl: @cil_type ref);
+
+cil_pointer_type(
+ unique int id: @cil_pointer_type ref,
+ int pointee: @cil_type ref);
+
+cil_array_type(
+ unique int id: @cil_array_type ref,
+ int element_type: @cil_type ref,
+ int rank: int ref);
+
+cil_function_pointer_return_type(
+ unique int id: @cil_function_pointer_type ref,
+ int return_type: @cil_type ref);
+
+cil_method(
+ unique int id: @cil_method,
+ string name: string ref,
+ int parent: @cil_type ref,
+ int return_type: @cil_type ref);
+
+cil_method_source_declaration(
+ unique int method: @cil_method ref,
+ int source: @cil_method ref);
+
+cil_method_implementation(
+ unique int id: @cil_method_implementation,
+ int method: @cil_method ref,
+ int location: @assembly ref);
+
+cil_implements(
+ int id: @cil_method ref,
+ int decl: @cil_method ref);
+
+#keyset[parent, name]
+cil_field(
+ unique int id: @cil_field,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int field_type: @cil_type ref);
+
+@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace;
+@cil_named_element = @cil_declaration | @cil_namespace;
+@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member;
+@cil_accessible = @cil_declaration;
+@cil_variable = @cil_field | @cil_stack_variable;
+@cil_stack_variable = @cil_local_variable | @cil_parameter;
+@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event;
+@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type;
+@cil_parameterizable = @cil_method | @cil_function_pointer_type;
+@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type;
+
+#keyset[parameterizable, index]
+cil_parameter(
+ unique int id: @cil_parameter,
+ int parameterizable: @cil_parameterizable ref,
+ int index: int ref,
+ int param_type: @cil_type ref);
+
+cil_parameter_in(unique int id: @cil_parameter ref);
+cil_parameter_out(unique int id: @cil_parameter ref);
+
+cil_setter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+#keyset[id, modifier]
+cil_custom_modifiers(
+ int id: @cil_custom_modifier_receiver ref,
+ int modifier: @cil_type ref,
+ int kind: int ref); // modreq: 1, modopt: 0
+
+cil_type_annotation(
+ int id: @cil_has_type_annotation ref,
+ int annotation: int ref);
+
+cil_getter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+cil_adder(unique int event: @cil_event ref,
+ int method: @cil_method ref);
+
+cil_remover(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_property(
+ unique int id: @cil_property,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int property_type: @cil_type ref);
+
+#keyset[parent, name]
+cil_event(unique int id: @cil_event,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int event_type: @cil_type ref);
+
+#keyset[impl, index]
+cil_local_variable(
+ unique int id: @cil_local_variable,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int var_type: @cil_type ref);
+
+cil_function_pointer_calling_conventions(
+ int id: @cil_function_pointer_type ref,
+ int kind: int ref);
+
+// CIL handlers (exception handlers etc).
+
+case @cil_handler.kind of
+ 0 = @cil_catch_handler
+| 1 = @cil_filter_handler
+| 2 = @cil_finally_handler
+| 4 = @cil_fault_handler
+;
+
+#keyset[impl, index]
+cil_handler(
+ unique int id: @cil_handler,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int kind: int ref,
+ int try_start: @cil_instruction ref,
+ int try_end: @cil_instruction ref,
+ int handler_start: @cil_instruction ref);
+
+cil_handler_filter(
+ unique int id: @cil_handler ref,
+ int filter_start: @cil_instruction ref);
+
+cil_handler_type(
+ unique int id: @cil_handler ref,
+ int catch_type: @cil_type ref);
+
+@cil_controlflow_node = @cil_entry_point | @cil_instruction;
+
+@cil_entry_point = @cil_method_implementation | @cil_handler;
+
+@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method;
+
+cil_method_stack_size(
+ unique int method: @cil_method_implementation ref,
+ int size: int ref);
+
+// CIL modifiers
+
+cil_public(int id: @cil_member ref);
+cil_private(int id: @cil_member ref);
+cil_protected(int id: @cil_member ref);
+cil_internal(int id: @cil_member ref);
+cil_static(int id: @cil_member ref);
+cil_sealed(int id: @cil_member ref);
+cil_virtual(int id: @cil_method ref);
+cil_abstract(int id: @cil_member ref);
+cil_class(int id: @cil_type ref);
+cil_interface(int id: @cil_type ref);
+cil_security(int id: @cil_member ref);
+cil_requiresecobject(int id: @cil_method ref);
+cil_specialname(int id: @cil_method ref);
+cil_newslot(int id: @cil_method ref);
+
+cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref);
+cil_base_interface(int id: @cil_type ref, int base: @cil_type ref);
+cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref);
+
+#keyset[unbound, index]
+cil_type_parameter(
+ int unbound: @cil_member ref,
+ int index: int ref,
+ int param: @cil_typeparameter ref);
+
+#keyset[bound, index]
+cil_type_argument(
+ int bound: @cil_member ref,
+ int index: int ref,
+ int t: @cil_type ref);
+
+// CIL type parameter constraints
+
+cil_typeparam_covariant(int tp: @cil_typeparameter ref);
+cil_typeparam_contravariant(int tp: @cil_typeparameter ref);
+cil_typeparam_class(int tp: @cil_typeparameter ref);
+cil_typeparam_struct(int tp: @cil_typeparameter ref);
+cil_typeparam_new(int tp: @cil_typeparameter ref);
+cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref);
+
+// CIL attributes
+
+cil_attribute(
+ unique int attributeid: @cil_attribute,
+ int element: @cil_declaration ref,
+ int constructor: @cil_method ref);
+
+#keyset[attribute_id, param]
+cil_attribute_named_argument(
+ int attribute_id: @cil_attribute ref,
+ string param: string ref,
+ string value: string ref);
+
+#keyset[attribute_id, index]
+cil_attribute_positional_argument(
+ int attribute_id: @cil_attribute ref,
+ int index: int ref,
+ string value: string ref);
+
+
+// Common .Net data model covering both C# and CIL
+
+// Common elements
+@dotnet_element = @element | @cil_element;
+@dotnet_named_element = @named_element | @cil_named_element;
+@dotnet_callable = @callable | @cil_method;
+@dotnet_variable = @variable | @cil_variable;
+@dotnet_field = @field | @cil_field;
+@dotnet_parameter = @parameter | @cil_parameter;
+@dotnet_declaration = @declaration | @cil_declaration;
+@dotnet_member = @member | @cil_member;
+@dotnet_event = @event | @cil_event;
+@dotnet_property = @property | @cil_property | @indexer;
+@dotnet_parameterizable = @parameterizable | @cil_parameterizable;
+
+// Common types
+@dotnet_type = @type | @cil_type;
+@dotnet_call = @call | @cil_call_any;
+@dotnet_throw = @throw_element | @cil_throw_any;
+@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type;
+@dotnet_typeparameter = @type_parameter | @cil_typeparameter;
+@dotnet_array_type = @array_type | @cil_array_type;
+@dotnet_pointer_type = @pointer_type | @cil_pointer_type;
+@dotnet_type_parameter = @type_parameter | @cil_typeparameter;
+@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable;
+
+// Attributes
+@dotnet_attribute = @attribute | @cil_attribute;
+
+// Expressions
+@dotnet_expr = @expr | @cil_expr;
+
+// Literals
+@dotnet_literal = @literal_expr | @cil_literal;
+@dotnet_string_literal = @string_literal_expr | @cil_ldstr;
+@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i;
+@dotnet_float_literal = @float_literal_expr | @cil_ldc_r;
+@dotnet_null_literal = @null_literal_expr | @cil_ldnull;
+
+@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property |
+ @callable | @value_or_ref_type | @void_type;
+
+#keyset[entity, location]
+metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref)
diff --git a/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/semmlecode.csharp.dbscheme b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/semmlecode.csharp.dbscheme
new file mode 100644
index 00000000000..83aca6b3e4f
--- /dev/null
+++ b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/semmlecode.csharp.dbscheme
@@ -0,0 +1,2067 @@
+/* This is a dummy line to alter the dbscheme, so we can make a database upgrade
+ * without actually changing any of the dbscheme predicates. It contains a date
+ * to allow for such updates in the future as well.
+ *
+ * 2021-07-14
+ *
+ * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a
+ * previously seen state (matching a previously seen SHA), which would make the upgrade
+ * mechanism not work properly.
+ */
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | --compiler
+ * 1 | *path to compiler*
+ * 2 | f1.cs
+ * 3 | f2.cs
+ * 4 | f3.cs
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.cs
+ * 1 | f2.cs
+ * 2 | f3.cs
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The references used by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | ref1.dll
+ * 1 | ref2.dll
+ * 2 | ref3.dll
+ */
+#keyset[id, num]
+compilation_referencing_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+extractor_messages(
+ unique int id: @extractor_message,
+ int severity: int ref,
+ string origin : string ref,
+ string text : string ref,
+ string entity : string ref,
+ int location: @location_default ref,
+ string stack_trace : string ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+compilation_assembly(
+ unique int id : @compilation ref,
+ int assembly: @assembly ref
+)
+
+// Populated by the CSV extractor
+externalData(
+ int id: @externalDataElement,
+ string path: string ref,
+ int column: int ref,
+ string value: string ref);
+
+sourceLocationPrefix(
+ string prefix: string ref);
+
+/*
+ * C# dbscheme
+ */
+
+/** ELEMENTS **/
+
+@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration
+ | @using_directive | @type_parameter_constraints | @externalDataElement
+ | @xmllocatable | @asp_element | @namespace | @preprocessor_directive;
+
+@declaration = @callable | @generic | @assignable | @namespace;
+
+@named_element = @namespace | @declaration;
+
+@declaration_with_accessors = @property | @indexer | @event;
+
+@assignable = @variable | @assignable_with_accessors | @event;
+
+@assignable_with_accessors = @property | @indexer;
+
+@attributable = @assembly | @field | @parameter | @operator | @method | @constructor
+ | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors
+ | @local_function | @lambda_expr;
+
+/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/
+
+@location = @location_default | @assembly;
+
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+locations_mapped(
+ unique int id: @location_default ref,
+ int mapped_to: @location_default ref);
+
+@sourceline = @file | @callable | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref);
+
+assemblies(
+ unique int id: @assembly,
+ int file: @file ref,
+ string fullname: string ref,
+ string name: string ref,
+ string version: string ref);
+
+files(
+ unique int id: @file,
+ string name: string ref);
+
+folders(
+ unique int id: @folder,
+ string name: string ref);
+
+@container = @folder | @file ;
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref);
+
+file_extraction_mode(
+ unique int file: @file ref,
+ int mode: int ref
+ /* 0 = normal, 1 = standalone extractor */
+ );
+
+/** NAMESPACES **/
+
+@type_container = @namespace | @type;
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref);
+
+namespace_declarations(
+ unique int id: @namespace_declaration,
+ int namespace_id: @namespace ref);
+
+namespace_declaration_location(
+ unique int id: @namespace_declaration ref,
+ int loc: @location ref);
+
+parent_namespace(
+ unique int child_id: @type_container ref,
+ int namespace_id: @namespace ref);
+
+@declaration_or_directive = @namespace_declaration | @type | @using_directive;
+
+parent_namespace_declaration(
+ int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes
+ int namespace_id: @namespace_declaration ref);
+
+@using_directive = @using_namespace_directive | @using_static_directive;
+
+using_global(
+ unique int id: @using_directive ref
+);
+
+using_namespace_directives(
+ unique int id: @using_namespace_directive,
+ int namespace_id: @namespace ref);
+
+using_static_directives(
+ unique int id: @using_static_directive,
+ int type_id: @type_or_ref ref);
+
+using_directive_location(
+ unique int id: @using_directive ref,
+ int loc: @location ref);
+
+@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning
+ | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if
+ | @directive_elif | @directive_else | @directive_endif;
+
+@conditional_directive = @directive_if | @directive_elif;
+@branch_directive = @directive_if | @directive_elif | @directive_else;
+
+directive_ifs(
+ unique int id: @directive_if,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref); /* 0: false, 1: true */
+
+directive_elifs(
+ unique int id: @directive_elif,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+directive_elses(
+ unique int id: @directive_else,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+#keyset[id, start]
+directive_endifs(
+ unique int id: @directive_endif,
+ unique int start: @directive_if ref);
+
+directive_define_symbols(
+ unique int id: @define_symbol_expr ref,
+ string name: string ref);
+
+directive_regions(
+ unique int id: @directive_region,
+ string name: string ref);
+
+#keyset[id, start]
+directive_endregions(
+ unique int id: @directive_endregion,
+ unique int start: @directive_region ref);
+
+directive_lines(
+ unique int id: @directive_line,
+ int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */
+
+directive_line_value(
+ unique int id: @directive_line ref,
+ int line: int ref);
+
+directive_line_file(
+ unique int id: @directive_line ref,
+ int file: @file ref);
+
+directive_line_offset(
+ unique int id: @directive_line ref,
+ int offset: int ref);
+
+directive_line_span(
+ unique int id: @directive_line ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+directive_nullables(
+ unique int id: @directive_nullable,
+ int setting: int ref, /* 0: disable, 1: enable, 2: restore */
+ int target: int ref); /* 0: none, 1: annotations, 2: warnings */
+
+directive_warnings(
+ unique int id: @directive_warning,
+ string message: string ref);
+
+directive_errors(
+ unique int id: @directive_error,
+ string message: string ref);
+
+directive_undefines(
+ unique int id: @directive_undefine,
+ string name: string ref);
+
+directive_defines(
+ unique int id: @directive_define,
+ string name: string ref);
+
+pragma_checksums(
+ unique int id: @pragma_checksum,
+ int file: @file ref,
+ string guid: string ref,
+ string bytes: string ref);
+
+pragma_warnings(
+ unique int id: @pragma_warning,
+ int kind: int ref /* 0 = disable, 1 = restore */);
+
+#keyset[id, index]
+pragma_warning_error_codes(
+ int id: @pragma_warning ref,
+ string errorCode: string ref,
+ int index: int ref);
+
+preprocessor_directive_location(
+ unique int id: @preprocessor_directive ref,
+ int loc: @location ref);
+
+preprocessor_directive_compilation(
+ unique int id: @preprocessor_directive ref,
+ int compilation: @compilation ref);
+
+preprocessor_directive_active(
+ unique int id: @preprocessor_directive ref,
+ int active: int ref); /* 0: false, 1: true */
+
+/** TYPES **/
+
+types(
+ unique int id: @type,
+ int kind: int ref,
+ string name: string ref);
+
+case @type.kind of
+ 1 = @bool_type
+| 2 = @char_type
+| 3 = @decimal_type
+| 4 = @sbyte_type
+| 5 = @short_type
+| 6 = @int_type
+| 7 = @long_type
+| 8 = @byte_type
+| 9 = @ushort_type
+| 10 = @uint_type
+| 11 = @ulong_type
+| 12 = @float_type
+| 13 = @double_type
+| 14 = @enum_type
+| 15 = @struct_type
+| 17 = @class_type
+| 19 = @interface_type
+| 20 = @delegate_type
+| 21 = @null_type
+| 22 = @type_parameter
+| 23 = @pointer_type
+| 24 = @nullable_type
+| 25 = @array_type
+| 26 = @void_type
+| 27 = @int_ptr_type
+| 28 = @uint_ptr_type
+| 29 = @dynamic_type
+| 30 = @arglist_type
+| 31 = @unknown_type
+| 32 = @tuple_type
+| 33 = @function_pointer_type
+ ;
+
+@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type;
+@integral_type = @signed_integral_type | @unsigned_integral_type;
+@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type;
+@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type;
+@floating_point_type = @float_type | @double_type;
+@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type
+ | @uint_ptr_type | @tuple_type;
+@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type
+ | @dynamic_type;
+@value_or_ref_type = @value_type | @ref_type;
+
+typerefs(
+ unique int id: @typeref,
+ string name: string ref);
+
+typeref_type(
+ int id: @typeref ref,
+ unique int typeId: @type ref);
+
+@type_or_ref = @type | @typeref;
+
+array_element_type(
+ unique int array: @array_type ref,
+ int dimension: int ref,
+ int rank: int ref,
+ int element: @type_or_ref ref);
+
+nullable_underlying_type(
+ unique int nullable: @nullable_type ref,
+ int underlying: @type_or_ref ref);
+
+pointer_referent_type(
+ unique int pointer: @pointer_type ref,
+ int referent: @type_or_ref ref);
+
+enum_underlying_type(
+ unique int enum_id: @enum_type ref,
+ int underlying_type_id: @type_or_ref ref);
+
+delegate_return_type(
+ unique int delegate_id: @delegate_type ref,
+ int return_type_id: @type_or_ref ref);
+
+function_pointer_return_type(
+ unique int function_pointer_id: @function_pointer_type ref,
+ int return_type_id: @type_or_ref ref);
+
+extend(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+anonymous_types(
+ unique int id: @type ref);
+
+@interface_or_ref = @interface_type | @typeref;
+
+implement(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+type_location(
+ int id: @type ref,
+ int loc: @location ref);
+
+tuple_underlying_type(
+ unique int tuple: @tuple_type ref,
+ int struct: @type_or_ref ref);
+
+#keyset[tuple, index]
+tuple_element(
+ int tuple: @tuple_type ref,
+ int index: int ref,
+ unique int field: @field ref);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ int type_id: @type_or_ref ref,
+ int target: @attributable ref);
+
+case @attribute.kind of
+ 0 = @attribute_default
+| 1 = @attribute_return
+| 2 = @attribute_assembly
+| 3 = @attribute_module
+;
+
+attribute_location(
+ int id: @attribute ref,
+ int loc: @location ref);
+
+@type_mention_parent = @element | @type_mention;
+
+type_mention(
+ unique int id: @type_mention,
+ int type_id: @type_or_ref ref,
+ int parent: @type_mention_parent ref);
+
+type_mention_location(
+ unique int id: @type_mention ref,
+ int loc: @location ref);
+
+@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type;
+
+/**
+ * A direct annotation on an entity, for example `string? x;`.
+ *
+ * Annotations:
+ * 2 = reftype is not annotated "!"
+ * 3 = reftype is annotated "?"
+ * 4 = readonly ref type / in parameter
+ * 5 = ref type parameter, return or local variable
+ * 6 = out parameter
+ *
+ * Note that the annotation depends on the element it annotates.
+ * @assignable: The annotation is on the type of the assignable, for example the variable type.
+ * @type_parameter: The annotation is on the reftype constraint
+ * @callable: The annotation is on the return type
+ * @array_type: The annotation is on the element type
+ */
+type_annotation(int id: @has_type_annotation ref, int annotation: int ref);
+
+nullability(unique int nullability: @nullability, int kind: int ref);
+
+case @nullability.kind of
+ 0 = @oblivious
+| 1 = @not_annotated
+| 2 = @annotated
+;
+
+#keyset[parent, index]
+nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref)
+
+type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref);
+
+/**
+ * The nullable flow state of an expression, as determined by Roslyn.
+ * 0 = none (default, not populated)
+ * 1 = not null
+ * 2 = maybe null
+ */
+expr_flowstate(unique int id: @expr ref, int state: int ref);
+
+/** GENERICS **/
+
+@generic = @type | @method | @local_function;
+
+type_parameters(
+ unique int id: @type_parameter ref,
+ int index: int ref,
+ int generic_id: @generic ref,
+ int variance: int ref /* none = 0, out = 1, in = 2 */);
+
+#keyset[constructed_id, index]
+type_arguments(
+ int id: @type_or_ref ref,
+ int index: int ref,
+ int constructed_id: @generic_or_ref ref);
+
+@generic_or_ref = @generic | @typeref;
+
+constructed_generic(
+ unique int constructed: @generic ref,
+ int generic: @generic_or_ref ref);
+
+type_parameter_constraints(
+ unique int id: @type_parameter_constraints,
+ int param_id: @type_parameter ref);
+
+type_parameter_constraints_location(
+ int id: @type_parameter_constraints ref,
+ int loc: @location ref);
+
+general_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int kind: int ref /* class = 1, struct = 2, new = 3 */);
+
+specific_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref);
+
+specific_type_parameter_nullability(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref,
+ int nullability: @nullability ref);
+
+/** FUNCTION POINTERS */
+
+function_pointer_calling_conventions(
+ int id: @function_pointer_type ref,
+ int kind: int ref);
+
+#keyset[id, index]
+has_unmanaged_calling_conventions(
+ int id: @function_pointer_type ref,
+ int index: int ref,
+ int conv_id: @type_or_ref ref);
+
+/** MODIFIERS */
+
+@modifiable = @modifiable_direct | @event_accessor;
+
+@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr;
+
+modifiers(
+ unique int id: @modifier,
+ string name: string ref);
+
+has_modifiers(
+ int id: @modifiable_direct ref,
+ int mod_id: @modifier ref);
+
+compiler_generated(unique int id: @modifiable ref);
+
+/** MEMBERS **/
+
+@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type;
+
+@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr;
+
+@virtualizable = @method | @property | @indexer | @event;
+
+exprorstmt_name(
+ unique int parent_id: @named_exprorstmt ref,
+ string name: string ref);
+
+nested_types(
+ unique int id: @type ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @type ref);
+
+properties(
+ unique int id: @property,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @property ref);
+
+property_location(
+ int id: @property ref,
+ int loc: @location ref);
+
+indexers(
+ unique int id: @indexer,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @indexer ref);
+
+indexer_location(
+ int id: @indexer ref,
+ int loc: @location ref);
+
+accessors(
+ unique int id: @accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_member_id: @member ref,
+ int unbound_id: @accessor ref);
+
+case @accessor.kind of
+ 1 = @getter
+| 2 = @setter
+ ;
+
+init_only_accessors(
+ unique int id: @accessor ref);
+
+accessor_location(
+ int id: @accessor ref,
+ int loc: @location ref);
+
+events(
+ unique int id: @event,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @event ref);
+
+event_location(
+ int id: @event ref,
+ int loc: @location ref);
+
+event_accessors(
+ unique int id: @event_accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_event_id: @event ref,
+ int unbound_id: @event_accessor ref);
+
+case @event_accessor.kind of
+ 1 = @add_event_accessor
+| 2 = @remove_event_accessor
+ ;
+
+event_accessor_location(
+ int id: @event_accessor ref,
+ int loc: @location ref);
+
+operators(
+ unique int id: @operator,
+ string name: string ref,
+ string symbol: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @operator ref);
+
+operator_location(
+ int id: @operator ref,
+ int loc: @location ref);
+
+constant_value(
+ int id: @variable ref,
+ string value: string ref);
+
+/** CALLABLES **/
+
+@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function;
+
+@callable_accessor = @accessor | @event_accessor;
+
+methods(
+ unique int id: @method,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @method ref);
+
+method_location(
+ int id: @method ref,
+ int loc: @location ref);
+
+constructors(
+ unique int id: @constructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @constructor ref);
+
+constructor_location(
+ int id: @constructor ref,
+ int loc: @location ref);
+
+destructors(
+ unique int id: @destructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @destructor ref);
+
+destructor_location(
+ int id: @destructor ref,
+ int loc: @location ref);
+
+overrides(
+ int id: @callable ref,
+ int base_id: @callable ref);
+
+explicitly_implements(
+ int id: @member ref,
+ int interface_id: @interface_or_ref ref);
+
+local_functions(
+ unique int id: @local_function,
+ string name: string ref,
+ int return_type: @type ref,
+ int unbound_id: @local_function ref);
+
+local_function_stmts(
+ unique int fn: @local_function_stmt ref,
+ int stmt: @local_function ref);
+
+/** VARIABLES **/
+
+@variable = @local_scope_variable | @field;
+
+@local_scope_variable = @local_variable | @parameter;
+
+fields(
+ unique int id: @field,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @field ref);
+
+case @field.kind of
+ 1 = @addressable_field
+| 2 = @constant
+ ;
+
+field_location(
+ int id: @field ref,
+ int loc: @location ref);
+
+localvars(
+ unique int id: @local_variable,
+ int kind: int ref,
+ string name: string ref,
+ int implicitly_typed: int ref /* 0 = no, 1 = yes */,
+ int type_id: @type_or_ref ref,
+ int parent_id: @local_var_decl_expr ref);
+
+case @local_variable.kind of
+ 1 = @addressable_local_variable
+| 2 = @local_constant
+| 3 = @local_variable_ref
+ ;
+
+localvar_location(
+ unique int id: @local_variable ref,
+ int loc: @location ref);
+
+@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type;
+
+#keyset[name, parent_id]
+#keyset[index, parent_id]
+params(
+ unique int id: @parameter,
+ string name: string ref,
+ int type_id: @type_or_ref ref,
+ int index: int ref,
+ int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */
+ int parent_id: @parameterizable ref,
+ int unbound_id: @parameter ref);
+
+param_location(
+ int id: @parameter ref,
+ int loc: @location ref);
+
+/** STATEMENTS **/
+
+@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent;
+
+statements(
+ unique int id: @stmt,
+ int kind: int ref);
+
+#keyset[index, parent]
+stmt_parent(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_stmt_parent = @callable;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+stmt_parent_top_level(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @top_level_stmt_parent ref);
+
+case @stmt.kind of
+ 1 = @block_stmt
+| 2 = @expr_stmt
+| 3 = @if_stmt
+| 4 = @switch_stmt
+| 5 = @while_stmt
+| 6 = @do_stmt
+| 7 = @for_stmt
+| 8 = @foreach_stmt
+| 9 = @break_stmt
+| 10 = @continue_stmt
+| 11 = @goto_stmt
+| 12 = @goto_case_stmt
+| 13 = @goto_default_stmt
+| 14 = @throw_stmt
+| 15 = @return_stmt
+| 16 = @yield_stmt
+| 17 = @try_stmt
+| 18 = @checked_stmt
+| 19 = @unchecked_stmt
+| 20 = @lock_stmt
+| 21 = @using_block_stmt
+| 22 = @var_decl_stmt
+| 23 = @const_decl_stmt
+| 24 = @empty_stmt
+| 25 = @unsafe_stmt
+| 26 = @fixed_stmt
+| 27 = @label_stmt
+| 28 = @catch
+| 29 = @case_stmt
+| 30 = @local_function_stmt
+| 31 = @using_decl_stmt
+ ;
+
+@using_stmt = @using_block_stmt | @using_decl_stmt;
+
+@labeled_stmt = @label_stmt | @case;
+
+@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt;
+
+@cond_stmt = @if_stmt | @switch_stmt;
+
+@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt;
+
+@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt
+ | @yield_stmt;
+
+@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt;
+
+
+stmt_location(
+ unique int id: @stmt ref,
+ int loc: @location ref);
+
+catch_type(
+ unique int catch_id: @catch ref,
+ int type_id: @type_or_ref ref,
+ int kind: int ref /* explicit = 1, implicit = 2 */);
+
+foreach_stmt_info(
+ unique int id: @foreach_stmt ref,
+ int kind: int ref /* non-async = 1, async = 2 */);
+
+@foreach_symbol = @method | @property | @type_or_ref;
+
+#keyset[id, kind]
+foreach_stmt_desugar(
+ int id: @foreach_stmt ref,
+ int symbol: @foreach_symbol ref,
+ int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */);
+
+/** EXPRESSIONS **/
+
+expressions(
+ unique int id: @expr,
+ int kind: int ref,
+ int type_id: @type_or_ref ref);
+
+#keyset[index, parent]
+expr_parent(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif;
+
+@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+expr_parent_top_level(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @top_level_exprorstmt_parent ref);
+
+case @expr.kind of
+/* literal */
+ 1 = @bool_literal_expr
+| 2 = @char_literal_expr
+| 3 = @decimal_literal_expr
+| 4 = @int_literal_expr
+| 5 = @long_literal_expr
+| 6 = @uint_literal_expr
+| 7 = @ulong_literal_expr
+| 8 = @float_literal_expr
+| 9 = @double_literal_expr
+| 10 = @string_literal_expr
+| 11 = @null_literal_expr
+/* primary & unary */
+| 12 = @this_access_expr
+| 13 = @base_access_expr
+| 14 = @local_variable_access_expr
+| 15 = @parameter_access_expr
+| 16 = @field_access_expr
+| 17 = @property_access_expr
+| 18 = @method_access_expr
+| 19 = @event_access_expr
+| 20 = @indexer_access_expr
+| 21 = @array_access_expr
+| 22 = @type_access_expr
+| 23 = @typeof_expr
+| 24 = @method_invocation_expr
+| 25 = @delegate_invocation_expr
+| 26 = @operator_invocation_expr
+| 27 = @cast_expr
+| 28 = @object_creation_expr
+| 29 = @explicit_delegate_creation_expr
+| 30 = @implicit_delegate_creation_expr
+| 31 = @array_creation_expr
+| 32 = @default_expr
+| 33 = @plus_expr
+| 34 = @minus_expr
+| 35 = @bit_not_expr
+| 36 = @log_not_expr
+| 37 = @post_incr_expr
+| 38 = @post_decr_expr
+| 39 = @pre_incr_expr
+| 40 = @pre_decr_expr
+/* multiplicative */
+| 41 = @mul_expr
+| 42 = @div_expr
+| 43 = @rem_expr
+/* additive */
+| 44 = @add_expr
+| 45 = @sub_expr
+/* shift */
+| 46 = @lshift_expr
+| 47 = @rshift_expr
+/* relational */
+| 48 = @lt_expr
+| 49 = @gt_expr
+| 50 = @le_expr
+| 51 = @ge_expr
+/* equality */
+| 52 = @eq_expr
+| 53 = @ne_expr
+/* logical */
+| 54 = @bit_and_expr
+| 55 = @bit_xor_expr
+| 56 = @bit_or_expr
+| 57 = @log_and_expr
+| 58 = @log_or_expr
+/* type testing */
+| 59 = @is_expr
+| 60 = @as_expr
+/* null coalescing */
+| 61 = @null_coalescing_expr
+/* conditional */
+| 62 = @conditional_expr
+/* assignment */
+| 63 = @simple_assign_expr
+| 64 = @assign_add_expr
+| 65 = @assign_sub_expr
+| 66 = @assign_mul_expr
+| 67 = @assign_div_expr
+| 68 = @assign_rem_expr
+| 69 = @assign_and_expr
+| 70 = @assign_xor_expr
+| 71 = @assign_or_expr
+| 72 = @assign_lshift_expr
+| 73 = @assign_rshift_expr
+/* more */
+| 74 = @object_init_expr
+| 75 = @collection_init_expr
+| 76 = @array_init_expr
+| 77 = @checked_expr
+| 78 = @unchecked_expr
+| 79 = @constructor_init_expr
+| 80 = @add_event_expr
+| 81 = @remove_event_expr
+| 82 = @par_expr
+| 83 = @local_var_decl_expr
+| 84 = @lambda_expr
+| 85 = @anonymous_method_expr
+| 86 = @namespace_expr
+/* dynamic */
+| 92 = @dynamic_element_access_expr
+| 93 = @dynamic_member_access_expr
+/* unsafe */
+| 100 = @pointer_indirection_expr
+| 101 = @address_of_expr
+| 102 = @sizeof_expr
+/* async */
+| 103 = @await_expr
+/* C# 6.0 */
+| 104 = @nameof_expr
+| 105 = @interpolated_string_expr
+| 106 = @unknown_expr
+/* C# 7.0 */
+| 107 = @throw_expr
+| 108 = @tuple_expr
+| 109 = @local_function_invocation_expr
+| 110 = @ref_expr
+| 111 = @discard_expr
+/* C# 8.0 */
+| 112 = @range_expr
+| 113 = @index_expr
+| 114 = @switch_expr
+| 115 = @recursive_pattern_expr
+| 116 = @property_pattern_expr
+| 117 = @positional_pattern_expr
+| 118 = @switch_case_expr
+| 119 = @assign_coalesce_expr
+| 120 = @suppress_nullable_warning_expr
+| 121 = @namespace_access_expr
+/* C# 9.0 */
+| 122 = @lt_pattern_expr
+| 123 = @gt_pattern_expr
+| 124 = @le_pattern_expr
+| 125 = @ge_pattern_expr
+| 126 = @not_pattern_expr
+| 127 = @and_pattern_expr
+| 128 = @or_pattern_expr
+| 129 = @function_pointer_invocation_expr
+| 130 = @with_expr
+/* C# 11.0 */
+| 131 = @list_pattern_expr
+| 132 = @slice_pattern_expr
+/* Preprocessor */
+| 999 = @define_symbol_expr
+;
+
+@switch = @switch_stmt | @switch_expr;
+@case = @case_stmt | @switch_case_expr;
+@pattern_match = @case | @is_expr;
+@unary_pattern_expr = @not_pattern_expr;
+@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr;
+@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr;
+
+@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr;
+@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr;
+@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr
+ | @string_literal_expr | @null_literal_expr;
+
+@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr;
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr;
+@assign_event_expr = @add_event_expr | @remove_event_expr;
+
+@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
+ | @assign_rem_expr
+@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
+ | @assign_lshift_expr | @assign_rshift_expr;
+
+@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr
+ | @method_access_expr | @type_access_expr | @dynamic_member_access_expr;
+@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr;
+@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr;
+
+@local_variable_access = @local_variable_access_expr | @local_var_decl_expr;
+@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access;
+@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr;
+
+@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr
+ | @event_access_expr | @dynamic_member_access_expr;
+
+@objectorcollection_init_expr = @object_init_expr | @collection_init_expr;
+
+@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr;
+
+@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr;
+@incr_op_expr = @pre_incr_expr | @post_incr_expr;
+@decr_op_expr = @pre_decr_expr | @post_decr_expr;
+@mut_op_expr = @incr_op_expr | @decr_op_expr;
+@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr;
+@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr;
+
+@ternary_log_op_expr = @conditional_expr;
+@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr;
+@un_log_op_expr = @log_not_expr;
+@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr;
+
+@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr
+ | @rshift_expr;
+@un_bit_op_expr = @bit_not_expr;
+@bit_expr = @un_bit_op_expr | @bin_bit_op_expr;
+
+@equality_op_expr = @eq_expr | @ne_expr;
+@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr;
+@comp_expr = @equality_op_expr | @rel_op_expr;
+
+@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op;
+
+@ternary_op = @ternary_log_op_expr;
+@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr;
+@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr
+ | @pointer_indirection_expr | @address_of_expr;
+
+@anonymous_function_expr = @lambda_expr | @anonymous_method_expr;
+
+@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr
+ | @delegate_invocation_expr | @object_creation_expr | @call_access_expr
+ | @local_function_invocation_expr | @function_pointer_invocation_expr;
+
+@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr;
+
+@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr
+ | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr;
+
+@throw_element = @throw_expr | @throw_stmt;
+
+@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr;
+
+implicitly_typed_array_creation(
+ unique int id: @array_creation_expr ref);
+
+explicitly_sized_array_creation(
+ unique int id: @array_creation_expr ref);
+
+stackalloc_array_creation(
+ unique int id: @array_creation_expr ref);
+
+implicitly_typed_object_creation(
+ unique int id: @implicitly_typeable_object_creation_expr ref);
+
+mutator_invocation_mode(
+ unique int id: @operator_invocation_expr ref,
+ int mode: int ref /* prefix = 1, postfix = 2*/);
+
+expr_compiler_generated(
+ unique int id: @expr ref);
+
+expr_value(
+ unique int id: @expr ref,
+ string value: string ref);
+
+expr_call(
+ unique int caller_id: @expr ref,
+ int target_id: @callable ref);
+
+expr_access(
+ unique int accesser_id: @access_expr ref,
+ int target_id: @accessible ref);
+
+@accessible = @method | @assignable | @local_function | @namespace;
+
+expr_location(
+ unique int id: @expr ref,
+ int loc: @location ref);
+
+dynamic_member_name(
+ unique int id: @late_bindable_expr ref,
+ string name: string ref);
+
+@qualifiable_expr = @member_access_expr
+ | @method_invocation_expr
+ | @element_access_expr;
+
+conditional_access(
+ unique int id: @qualifiable_expr ref);
+
+expr_argument(
+ unique int id: @expr ref,
+ int mode: int ref);
+ /* mode is the same as params: value = 0, ref = 1, out = 2 */
+
+expr_argument_name(
+ unique int id: @expr ref,
+ string name: string ref);
+
+lambda_expr_return_type(
+ unique int id: @lambda_expr ref,
+ int type_id: @type_or_ref ref);
+
+/** CONTROL/DATA FLOW **/
+
+@control_flow_element = @stmt | @expr;
+
+/* XML Files */
+
+xmlEncoding (
+ unique int id: @file ref,
+ string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/* Comments */
+
+commentline(
+ unique int id: @commentline,
+ int kind: int ref,
+ string text: string ref,
+ string rawtext: string ref);
+
+case @commentline.kind of
+ 0 = @singlelinecomment
+| 1 = @xmldoccomment
+| 2 = @multilinecomment;
+
+commentline_location(
+ unique int id: @commentline ref,
+ int loc: @location ref);
+
+commentblock(
+ unique int id : @commentblock);
+
+commentblock_location(
+ unique int id: @commentblock ref,
+ int loc: @location ref);
+
+commentblock_binding(
+ int id: @commentblock ref,
+ int entity: @element ref,
+ int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */
+
+commentblock_child(
+ int id: @commentblock ref,
+ int commentline: @commentline ref,
+ int index: int ref);
+
+/* ASP.NET */
+
+case @asp_element.kind of
+ 0=@asp_close_tag
+| 1=@asp_code
+| 2=@asp_comment
+| 3=@asp_data_binding
+| 4=@asp_directive
+| 5=@asp_open_tag
+| 6=@asp_quoted_string
+| 7=@asp_text
+| 8=@asp_xml_directive;
+
+@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string;
+
+asp_elements(
+ unique int id: @asp_element,
+ int kind: int ref,
+ int loc: @location ref);
+
+asp_comment_server(unique int comment: @asp_comment ref);
+asp_code_inline(unique int code: @asp_code ref);
+asp_directive_attribute(
+ int directive: @asp_directive ref,
+ int index: int ref,
+ string name: string ref,
+ int value: @asp_quoted_string ref);
+asp_directive_name(
+ unique int directive: @asp_directive ref,
+ string name: string ref);
+asp_element_body(
+ unique int element: @asp_element ref,
+ string body: string ref);
+asp_tag_attribute(
+ int tag: @asp_open_tag ref,
+ int index: int ref,
+ string name: string ref,
+ int attribute: @asp_attribute ref);
+asp_tag_name(
+ unique int tag: @asp_open_tag ref,
+ string name: string ref);
+asp_tag_isempty(int tag: @asp_open_tag ref);
+
+/* Common Intermediate Language - CIL */
+
+case @cil_instruction.opcode of
+ 0 = @cil_nop
+| 1 = @cil_break
+| 2 = @cil_ldarg_0
+| 3 = @cil_ldarg_1
+| 4 = @cil_ldarg_2
+| 5 = @cil_ldarg_3
+| 6 = @cil_ldloc_0
+| 7 = @cil_ldloc_1
+| 8 = @cil_ldloc_2
+| 9 = @cil_ldloc_3
+| 10 = @cil_stloc_0
+| 11 = @cil_stloc_1
+| 12 = @cil_stloc_2
+| 13 = @cil_stloc_3
+| 14 = @cil_ldarg_s
+| 15 = @cil_ldarga_s
+| 16 = @cil_starg_s
+| 17 = @cil_ldloc_s
+| 18 = @cil_ldloca_s
+| 19 = @cil_stloc_s
+| 20 = @cil_ldnull
+| 21 = @cil_ldc_i4_m1
+| 22 = @cil_ldc_i4_0
+| 23 = @cil_ldc_i4_1
+| 24 = @cil_ldc_i4_2
+| 25 = @cil_ldc_i4_3
+| 26 = @cil_ldc_i4_4
+| 27 = @cil_ldc_i4_5
+| 28 = @cil_ldc_i4_6
+| 29 = @cil_ldc_i4_7
+| 30 = @cil_ldc_i4_8
+| 31 = @cil_ldc_i4_s
+| 32 = @cil_ldc_i4
+| 33 = @cil_ldc_i8
+| 34 = @cil_ldc_r4
+| 35 = @cil_ldc_r8
+| 37 = @cil_dup
+| 38 = @cil_pop
+| 39 = @cil_jmp
+| 40 = @cil_call
+| 41 = @cil_calli
+| 42 = @cil_ret
+| 43 = @cil_br_s
+| 44 = @cil_brfalse_s
+| 45 = @cil_brtrue_s
+| 46 = @cil_beq_s
+| 47 = @cil_bge_s
+| 48 = @cil_bgt_s
+| 49 = @cil_ble_s
+| 50 = @cil_blt_s
+| 51 = @cil_bne_un_s
+| 52 = @cil_bge_un_s
+| 53 = @cil_bgt_un_s
+| 54 = @cil_ble_un_s
+| 55 = @cil_blt_un_s
+| 56 = @cil_br
+| 57 = @cil_brfalse
+| 58 = @cil_brtrue
+| 59 = @cil_beq
+| 60 = @cil_bge
+| 61 = @cil_bgt
+| 62 = @cil_ble
+| 63 = @cil_blt
+| 64 = @cil_bne_un
+| 65 = @cil_bge_un
+| 66 = @cil_bgt_un
+| 67 = @cil_ble_un
+| 68 = @cil_blt_un
+| 69 = @cil_switch
+| 70 = @cil_ldind_i1
+| 71 = @cil_ldind_u1
+| 72 = @cil_ldind_i2
+| 73 = @cil_ldind_u2
+| 74 = @cil_ldind_i4
+| 75 = @cil_ldind_u4
+| 76 = @cil_ldind_i8
+| 77 = @cil_ldind_i
+| 78 = @cil_ldind_r4
+| 79 = @cil_ldind_r8
+| 80 = @cil_ldind_ref
+| 81 = @cil_stind_ref
+| 82 = @cil_stind_i1
+| 83 = @cil_stind_i2
+| 84 = @cil_stind_i4
+| 85 = @cil_stind_i8
+| 86 = @cil_stind_r4
+| 87 = @cil_stind_r8
+| 88 = @cil_add
+| 89 = @cil_sub
+| 90 = @cil_mul
+| 91 = @cil_div
+| 92 = @cil_div_un
+| 93 = @cil_rem
+| 94 = @cil_rem_un
+| 95 = @cil_and
+| 96 = @cil_or
+| 97 = @cil_xor
+| 98 = @cil_shl
+| 99 = @cil_shr
+| 100 = @cil_shr_un
+| 101 = @cil_neg
+| 102 = @cil_not
+| 103 = @cil_conv_i1
+| 104 = @cil_conv_i2
+| 105 = @cil_conv_i4
+| 106 = @cil_conv_i8
+| 107 = @cil_conv_r4
+| 108 = @cil_conv_r8
+| 109 = @cil_conv_u4
+| 110 = @cil_conv_u8
+| 111 = @cil_callvirt
+| 112 = @cil_cpobj
+| 113 = @cil_ldobj
+| 114 = @cil_ldstr
+| 115 = @cil_newobj
+| 116 = @cil_castclass
+| 117 = @cil_isinst
+| 118 = @cil_conv_r_un
+| 121 = @cil_unbox
+| 122 = @cil_throw
+| 123 = @cil_ldfld
+| 124 = @cil_ldflda
+| 125 = @cil_stfld
+| 126 = @cil_ldsfld
+| 127 = @cil_ldsflda
+| 128 = @cil_stsfld
+| 129 = @cil_stobj
+| 130 = @cil_conv_ovf_i1_un
+| 131 = @cil_conv_ovf_i2_un
+| 132 = @cil_conv_ovf_i4_un
+| 133 = @cil_conv_ovf_i8_un
+| 134 = @cil_conv_ovf_u1_un
+| 135 = @cil_conv_ovf_u2_un
+| 136 = @cil_conv_ovf_u4_un
+| 137 = @cil_conv_ovf_u8_un
+| 138 = @cil_conv_ovf_i_un
+| 139 = @cil_conv_ovf_u_un
+| 140 = @cil_box
+| 141 = @cil_newarr
+| 142 = @cil_ldlen
+| 143 = @cil_ldelema
+| 144 = @cil_ldelem_i1
+| 145 = @cil_ldelem_u1
+| 146 = @cil_ldelem_i2
+| 147 = @cil_ldelem_u2
+| 148 = @cil_ldelem_i4
+| 149 = @cil_ldelem_u4
+| 150 = @cil_ldelem_i8
+| 151 = @cil_ldelem_i
+| 152 = @cil_ldelem_r4
+| 153 = @cil_ldelem_r8
+| 154 = @cil_ldelem_ref
+| 155 = @cil_stelem_i
+| 156 = @cil_stelem_i1
+| 157 = @cil_stelem_i2
+| 158 = @cil_stelem_i4
+| 159 = @cil_stelem_i8
+| 160 = @cil_stelem_r4
+| 161 = @cil_stelem_r8
+| 162 = @cil_stelem_ref
+| 163 = @cil_ldelem
+| 164 = @cil_stelem
+| 165 = @cil_unbox_any
+| 179 = @cil_conv_ovf_i1
+| 180 = @cil_conv_ovf_u1
+| 181 = @cil_conv_ovf_i2
+| 182 = @cil_conv_ovf_u2
+| 183 = @cil_conv_ovf_i4
+| 184 = @cil_conv_ovf_u4
+| 185 = @cil_conv_ovf_i8
+| 186 = @cil_conv_ovf_u8
+| 194 = @cil_refanyval
+| 195 = @cil_ckinfinite
+| 198 = @cil_mkrefany
+| 208 = @cil_ldtoken
+| 209 = @cil_conv_u2
+| 210 = @cil_conv_u1
+| 211 = @cil_conv_i
+| 212 = @cil_conv_ovf_i
+| 213 = @cil_conv_ovf_u
+| 214 = @cil_add_ovf
+| 215 = @cil_add_ovf_un
+| 216 = @cil_mul_ovf
+| 217 = @cil_mul_ovf_un
+| 218 = @cil_sub_ovf
+| 219 = @cil_sub_ovf_un
+| 220 = @cil_endfinally
+| 221 = @cil_leave
+| 222 = @cil_leave_s
+| 223 = @cil_stind_i
+| 224 = @cil_conv_u
+| 65024 = @cil_arglist
+| 65025 = @cil_ceq
+| 65026 = @cil_cgt
+| 65027 = @cil_cgt_un
+| 65028 = @cil_clt
+| 65029 = @cil_clt_un
+| 65030 = @cil_ldftn
+| 65031 = @cil_ldvirtftn
+| 65033 = @cil_ldarg
+| 65034 = @cil_ldarga
+| 65035 = @cil_starg
+| 65036 = @cil_ldloc
+| 65037 = @cil_ldloca
+| 65038 = @cil_stloc
+| 65039 = @cil_localloc
+| 65041 = @cil_endfilter
+| 65042 = @cil_unaligned
+| 65043 = @cil_volatile
+| 65044 = @cil_tail
+| 65045 = @cil_initobj
+| 65046 = @cil_constrained
+| 65047 = @cil_cpblk
+| 65048 = @cil_initblk
+| 65050 = @cil_rethrow
+| 65052 = @cil_sizeof
+| 65053 = @cil_refanytype
+| 65054 = @cil_readonly
+;
+
+// CIL ignored instructions
+
+@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned;
+
+// CIL local/parameter/field access
+
+@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga;
+@cil_starg_any = @cil_starg | @cil_starg_s;
+
+@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca;
+@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc;
+
+@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda;
+@cil_stfld_any = @cil_stfld | @cil_stsfld;
+
+@cil_local_access = @cil_stloc_any | @cil_ldloc_any;
+@cil_arg_access = @cil_starg_any | @cil_ldarg_any;
+@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any;
+@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any;
+
+@cil_stack_access = @cil_local_access | @cil_arg_access;
+@cil_field_access = @cil_ldfld_any | @cil_stfld_any;
+
+@cil_access = @cil_read_access | @cil_write_access;
+
+// CIL constant/literal instructions
+
+@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8;
+
+@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 |
+ @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4;
+
+@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8;
+
+@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr;
+
+// Control flow
+
+@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump;
+@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s |
+ @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s |
+ @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt |
+ @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un;
+@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch;
+@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any;
+@cil_leave_any = @cil_leave | @cil_leave_s;
+@cil_jump = @cil_unconditional_jump | @cil_conditional_jump;
+
+// CIL call instructions
+
+@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj;
+
+// CIL expression instructions
+
+@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access |
+ @cil_newarr | @cil_ldtoken | @cil_sizeof |
+ @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup;
+
+@cil_unary_expr =
+ @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation|
+ @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any |
+ @cil_ldind | @cil_unbox;
+
+@cil_conversion_operation =
+ @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 |
+ @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 |
+ @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un |
+ @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un |
+ @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un |
+ @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un |
+ @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_i | @cil_conv_u | @cil_conv_r_un;
+
+@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 |
+ @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4;
+
+@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 |
+ @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref;
+
+@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation;
+
+@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl;
+
+@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un |
+ @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un |
+ @cil_sub_ovf | @cil_sub_ovf_un;
+
+@cil_unary_bitwise_operation = @cil_not;
+
+@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation;
+
+@cil_unary_arithmetic_operation = @cil_neg;
+
+@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un;
+
+// Elements that retrieve an address of something
+@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema;
+
+// CIL array instructions
+
+@cil_read_array =
+ @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i |
+ @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 |
+ @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4;
+
+@cil_write_array = @cil_stelem | @cil_stelem_ref |
+ @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 |
+ @cil_stelem_r4 | @cil_stelem_r8;
+
+@cil_throw_any = @cil_throw | @cil_rethrow;
+
+#keyset[impl, index]
+cil_instruction(
+ unique int id: @cil_instruction,
+ int opcode: int ref,
+ int index: int ref,
+ int impl: @cil_method_implementation ref);
+
+cil_jump(
+ unique int instruction: @cil_jump ref,
+ int target: @cil_instruction ref);
+
+cil_access(
+ unique int instruction: @cil_instruction ref,
+ int target: @cil_accessible ref);
+
+cil_value(
+ unique int instruction: @cil_literal ref,
+ string value: string ref);
+
+#keyset[instruction, index]
+cil_switch(
+ int instruction: @cil_switch ref,
+ int index: int ref,
+ int target: @cil_instruction ref);
+
+cil_instruction_location(
+ unique int id: @cil_instruction ref,
+ int loc: @location ref);
+
+cil_type_location(
+ int id: @cil_type ref,
+ int loc: @location ref);
+
+cil_method_location(
+ int id: @cil_method ref,
+ int loc: @location ref);
+
+@cil_namespace = @namespace;
+
+@cil_type_container = @cil_type | @cil_namespace | @cil_method;
+
+case @cil_type.kind of
+ 0 = @cil_valueorreftype
+| 1 = @cil_typeparameter
+| 2 = @cil_array_type
+| 3 = @cil_pointer_type
+| 4 = @cil_function_pointer_type
+;
+
+cil_type(
+ unique int id: @cil_type,
+ string name: string ref,
+ int kind: int ref,
+ int parent: @cil_type_container ref,
+ int sourceDecl: @cil_type ref);
+
+cil_pointer_type(
+ unique int id: @cil_pointer_type ref,
+ int pointee: @cil_type ref);
+
+cil_array_type(
+ unique int id: @cil_array_type ref,
+ int element_type: @cil_type ref,
+ int rank: int ref);
+
+cil_function_pointer_return_type(
+ unique int id: @cil_function_pointer_type ref,
+ int return_type: @cil_type ref);
+
+cil_method(
+ unique int id: @cil_method,
+ string name: string ref,
+ int parent: @cil_type ref,
+ int return_type: @cil_type ref);
+
+cil_method_source_declaration(
+ unique int method: @cil_method ref,
+ int source: @cil_method ref);
+
+cil_method_implementation(
+ unique int id: @cil_method_implementation,
+ int method: @cil_method ref,
+ int location: @assembly ref);
+
+cil_implements(
+ int id: @cil_method ref,
+ int decl: @cil_method ref);
+
+#keyset[parent, name]
+cil_field(
+ unique int id: @cil_field,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int field_type: @cil_type ref);
+
+@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace;
+@cil_named_element = @cil_declaration | @cil_namespace;
+@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member;
+@cil_accessible = @cil_declaration;
+@cil_variable = @cil_field | @cil_stack_variable;
+@cil_stack_variable = @cil_local_variable | @cil_parameter;
+@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event;
+@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type;
+@cil_parameterizable = @cil_method | @cil_function_pointer_type;
+@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type;
+
+#keyset[parameterizable, index]
+cil_parameter(
+ unique int id: @cil_parameter,
+ int parameterizable: @cil_parameterizable ref,
+ int index: int ref,
+ int param_type: @cil_type ref);
+
+cil_parameter_in(unique int id: @cil_parameter ref);
+cil_parameter_out(unique int id: @cil_parameter ref);
+
+cil_setter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+#keyset[id, modifier]
+cil_custom_modifiers(
+ int id: @cil_custom_modifier_receiver ref,
+ int modifier: @cil_type ref,
+ int kind: int ref); // modreq: 1, modopt: 0
+
+cil_type_annotation(
+ int id: @cil_has_type_annotation ref,
+ int annotation: int ref);
+
+cil_getter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+cil_adder(unique int event: @cil_event ref,
+ int method: @cil_method ref);
+
+cil_remover(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_property(
+ unique int id: @cil_property,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int property_type: @cil_type ref);
+
+#keyset[parent, name]
+cil_event(unique int id: @cil_event,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int event_type: @cil_type ref);
+
+#keyset[impl, index]
+cil_local_variable(
+ unique int id: @cil_local_variable,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int var_type: @cil_type ref);
+
+cil_function_pointer_calling_conventions(
+ int id: @cil_function_pointer_type ref,
+ int kind: int ref);
+
+// CIL handlers (exception handlers etc).
+
+case @cil_handler.kind of
+ 0 = @cil_catch_handler
+| 1 = @cil_filter_handler
+| 2 = @cil_finally_handler
+| 4 = @cil_fault_handler
+;
+
+#keyset[impl, index]
+cil_handler(
+ unique int id: @cil_handler,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int kind: int ref,
+ int try_start: @cil_instruction ref,
+ int try_end: @cil_instruction ref,
+ int handler_start: @cil_instruction ref);
+
+cil_handler_filter(
+ unique int id: @cil_handler ref,
+ int filter_start: @cil_instruction ref);
+
+cil_handler_type(
+ unique int id: @cil_handler ref,
+ int catch_type: @cil_type ref);
+
+@cil_controlflow_node = @cil_entry_point | @cil_instruction;
+
+@cil_entry_point = @cil_method_implementation | @cil_handler;
+
+@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method;
+
+cil_method_stack_size(
+ unique int method: @cil_method_implementation ref,
+ int size: int ref);
+
+// CIL modifiers
+
+cil_public(int id: @cil_member ref);
+cil_private(int id: @cil_member ref);
+cil_protected(int id: @cil_member ref);
+cil_internal(int id: @cil_member ref);
+cil_static(int id: @cil_member ref);
+cil_sealed(int id: @cil_member ref);
+cil_virtual(int id: @cil_method ref);
+cil_abstract(int id: @cil_member ref);
+cil_class(int id: @cil_type ref);
+cil_interface(int id: @cil_type ref);
+cil_security(int id: @cil_member ref);
+cil_requiresecobject(int id: @cil_method ref);
+cil_specialname(int id: @cil_method ref);
+cil_newslot(int id: @cil_method ref);
+
+cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref);
+cil_base_interface(int id: @cil_type ref, int base: @cil_type ref);
+cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref);
+
+#keyset[unbound, index]
+cil_type_parameter(
+ int unbound: @cil_member ref,
+ int index: int ref,
+ int param: @cil_typeparameter ref);
+
+#keyset[bound, index]
+cil_type_argument(
+ int bound: @cil_member ref,
+ int index: int ref,
+ int t: @cil_type ref);
+
+// CIL type parameter constraints
+
+cil_typeparam_covariant(int tp: @cil_typeparameter ref);
+cil_typeparam_contravariant(int tp: @cil_typeparameter ref);
+cil_typeparam_class(int tp: @cil_typeparameter ref);
+cil_typeparam_struct(int tp: @cil_typeparameter ref);
+cil_typeparam_new(int tp: @cil_typeparameter ref);
+cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref);
+
+// CIL attributes
+
+cil_attribute(
+ unique int attributeid: @cil_attribute,
+ int element: @cil_declaration ref,
+ int constructor: @cil_method ref);
+
+#keyset[attribute_id, param]
+cil_attribute_named_argument(
+ int attribute_id: @cil_attribute ref,
+ string param: string ref,
+ string value: string ref);
+
+#keyset[attribute_id, index]
+cil_attribute_positional_argument(
+ int attribute_id: @cil_attribute ref,
+ int index: int ref,
+ string value: string ref);
+
+
+// Common .Net data model covering both C# and CIL
+
+// Common elements
+@dotnet_element = @element | @cil_element;
+@dotnet_named_element = @named_element | @cil_named_element;
+@dotnet_callable = @callable | @cil_method;
+@dotnet_variable = @variable | @cil_variable;
+@dotnet_field = @field | @cil_field;
+@dotnet_parameter = @parameter | @cil_parameter;
+@dotnet_declaration = @declaration | @cil_declaration;
+@dotnet_member = @member | @cil_member;
+@dotnet_event = @event | @cil_event;
+@dotnet_property = @property | @cil_property | @indexer;
+@dotnet_parameterizable = @parameterizable | @cil_parameterizable;
+
+// Common types
+@dotnet_type = @type | @cil_type;
+@dotnet_call = @call | @cil_call_any;
+@dotnet_throw = @throw_element | @cil_throw_any;
+@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type;
+@dotnet_typeparameter = @type_parameter | @cil_typeparameter;
+@dotnet_array_type = @array_type | @cil_array_type;
+@dotnet_pointer_type = @pointer_type | @cil_pointer_type;
+@dotnet_type_parameter = @type_parameter | @cil_typeparameter;
+@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable;
+
+// Attributes
+@dotnet_attribute = @attribute | @cil_attribute;
+
+// Expressions
+@dotnet_expr = @expr | @cil_expr;
+
+// Literals
+@dotnet_literal = @literal_expr | @cil_literal;
+@dotnet_string_literal = @string_literal_expr | @cil_ldstr;
+@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i;
+@dotnet_float_literal = @float_literal_expr | @cil_ldc_r;
+@dotnet_null_literal = @null_literal_expr | @cil_ldnull;
+
+@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property |
+ @callable | @value_or_ref_type | @void_type;
+
+#keyset[entity, location]
+metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref)
diff --git a/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/upgrade.properties b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/upgrade.properties
new file mode 100644
index 00000000000..d3e8b5e6318
--- /dev/null
+++ b/csharp/downgrades/d0fba103f7dee477dd7d9f6c038518b3f683b2c7/upgrade.properties
@@ -0,0 +1,3 @@
+description: Remove unsigned right shift and unsigned right shift assignment expression kinds.
+compatibility: backwards
+expressions.rel: run expressions.qlo
\ No newline at end of file
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs
index 6e0380da693..3984e7c00cf 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs
@@ -240,7 +240,7 @@ namespace Semmle.Extraction.CSharp.Entities
var callType = GetCallType(Context, node);
if (callType == CallType.Dynamic)
{
- UserOperator.OperatorSymbol(method.Name, out var operatorName);
+ UserOperator.TryGetOperatorSymbol(method.Name, out var operatorName);
trapFile.dynamic_member_name(this, operatorName);
return;
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs
index 553d6d8349a..cbd7afbc9fa 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs
@@ -71,6 +71,8 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
return ExprKind.ASSIGN_LSHIFT;
case SyntaxKind.GreaterThanGreaterThanEqualsToken:
return ExprKind.ASSIGN_RSHIFT;
+ case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:
+ return ExprKind.ASSIGN_URSHIFT;
case SyntaxKind.QuestionQuestionEqualsToken:
return ExprKind.ASSIGN_COALESCE;
default:
@@ -141,6 +143,8 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
return ExprKind.REM;
case ExprKind.ASSIGN_RSHIFT:
return ExprKind.RSHIFT;
+ case ExprKind.ASSIGN_URSHIFT:
+ return ExprKind.URSHIFT;
case ExprKind.ASSIGN_SUB:
return ExprKind.SUB;
case ExprKind.ASSIGN_XOR:
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs
index 5153c856a25..45d43ac94c0 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs
@@ -50,6 +50,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
case SyntaxKind.BarBarToken: return ExprKind.LOG_OR;
case SyntaxKind.GreaterThanEqualsToken: return ExprKind.GE;
case SyntaxKind.GreaterThanGreaterThanToken: return ExprKind.RSHIFT;
+ case SyntaxKind.GreaterThanGreaterThanGreaterThanToken: return ExprKind.URSHIFT;
case SyntaxKind.LessThanLessThanToken: return ExprKind.LSHIFT;
case SyntaxKind.CaretToken: return ExprKind.BIT_XOR;
case SyntaxKind.QuestionQuestionToken: return ExprKind.NULL_COALESCING;
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs
index a92715c4e1c..57e9dd47ef3 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs
@@ -38,6 +38,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
case SyntaxKind.IsExpression:
case SyntaxKind.AsExpression:
case SyntaxKind.RightShiftExpression:
+ case SyntaxKind.UnsignedRightShiftExpression:
case SyntaxKind.LeftShiftExpression:
case SyntaxKind.ExclusiveOrExpression:
case SyntaxKind.CoalesceExpression:
@@ -76,6 +77,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
case SyntaxKind.ExclusiveOrAssignmentExpression:
case SyntaxKind.LeftShiftAssignmentExpression:
case SyntaxKind.RightShiftAssignmentExpression:
+ case SyntaxKind.UnsignedRightShiftAssignmentExpression:
case SyntaxKind.DivideAssignmentExpression:
case SyntaxKind.ModuloAssignmentExpression:
case SyntaxKind.CoalesceAssignmentExpression:
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs
index 536af5065ed..f478d991919 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs
@@ -61,8 +61,7 @@ namespace Semmle.Extraction.CSharp.Entities
containingType = Symbol.ContainingType;
if (containingType is not null)
{
- var containingNamedType = containingType as INamedTypeSymbol;
- return containingNamedType is null ||
+ return containingType is not INamedTypeSymbol containingNamedType ||
!containingNamedType.GetMembers(Symbol.Name).Contains(Symbol);
}
@@ -83,7 +82,7 @@ namespace Semmle.Extraction.CSharp.Entities
///
/// The method name.
/// The converted operator name.
- public static bool OperatorSymbol(string methodName, out string operatorName)
+ public static bool TryGetOperatorSymbol(string methodName, out string operatorName)
{
var success = true;
switch (methodName)
@@ -147,6 +146,9 @@ namespace Semmle.Extraction.CSharp.Entities
case "op_RightShift":
operatorName = ">>";
break;
+ case "op_UnsignedRightShift":
+ operatorName = ">>>";
+ break;
case "op_LeftShift":
operatorName = "<<";
break;
@@ -166,7 +168,7 @@ namespace Semmle.Extraction.CSharp.Entities
var match = Regex.Match(methodName, "^op_Checked(.*)$");
if (match.Success)
{
- OperatorSymbol("op_" + match.Groups[1], out var uncheckedName);
+ TryGetOperatorSymbol("op_" + match.Groups[1], out var uncheckedName);
operatorName = "checked " + uncheckedName;
break;
}
@@ -190,7 +192,7 @@ namespace Semmle.Extraction.CSharp.Entities
return OperatorSymbol(cx, method.ExplicitInterfaceImplementations.First());
var methodName = method.Name;
- if (!OperatorSymbol(methodName, out var result))
+ if (!TryGetOperatorSymbol(methodName, out var result))
cx.ModelError(method, $"Unhandled operator name in OperatorSymbol(): '{methodName}'");
return result;
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs b/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs
index a56ccf4c746..ef0b9412ef4 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs
@@ -127,6 +127,8 @@ namespace Semmle.Extraction.Kinds
WITH = 130,
LIST_PATTERN = 131,
SLICE_PATTERN = 132,
+ URSHIFT = 133,
+ ASSIGN_URSHIFT = 134,
DEFINE_SYMBOL = 999,
}
}
diff --git a/csharp/ql/lib/change-notes/2023-01-11-unsigned-right-shift.md b/csharp/ql/lib/change-notes/2023-01-11-unsigned-right-shift.md
new file mode 100644
index 00000000000..6c644b8b2fb
--- /dev/null
+++ b/csharp/ql/lib/change-notes/2023-01-11-unsigned-right-shift.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* C# 11: Added support for the unsigned right shift `>>>` and unsigned right shift assignment `>>>=` operators.
\ No newline at end of file
diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll
index bc8e1294adb..ea88f814bce 100644
--- a/csharp/ql/lib/semmle/code/csharp/Callable.qll
+++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll
@@ -636,8 +636,9 @@ class TrueOperator extends UnaryOperator {
* (`SubOperator`), a multiplication operator (`MulOperator`), a division
* operator (`DivOperator`), a remainder operator (`RemOperator`), an and
* operator (`AndOperator`), an or operator (`OrOperator`), an xor
- * operator (`XorOperator`), a left shift operator (`LShiftOperator`),
- * a right shift operator (`RShiftOperator`), an equals operator (`EQOperator`),
+ * operator (`XorOperator`), a left shift operator (`LeftShiftOperator`),
+ * a right shift operator (`RightShiftOperator`), an unsigned right shift
+ * operator(`UnsignedRightShiftOperator`), an equals operator (`EQOperator`),
* a not equals operator (`NEOperator`), a lesser than operator (`LTOperator`),
* a greater than operator (`GTOperator`), a less than or equals operator
* (`LEOperator`), or a greater than or equals operator (`GEOperator`).
@@ -791,14 +792,17 @@ class XorOperator extends BinaryOperator {
* }
* ```
*/
-class LShiftOperator extends BinaryOperator {
- LShiftOperator() { this.getName() = "<<" }
+class LeftShiftOperator extends BinaryOperator {
+ LeftShiftOperator() { this.getName() = "<<" }
override string getFunctionName() { result = "op_LeftShift" }
- override string getAPrimaryQlClass() { result = "LShiftOperator" }
+ override string getAPrimaryQlClass() { result = "LeftShiftOperator" }
}
+/** DEPRECATED: Alias for LeftShiftOperator. */
+deprecated class LShiftOperator = LeftShiftOperator;
+
/**
* A user-defined right shift operator (`>>`), for example
*
@@ -808,12 +812,32 @@ class LShiftOperator extends BinaryOperator {
* }
* ```
*/
-class RShiftOperator extends BinaryOperator {
- RShiftOperator() { this.getName() = ">>" }
+class RightShiftOperator extends BinaryOperator {
+ RightShiftOperator() { this.getName() = ">>" }
override string getFunctionName() { result = "op_RightShift" }
- override string getAPrimaryQlClass() { result = "RShiftOperator" }
+ override string getAPrimaryQlClass() { result = "RightShiftOperator" }
+}
+
+/** DEPRECATED: Alias for RightShiftOperator. */
+deprecated class RShiftOperator = RightShiftOperator;
+
+/**
+ * A user-defined unsigned right shift operator (`>>>`), for example
+ *
+ * ```csharp
+ * public static Widget operator >>>(Widget lhs, Widget rhs) {
+ * ...
+ * }
+ * ```
+ */
+class UnsignedRightShiftOperator extends BinaryOperator {
+ UnsignedRightShiftOperator() { this.getName() = ">>>" }
+
+ override string getFunctionName() { result = "op_UnsignedRightShift" }
+
+ override string getAPrimaryQlClass() { result = "UnsignedRightShiftOperator" }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll
index b919d143a39..5b2a39ad6c9 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll
@@ -105,7 +105,7 @@ private predicate evenlyDivisibleExpr(Expr e, int factor) {
exists(ConstantIntegerExpr c, int k | k = c.getIntValue() |
e.(MulExpr).getAnOperand() = c and factor = k.abs() and factor >= 2
or
- e.(LShiftExpr).getRhs() = c and factor = 2.pow(k) and k > 0
+ e.(LeftShiftExpr).getRhs() = c and factor = 2.pow(k) and k > 0
or
e.(BitwiseAndExpr).getAnOperand() = c and factor = max(int f | andmaskFactor(k, f))
)
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
index 74aee61e690..4a9c3cdbe6d 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
@@ -30,7 +30,7 @@ module Private {
class MulExpr = RU::ExprNode::MulExpr;
- class LShiftExpr = RU::ExprNode::LShiftExpr;
+ class LeftShiftExpr = RU::ExprNode::LeftShiftExpr;
predicate guardDirectlyControlsSsaRead = RU::guardControlsSsaRead/3;
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll
index ce7637ccd92..fe4505b6e2e 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll
@@ -391,17 +391,24 @@ module ExprNode {
}
/** A left-shift operation. */
- class LShiftExpr extends BinaryOperation {
- override CS::LShiftExpr e;
+ class LeftShiftExpr extends BinaryOperation {
+ override CS::LeftShiftExpr e;
- override TLShiftOp getOp() { any() }
+ override TLeftShiftOp getOp() { any() }
}
/** A right-shift operation. */
- class RShiftExpr extends BinaryOperation {
- override CS::RShiftExpr e;
+ class RightShiftExpr extends BinaryOperation {
+ override CS::RightShiftExpr e;
- override TRShiftOp getOp() { any() }
+ override TRightShiftOp getOp() { any() }
+ }
+
+ /** An unsigned right-shift operation. */
+ class UnsignedRightShiftExpr extends BinaryOperation {
+ override CS::UnsignedRightShiftExpr e;
+
+ override TUnsignedRightShiftOp getOp() { any() }
}
/** A conditional expression. */
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll
index b2058a27114..649b4216996 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll
@@ -18,9 +18,9 @@ newtype TBinarySignOperation =
TBitAndOp() or
TBitOrOp() or
TBitXorOp() or
- TLShiftOp() or
- TRShiftOp() or
- TURShiftOp()
+ TLeftShiftOp() or
+ TRightShiftOp() or
+ TUnsignedRightShiftOp()
/** Class representing expression signs (+, -, 0). */
class Sign extends TSign {
@@ -271,10 +271,10 @@ class Sign extends TSign {
or
op = TBitXorOp() and result = bitxor(s)
or
- op = TLShiftOp() and result = lshift(s)
+ op = TLeftShiftOp() and result = lshift(s)
or
- op = TRShiftOp() and result = rshift(s)
+ op = TRightShiftOp() and result = rshift(s)
or
- op = TURShiftOp() and result = urshift(s)
+ op = TUnsignedRightShiftOp() and result = urshift(s)
}
}
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
index 9102bf29131..5b61ca54682 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
@@ -211,8 +211,9 @@ private module Impl {
not e.getExpr() instanceof BitwiseAndExpr and
not e.getExpr() instanceof BitwiseOrExpr and
not e.getExpr() instanceof BitwiseXorExpr and
- not e.getExpr() instanceof LShiftExpr and
- not e.getExpr() instanceof RShiftExpr and
+ not e.getExpr() instanceof LeftShiftExpr and
+ not e.getExpr() instanceof RightShiftExpr and
+ not e.getExpr() instanceof UnsignedRightShiftExpr and
not e.getExpr() instanceof ConditionalExpr and
not e.getExpr() instanceof RefExpr and
not e.getExpr() instanceof LocalVariableDeclAndInitExpr and
diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll
index 562a4dd9cd5..14da6da266f 100644
--- a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll
+++ b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll
@@ -150,8 +150,9 @@ class AssignRemExpr extends AssignArithmeticOperation, @assign_rem_expr {
* operation (`AssignAndExpr`), a bitwise-or assignment
* operation (`AssignOrExpr`), a bitwise exclusive-or assignment
* operation (`AssignXorExpr`), a left-shift assignment
- * operation (`AssignLShiftExpr`), or a right-shift assignment
- * operation (`AssignRShiftExpr`).
+ * operation (`AssignLeftShiftExpr`), or a right-shift assignment
+ * operation (`AssignRightShiftExpr`), or an unsigned right-shift assignment
+ * operation (`AssignUnsignedRightShiftExpr`).
*/
class AssignBitwiseOperation extends AssignOperation, @assign_bitwise_expr { }
@@ -185,19 +186,34 @@ class AssignXorExpr extends AssignBitwiseOperation, @assign_xor_expr {
/**
* A left-shift assignment operation, for example `x <<= y`.
*/
-class AssignLShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr {
+class AssignLeftShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr {
override string getOperator() { result = "<<=" }
- override string getAPrimaryQlClass() { result = "AssignLShiftExpr" }
+ override string getAPrimaryQlClass() { result = "AssignLeftShiftExpr" }
}
+/** DEPRECATED: Alias for AssignLeftShipExpr. */
+deprecated class AssignLShiftExpr = AssignLeftShiftExpr;
+
/**
* A right-shift assignment operation, for example `x >>= y`.
*/
-class AssignRShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr {
+class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr {
override string getOperator() { result = ">>=" }
- override string getAPrimaryQlClass() { result = "AssignRShiftExpr" }
+ override string getAPrimaryQlClass() { result = "AssignRightShiftExpr" }
+}
+
+/** DEPRECATED: Alias for AssignRightShiftExpr. */
+deprecated class AssignRShiftExpr = AssignRightShiftExpr;
+
+/**
+ * An unsigned right-shift assignment operation, for example `x >>>= y`.
+ */
+class AssignUnsighedRightShiftExpr extends AssignBitwiseOperation, @assign_urshift_expr {
+ override string getOperator() { result = ">>>=" }
+
+ override string getAPrimaryQlClass() { result = "AssignUnsighedRightShiftExpr" }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll
index a23da710465..d32485a51f8 100644
--- a/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll
+++ b/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll
@@ -31,7 +31,8 @@ class ComplementExpr extends UnaryBitwiseOperation, @bit_not_expr {
* A binary bitwise operation. Either a bitwise-and operation
* (`BitwiseAndExpr`), a bitwise-or operation (`BitwiseOrExpr`),
* a bitwise exclusive-or operation (`BitwiseXorExpr`), a left-shift
- * operation (`LShiftExpr`), or a right-shift operation (`RShiftExpr`).
+ * operation (`LeftShiftExpr`), a right-shift operation (`RightShiftExpr`),
+ * or an unsigned right-shift operation (`UnsignedRightShiftExpr`).
*/
class BinaryBitwiseOperation extends BitwiseOperation, BinaryOperation, @bin_bit_op_expr {
override string getOperator() { none() }
@@ -40,19 +41,34 @@ class BinaryBitwiseOperation extends BitwiseOperation, BinaryOperation, @bin_bit
/**
* A left-shift operation, for example `x << y`.
*/
-class LShiftExpr extends BinaryBitwiseOperation, @lshift_expr {
+class LeftShiftExpr extends BinaryBitwiseOperation, @lshift_expr {
override string getOperator() { result = "<<" }
- override string getAPrimaryQlClass() { result = "LShiftExpr" }
+ override string getAPrimaryQlClass() { result = "LeftShiftExpr" }
}
+/** DEPRECATED: Alias for LeftShiftExpr. */
+deprecated class LShiftExpr = LeftShiftExpr;
+
/**
* A right-shift operation, for example `x >> y`.
*/
-class RShiftExpr extends BinaryBitwiseOperation, @rshift_expr {
+class RightShiftExpr extends BinaryBitwiseOperation, @rshift_expr {
override string getOperator() { result = ">>" }
- override string getAPrimaryQlClass() { result = "RShiftExpr" }
+ override string getAPrimaryQlClass() { result = "RightShiftExpr" }
+}
+
+/** DEPRECATED: Alias for RightShiftExpr. */
+deprecated class RShiftExpr = RightShiftExpr;
+
+/**
+ * An unsigned right-shift operation, for example `x >>> y`.
+ */
+class UnsignedRightShiftExpr extends BinaryBitwiseOperation, @urshift_expr {
+ override string getOperator() { result = ">>>" }
+
+ override string getAPrimaryQlClass() { result = "UnsignedRightShiftExpr" }
}
/**
diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme
index 83aca6b3e4f..d0fba103f7d 100644
--- a/csharp/ql/lib/semmlecode.csharp.dbscheme
+++ b/csharp/ql/lib/semmlecode.csharp.dbscheme
@@ -1137,6 +1137,8 @@ case @expr.kind of
/* C# 11.0 */
| 131 = @list_pattern_expr
| 132 = @slice_pattern_expr
+| 133 = @urshift_expr
+| 134 = @assign_urshift_expr
/* Preprocessor */
| 999 = @define_symbol_expr
;
@@ -1160,7 +1162,7 @@ case @expr.kind of
@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
| @assign_rem_expr
@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
- | @assign_lshift_expr | @assign_rshift_expr;
+ | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr;
@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr
| @method_access_expr | @type_access_expr | @dynamic_member_access_expr;
@@ -1191,7 +1193,7 @@ case @expr.kind of
@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr;
@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr
- | @rshift_expr;
+ | @rshift_expr | @urshift_expr;
@un_bit_op_expr = @bit_not_expr;
@bit_expr = @un_bit_op_expr | @bin_bit_op_expr;
diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats
index 04516487ee9..b7c93de7353 100644
--- a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats
+++ b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats
@@ -17,12 +17,12 @@
0
- @assembly
- 14676
+ @file
+ 106540
- @file
- 106541
+ @assembly
+ 14676
@folder
@@ -30,35 +30,31 @@
@namespace
- 500337
+ 500332
@namespace_declaration
- 42810
+ 42809
@using_namespace_directive
- 223779
+ 223777
@using_static_directive
3484
-
- @directive_if
- 16750
-
@directive_elif
275
- @directive_else
- 5439
+ @directive_if
+ 16749
- @location_default
- 137912010
+ @directive_else
+ 5439
@directive_endif
@@ -92,6 +88,10 @@
@directive_undefine
55
+
+ @location_default
+ 137911541
+
@directive_define
66
@@ -106,7 +106,7 @@
@typeref
- 4815264
+ 4815219
@bool_type
@@ -162,23 +162,23 @@
@enum_type
- 204056
+ 204054
@struct_type
- 1036578
+ 1036568
@class_type
- 5157996
+ 5157948
@interface_type
- 3246154
+ 3246124
@delegate_type
- 1214025
+ 1214014
@null_type
@@ -186,7 +186,7 @@
@type_parameter
- 991372
+ 991363
@pointer_type
@@ -198,7 +198,7 @@
@array_type
- 116793
+ 116792
@void_type
@@ -222,7 +222,7 @@
@tuple_type
- 37858
+ 37857
@function_pointer_type
@@ -232,26 +232,26 @@
@uint_ptr_type
0
-
- @type_mention
- 2667838
-
@attribute_default
- 14361364
+ 14361230
@attribute_return
- 224363
+ 224361
@attribute_assembly
- 52426
+ 52425
@attribute_module
53
+
+ @type_mention
+ 2667808
+
@oblivious
21291
@@ -266,7 +266,7 @@
@type_parameter_constraints
- 991372
+ 991363
@modifier
@@ -274,19 +274,19 @@
@property
- 6642412
+ 6642350
@indexer
- 105719
+ 105718
@getter
- 6738210
+ 6738147
@setter
- 1177149
+ 1177138
@event
@@ -302,15 +302,15 @@
@operator
- 629721
+ 629715
@method
- 20454980
+ 20454789
@constructor
- 5991233
+ 5991176
@destructor
@@ -322,15 +322,15 @@
@addressable_field
- 11102837
+ 11102733
@constant
- 3873680
+ 3873643
@addressable_local_variable
- 497829
+ 497825
@local_constant
@@ -342,19 +342,19 @@
@parameter
- 37386455
+ 37386105
@block_stmt
- 643009
+ 643003
@expr_stmt
- 698450
+ 698444
@if_stmt
- 299700
+ 299697
@switch_stmt
@@ -366,7 +366,7 @@
@do_stmt
- 1916
+ 1915
@for_stmt
@@ -374,15 +374,15 @@
@foreach_stmt
- 26826
+ 26825
@break_stmt
- 106776
+ 106775
@continue_stmt
- 8596
+ 8595
@goto_stmt
@@ -394,11 +394,11 @@
@throw_stmt
- 157116
+ 157106
@return_stmt
- 301790
+ 301787
@yield_stmt
@@ -426,7 +426,7 @@
@var_decl_stmt
- 449250
+ 449246
@const_decl_stmt
@@ -446,7 +446,7 @@
@case_stmt
- 118515
+ 118513
@goto_default_stmt
@@ -466,19 +466,19 @@
@using_decl_stmt
- 11564
+ 11563
@bool_literal_expr
- 472283
+ 472278
@char_literal_expr
- 61271
+ 61270
@int_literal_expr
- 3354291
+ 3354259
@long_literal_expr
@@ -490,27 +490,27 @@
@ulong_literal_expr
- 3300
+ 3299
@float_literal_expr
- 109488
+ 109487
@double_literal_expr
- 54800
+ 54799
@string_literal_expr
- 2171269
+ 2171248
@null_literal_expr
- 215382
+ 215366
@this_access_expr
- 857625
+ 857617
@base_access_expr
@@ -518,19 +518,19 @@
@local_variable_access_expr
- 1451844
+ 1451830
@parameter_access_expr
- 841262
+ 841254
@field_access_expr
- 1097227
+ 1097217
@property_access_expr
- 1242991
+ 1242979
@method_access_expr
@@ -550,15 +550,15 @@
@type_access_expr
- 1243003
+ 1242991
@typeof_expr
- 597670
+ 597664
@method_invocation_expr
- 1078551
+ 1078542
@delegate_invocation_expr
@@ -566,15 +566,15 @@
@operator_invocation_expr
- 596656
+ 596650
@cast_expr
- 781499
+ 781491
@object_creation_expr
- 202927
+ 202926
@explicit_delegate_creation_expr
@@ -586,11 +586,11 @@
@array_creation_expr
- 565044
+ 565039
@default_expr
- 669657
+ 669651
@minus_expr
@@ -598,7 +598,7 @@
@log_not_expr
- 60763
+ 60762
@post_incr_expr
@@ -618,7 +618,7 @@
@mul_expr
- 9154
+ 9153
@div_expr
@@ -630,11 +630,11 @@
@add_expr
- 72534
+ 72533
@sub_expr
- 25994
+ 25993
@lshift_expr
@@ -646,11 +646,11 @@
@lt_expr
- 34251
+ 34250
@gt_expr
- 20968
+ 20967
@le_expr
@@ -658,15 +658,15 @@
@ge_expr
- 12159
+ 12158
@eq_expr
- 135300
+ 135298
@ne_expr
- 117244
+ 117243
@bit_and_expr
@@ -682,7 +682,7 @@
@log_and_expr
- 51646
+ 51645
@log_or_expr
@@ -690,7 +690,7 @@
@is_expr
- 19997
+ 19994
@as_expr
@@ -702,11 +702,11 @@
@conditional_expr
- 34750
+ 34749
@simple_assign_expr
- 1223633
+ 1223622
@assign_add_expr
@@ -726,7 +726,7 @@
@object_init_expr
- 163090
+ 163088
@collection_init_expr
@@ -734,7 +734,7 @@
@array_init_expr
- 564188
+ 564183
@checked_expr
@@ -746,7 +746,7 @@
@constructor_init_expr
- 42947
+ 42945
@add_event_expr
@@ -758,11 +758,11 @@
@local_var_decl_expr
- 499277
+ 499273
@lambda_expr
- 200792
+ 200791
@anonymous_method_expr
@@ -778,7 +778,7 @@
@nameof_expr
- 50715
+ 50714
@interpolated_string_expr
@@ -794,15 +794,15 @@
@discard_expr
- 30087
+ 30086
@define_symbol_expr
- 32513
+ 32512
@decimal_literal_expr
- 157044
+ 157042
@plus_expr
@@ -886,11 +886,11 @@
@recursive_pattern_expr
- 3150
+ 3146
@property_pattern_expr
- 2543
+ 2533
@positional_pattern_expr
@@ -898,7 +898,7 @@
@switch_case_expr
- 660643
+ 660636
@assign_coalesce_expr
@@ -906,7 +906,7 @@
@suppress_nullable_warning_expr
- 25801
+ 25799
@namespace_access_expr
@@ -930,7 +930,7 @@
@not_pattern_expr
- 2910
+ 2909
@and_pattern_expr
@@ -938,7 +938,7 @@
@or_pattern_expr
- 2477
+ 2476
@function_pointer_invocation_expr
@@ -956,17 +956,25 @@
@slice_pattern_expr
18
+
+ @urshift_expr
+ 50
+
+
+ @assign_urshift_expr
+ 2
+
@xmldtd
58
@xmlelement
- 60596893
+ 60596686
@xmlattribute
- 41517960
+ 41517819
@xmlnamespace
@@ -978,23 +986,23 @@
@xmlcharacters
- 45379511
+ 45379357
@singlelinecomment
- 673827
+ 673821
@xmldoccomment
- 1226196
+ 1226185
@multilinecomment
- 82948
+ 82947
@commentblock
- 374970
+ 374967
@asp_close_tag
@@ -1022,7 +1030,7 @@
@asp_quoted_string
- 47186
+ 47185
@asp_text
@@ -1034,15 +1042,15 @@
@cil_valueorreftype
- 10427087
+ 10426990
@cil_typeparameter
- 1773609
+ 1773592
@cil_array_type
- 181790
+ 181788
@cil_pointer_type
@@ -1050,135 +1058,139 @@
@cil_function_pointer_type
- 39912
+ 39911
+
+
+ @cil_method
+ 39373409
@cil_nop
- 1327129
+ 1327046
@cil_ldarg_0
- 53581819
+ 53581318
@cil_ldarg_1
- 20969699
+ 20969503
@cil_ldarg_2
- 7471514
+ 7471444
@cil_ldarg_3
- 3234755
+ 3234725
@cil_ldloc_0
- 17598601
+ 17598436
@cil_ldloc_1
- 9495219
+ 9495130
@cil_ldloc_2
- 6739302
+ 6739239
@cil_ldloc_3
- 4230971
+ 4230931
@cil_stloc_0
- 8735189
+ 8735107
@cil_stloc_1
- 5003935
+ 5003888
@cil_stloc_2
- 3618151
+ 3618117
@cil_stloc_3
- 2480277
+ 2480254
@cil_ldarg_s
- 3414862
+ 3414830
@cil_ldarga_s
- 1248318
+ 1248307
@cil_starg_s
- 270382
+ 270379
@cil_ldloc_s
- 14457162
+ 14457027
@cil_ldloca_s
- 9786184
+ 9786093
@cil_stloc_s
- 9038705
+ 9038620
@cil_ldnull
- 5794381
+ 5794327
@cil_ldc_i4_m1
- 871537
+ 871529
@cil_ldc_i4_0
- 10862959
+ 10862858
@cil_ldc_i4_1
- 8606701
+ 8606621
@cil_ldc_i4_2
- 1948578
+ 1948560
@cil_ldc_i4_3
- 1073526
+ 1073516
@cil_ldc_i4_4
- 985880
+ 985870
@cil_ldc_i4_5
- 578416
+ 578411
@cil_ldc_i4_6
- 334080
+ 334076
@cil_ldc_i4_7
- 296812
+ 296809
@cil_ldc_i4_8
- 444583
+ 444579
@cil_ldc_i4_s
- 5378885
+ 5378835
@cil_ldc_i4
- 2836653
+ 2836626
@cil_ldc_i8
@@ -1186,23 +1198,23 @@
@cil_ldc_r4
- 31066
+ 31065
@cil_ldc_r8
- 238341
+ 238339
@cil_dup
- 9272617
+ 9272530
@cil_pop
- 3880176
+ 3880140
@cil_call
- 48855176
+ 48854719
@cil_calli
@@ -1210,43 +1222,43 @@
@cil_ret
- 31661234
+ 31660937
@cil_br_s
- 5776958
+ 5776904
@cil_brfalse_s
- 10010144
+ 10010051
@cil_brtrue_s
- 9349219
+ 9349132
@cil_beq_s
- 1588452
+ 1588437
@cil_bge_s
- 302364
+ 302361
@cil_bgt_s
- 237898
+ 237896
@cil_ble_s
- 342112
+ 342109
@cil_blt_s
- 581015
+ 581009
@cil_bne_un_s
- 2310181
+ 2310159
@cil_bge_un_s
@@ -1254,11 +1266,11 @@
@cil_bgt_un_s
- 101083
+ 101082
@cil_ble_un_s
- 98691
+ 98690
@cil_blt_un_s
@@ -1266,23 +1278,23 @@
@cil_br
- 1432176
+ 1432163
@cil_brfalse
- 953957
+ 953948
@cil_brtrue
- 803794
+ 803786
@cil_beq
- 420014
+ 420010
@cil_bge
- 34905
+ 34904
@cil_bgt
@@ -1294,11 +1306,11 @@
@cil_blt
- 95206
+ 95205
@cil_bne_un
- 210730
+ 210728
@cil_bge_un
@@ -1318,7 +1330,7 @@
@cil_switch
- 272685
+ 272683
@cil_ldind_i1
@@ -1326,7 +1338,7 @@
@cil_ldind_u1
- 90068
+ 90067
@cil_ldind_u2
@@ -1334,7 +1346,7 @@
@cil_ldind_i4
- 219353
+ 219351
@cil_ldind_u4
@@ -1354,15 +1366,15 @@
@cil_ldind_ref
- 190974
+ 190972
@cil_stind_ref
- 325516
+ 325513
@cil_stind_i1
- 144847
+ 144846
@cil_stind_i2
@@ -1370,7 +1382,7 @@
@cil_stind_i4
- 441482
+ 441478
@cil_stind_i8
@@ -1386,19 +1398,19 @@
@cil_add
- 2691805
+ 2691780
@cil_sub
- 1007112
+ 1007103
@cil_mul
- 426481
+ 426477
@cil_div
- 85048
+ 85047
@cil_div_un
@@ -1414,31 +1426,31 @@
@cil_and
- 506036
+ 506032
@cil_or
- 225791
+ 225789
@cil_xor
- 192185
+ 192183
@cil_shl
- 118122
+ 118121
@cil_shr
- 60626
+ 60625
@cil_shr_un
- 114815
+ 114814
@cil_neg
- 29501
+ 29500
@cil_not
@@ -1454,11 +1466,11 @@
@cil_conv_i4
- 534002
+ 533997
@cil_conv_i8
- 309038
+ 309035
@cil_conv_r4
@@ -1474,11 +1486,11 @@
@cil_conv_u8
- 142987
+ 142985
@cil_callvirt
- 41217611
+ 41217225
@cil_cpobj
@@ -1486,23 +1498,23 @@
@cil_ldobj
- 163865
+ 163863
@cil_ldstr
- 11254978
+ 11254873
@cil_newobj
- 12728409
+ 12728290
@cil_castclass
- 1803967
+ 1803950
@cil_isinst
- 2744724
+ 2744698
@cil_conv_r_un
@@ -1514,23 +1526,23 @@
@cil_throw
- 1827943
+ 1827881
@cil_ldfld
- 23008966
+ 23008751
@cil_ldflda
- 1951443
+ 1951424
@cil_stfld
- 11363976
+ 11363870
@cil_ldsfld
- 10513996
+ 10513898
@cil_ldsflda
@@ -1538,7 +1550,7 @@
@cil_stsfld
- 2599167
+ 2599143
@cil_stobj
@@ -1546,19 +1558,19 @@
@cil_box
- 1419832
+ 1419819
@cil_newarr
- 1603690
+ 1603675
@cil_ldlen
- 570295
+ 570290
@cil_ldelema
- 714434
+ 714427
@cil_ldelem_i1
@@ -1566,7 +1578,7 @@
@cil_ldelem_u1
- 104863
+ 104862
@cil_ldelem_i2
@@ -1578,15 +1590,15 @@
@cil_ldelem_i4
- 158254
+ 158253
@cil_ldelem_u4
- 130732
+ 130730
@cil_ldelem_i8
- 64583
+ 64582
@cil_ldelem_i
@@ -1602,7 +1614,7 @@
@cil_ldelem_ref
- 344799
+ 344796
@cil_stelem_i
@@ -1610,7 +1622,7 @@
@cil_stelem_i1
- 75244
+ 75243
@cil_stelem_i2
@@ -1618,11 +1630,11 @@
@cil_stelem_i4
- 173108
+ 173106
@cil_stelem_i8
- 31007
+ 31006
@cil_stelem_r8
@@ -1630,19 +1642,19 @@
@cil_stelem_ref
- 4221551
+ 4221511
@cil_ldelem
- 35909
+ 35908
@cil_stelem
- 208190
+ 208188
@cil_unbox_any
- 227651
+ 227649
@cil_conv_ovf_u1
@@ -1658,7 +1670,7 @@
@cil_ldtoken
- 1020371
+ 1020362
@cil_conv_u2
@@ -1666,11 +1678,11 @@
@cil_conv_u1
- 238253
+ 238250
@cil_conv_i
- 34285
+ 34284
@cil_conv_ovf_i
@@ -1690,15 +1702,15 @@
@cil_endfinally
- 1967891
+ 1967873
@cil_leave
- 692729
+ 692723
@cil_leave_s
- 3134203
+ 3134174
@cil_stind_i
@@ -1706,11 +1718,11 @@
@cil_conv_u
- 114135
+ 114134
@cil_ceq
- 930037
+ 930028
@cil_cgt
@@ -1718,11 +1730,11 @@
@cil_cgt_un
- 355253
+ 355250
@cil_clt
- 75775
+ 75774
@cil_clt_un
@@ -1730,7 +1742,7 @@
@cil_ldftn
- 2883016
+ 2882989
@cil_ldvirtftn
@@ -1762,15 +1774,15 @@
@cil_volatile
- 55222
+ 55221
@cil_initobj
- 950709
+ 950700
@cil_constrained
- 758376
+ 758368
@cil_cpblk
@@ -1782,7 +1794,7 @@
@cil_rethrow
- 72025
+ 72024
@cil_sizeof
@@ -1914,7 +1926,7 @@
@cil_ldloca
- 78758
+ 78757
@cil_tail
@@ -1924,37 +1936,33 @@
@cil_refanytype
13
-
- @cil_method
- 39373777
-
@cil_method_implementation
- 27073001
+ 27072747
@cil_field
- 15899467
+ 15899318
@cil_parameter
- 75119038
-
-
- @cil_property
- 6002749
+ 75118336
@cil_event
- 70696
+ 70695
+
+
+ @cil_property
+ 6002693
@cil_local_variable
- 23026507
+ 23026292
@cil_catch_handler
- 400819
+ 400815
@cil_filter_handler
@@ -1962,15 +1970,15 @@
@cil_finally_handler
- 1662456
+ 1662440
@cil_fault_handler
- 305435
+ 305432
@cil_attribute
- 5874527
+ 5874473
@@ -2320,7 +2328,7 @@
compilation_compiling_files
- 49881
+ 49880
id
@@ -2640,7 +2648,7 @@
1
2
- 49836
+ 49835
2
@@ -2661,7 +2669,7 @@
1
2
- 49836
+ 49835
2
@@ -2676,7 +2684,7 @@
compilation_referencing_files
- 719519
+ 719512
id
@@ -2910,57 +2918,62 @@
1
5
- 630
+ 574
5
6
- 1159
+ 1148
6
7
- 900
+ 957
7
- 22
+ 21
+ 540
+
+
+ 21
+ 27
574
- 22
- 28
- 574
+ 27
+ 32
+ 540
- 28
- 35
- 517
-
-
- 35
+ 32
42
529
- 42
- 58
+ 43
+ 59
551
- 58
- 67
- 608
+ 59
+ 66
+ 495
- 67
- 70
+ 66
+ 69
+ 506
+
+
+ 69
+ 73
585
- 70
- 77
- 416
+ 73
+ 82
+ 45
@@ -3037,62 +3050,62 @@
2
5
- 585
+ 562
5
6
- 630
+ 495
6
7
- 641
+ 788
7
- 10
+ 9
+ 596
+
+
+ 9
+ 19
675
- 10
- 20
- 686
-
-
- 20
- 28
- 675
-
-
- 28
- 35
- 619
-
-
- 35
- 51
+ 19
+ 25
574
- 51
- 68
- 439
+ 25
+ 32
+ 596
- 68
- 70
- 484
+ 32
+ 38
+ 608
- 70
+ 38
+ 67
+ 517
+
+
+ 67
+ 69
+ 517
+
+
+ 69
72
- 574
+ 630
72
- 78
- 304
+ 77
+ 326
@@ -3118,7 +3131,7 @@
seconds
- 11226
+ 11530
@@ -3164,12 +3177,12 @@
6
7
- 11
+ 22
7
8
- 2206
+ 2195
@@ -3215,8 +3228,8 @@
12
- 997
- 998
+ 1024
+ 1025
11
@@ -3263,19 +3276,24 @@
12
- 138
- 139
+ 143
+ 144
11
- 144
- 145
+ 146
+ 147
11
- 152
- 153
- 22
+ 155
+ 156
+ 11
+
+
+ 157
+ 158
+ 11
197
@@ -3296,7 +3314,7 @@
1
2
- 9007
+ 9345
2
@@ -3306,12 +3324,12 @@
3
5
- 945
+ 1035
5
- 10
- 247
+ 8
+ 123
@@ -3327,7 +3345,7 @@
1
2
- 11226
+ 11530
@@ -3343,17 +3361,17 @@
1
2
- 9570
+ 9874
2
3
- 1328
+ 1429
3
5
- 326
+ 225
@@ -4412,7 +4430,7 @@
1
2
- 31693
+ 31692
2
@@ -4481,7 +4499,7 @@
1
2
- 31693
+ 31692
2
@@ -4539,7 +4557,7 @@
1
2
- 40646
+ 40645
2
@@ -4560,7 +4578,7 @@
1
2
- 40646
+ 40645
2
@@ -4581,7 +4599,7 @@
1
2
- 40646
+ 40645
2
@@ -5357,7 +5375,7 @@
cpu_seconds
- 1936
+ 2060
elapsed_seconds
@@ -5407,17 +5425,12 @@
1
2
- 1666
+ 1925
2
- 3
- 258
-
-
- 3
4
- 11
+ 135
@@ -5433,17 +5446,12 @@
1
2
- 1666
+ 1925
2
- 3
- 258
-
-
- 3
4
- 11
+ 135
@@ -5688,19 +5696,19 @@
locations_default
- 137912010
+ 137911541
id
- 137912010
+ 137911541
file
- 73412
+ 73411
beginLine
- 328702
+ 328701
beginColumn
@@ -5708,7 +5716,7 @@
endLine
- 331303
+ 331302
endColumn
@@ -5726,7 +5734,7 @@
1
2
- 137912010
+ 137911541
@@ -5742,7 +5750,7 @@
1
2
- 137912010
+ 137911541
@@ -5758,7 +5766,7 @@
1
2
- 137912010
+ 137911541
@@ -5774,7 +5782,7 @@
1
2
- 137912010
+ 137911541
@@ -5790,7 +5798,7 @@
1
2
- 137912010
+ 137911541
@@ -5963,7 +5971,7 @@
1
6
- 5045
+ 5044
6
@@ -6099,7 +6107,7 @@
2417
135652
- 5197
+ 5196
@@ -6196,7 +6204,7 @@
4
5
- 21425
+ 21424
5
@@ -6520,7 +6528,7 @@
57
78
- 24880
+ 24879
78
@@ -6953,7 +6961,7 @@
2
3
- 76464
+ 76463
3
@@ -7151,7 +7159,7 @@
1
2
- 10090
+ 10089
2
@@ -7345,15 +7353,15 @@
locations_mapped
- 135223
+ 135221
id
- 135223
+ 135221
mapped_to
- 83194
+ 83193
@@ -7367,7 +7375,7 @@
1
2
- 135223
+ 135221
@@ -7383,7 +7391,7 @@
1
2
- 31212
+ 31211
2
@@ -7403,11 +7411,11 @@
numlines
- 60897147
+ 60896940
element_id
- 60897038
+ 60896831
num_lines
@@ -7433,7 +7441,7 @@
1
2
- 60896930
+ 60896723
2
@@ -7454,7 +7462,7 @@
1
2
- 60896932
+ 60896725
2
@@ -7475,7 +7483,7 @@
1
2
- 60897026
+ 60896819
2
@@ -8076,7 +8084,7 @@
1
2
- 14588
+ 14587
3
@@ -8097,7 +8105,7 @@
1
2
- 14588
+ 14587
3
@@ -8150,7 +8158,7 @@
1
2
- 14588
+ 14587
3
@@ -8171,7 +8179,7 @@
1
2
- 14588
+ 14587
3
@@ -8382,15 +8390,15 @@
files
- 106541
+ 106540
id
- 106541
+ 106540
name
- 106541
+ 106540
@@ -8404,7 +8412,7 @@
1
2
- 106541
+ 106540
@@ -8420,7 +8428,7 @@
1
2
- 106541
+ 106540
@@ -8478,7 +8486,7 @@
containerparent
- 143755
+ 143753
parent
@@ -8486,7 +8494,7 @@
child
- 143755
+ 143753
@@ -8546,7 +8554,7 @@
1
2
- 143755
+ 143753
@@ -8604,15 +8612,15 @@
namespaces
- 500337
+ 500332
id
- 500337
+ 500332
name
- 86288
+ 86287
@@ -8626,7 +8634,7 @@
1
2
- 500337
+ 500332
@@ -8647,7 +8655,7 @@
2
3
- 52830
+ 52829
3
@@ -8692,11 +8700,11 @@
namespace_declarations
- 42810
+ 42809
id
- 42810
+ 42809
namespace_id
@@ -8714,7 +8722,7 @@
1
2
- 42810
+ 42809
@@ -8775,15 +8783,15 @@
namespace_declaration_location
- 42810
+ 42809
id
- 42810
+ 42809
loc
- 42810
+ 42809
@@ -8797,7 +8805,7 @@
1
2
- 42810
+ 42809
@@ -8813,7 +8821,7 @@
1
2
- 42810
+ 42809
@@ -8823,15 +8831,15 @@
parent_namespace
- 9856437
+ 9856345
child_id
- 9856437
+ 9856345
namespace_id
- 314826
+ 314823
@@ -8845,7 +8853,7 @@
1
2
- 9856437
+ 9856345
@@ -8861,12 +8869,12 @@
1
2
- 81977
+ 81976
2
3
- 44857
+ 44856
3
@@ -8876,7 +8884,7 @@
4
5
- 21321
+ 21320
5
@@ -8891,7 +8899,7 @@
8
12
- 28556
+ 28555
12
@@ -8901,7 +8909,7 @@
19
44
- 23831
+ 23830
44
@@ -8938,7 +8946,7 @@
1
2
- 53097
+ 53096
2
@@ -8995,11 +9003,11 @@
using_namespace_directives
- 223779
+ 223777
id
- 223779
+ 223777
namespace_id
@@ -9017,7 +9025,7 @@
1
2
- 223779
+ 223777
@@ -9136,15 +9144,15 @@
using_directive_location
- 223959
+ 223957
id
- 223959
+ 223957
loc
- 223846
+ 223844
@@ -9158,7 +9166,7 @@
1
2
- 223959
+ 223957
@@ -9174,7 +9182,7 @@
1
2
- 223734
+ 223732
2
@@ -9189,11 +9197,11 @@
directive_ifs
- 16750
+ 16749
id
- 16750
+ 16749
branchTaken
@@ -9215,7 +9223,7 @@
1
2
- 16750
+ 16749
@@ -9231,7 +9239,7 @@
1
2
- 16750
+ 16749
@@ -10057,7 +10065,7 @@
start
- 16750
+ 16749
@@ -10087,7 +10095,7 @@
1
2
- 16750
+ 16749
@@ -10097,11 +10105,11 @@
directive_define_symbols
- 32513
+ 32512
id
- 32513
+ 32512
name
@@ -10119,7 +10127,7 @@
1
2
- 32513
+ 32512
@@ -11632,15 +11640,15 @@
preprocessor_directive_location
- 79638
+ 79637
id
- 79638
+ 79637
loc
- 79638
+ 79637
@@ -11654,7 +11662,7 @@
1
2
- 79638
+ 79637
@@ -11670,7 +11678,7 @@
1
2
- 79638
+ 79637
@@ -11680,11 +11688,11 @@
preprocessor_directive_compilation
- 79638
+ 79637
id
- 79638
+ 79637
compilation
@@ -11702,7 +11710,7 @@
1
2
- 79638
+ 79637
@@ -11753,11 +11761,11 @@
preprocessor_directive_active
- 79638
+ 79637
id
- 79638
+ 79637
active
@@ -11775,7 +11783,7 @@
1
2
- 79638
+ 79637
@@ -11806,11 +11814,11 @@
types
- 11520193
+ 11520085
id
- 11520193
+ 11520085
kind
@@ -11818,7 +11826,7 @@
name
- 3497046
+ 3497013
@@ -11832,7 +11840,7 @@
1
2
- 11520193
+ 11520085
@@ -11848,7 +11856,7 @@
1
2
- 11520193
+ 11520085
@@ -11951,17 +11959,17 @@
1
2
- 3141586
+ 3141557
2
5
- 274812
+ 274809
5
21597
- 80648
+ 80647
@@ -11977,7 +11985,7 @@
1
2
- 3468460
+ 3468428
2
@@ -11992,15 +12000,15 @@
typerefs
- 4815264
+ 4815219
id
- 4815264
+ 4815219
name
- 3370389
+ 3370358
@@ -12014,7 +12022,7 @@
1
2
- 4815264
+ 4815219
@@ -12030,12 +12038,12 @@
1
2
- 3128415
+ 3128386
2
11806
- 241973
+ 241971
@@ -12045,15 +12053,15 @@
typeref_type
- 4775132
+ 4775087
id
- 4775132
+ 4775087
typeId
- 4775132
+ 4775087
@@ -12067,7 +12075,7 @@
1
2
- 4775132
+ 4775087
@@ -12083,7 +12091,7 @@
1
2
- 4775132
+ 4775087
@@ -12093,11 +12101,11 @@
array_element_type
- 116793
+ 116792
array
- 116793
+ 116792
dimension
@@ -12109,7 +12117,7 @@
element
- 116409
+ 116408
@@ -12123,7 +12131,7 @@
1
2
- 116793
+ 116792
@@ -12139,7 +12147,7 @@
1
2
- 116793
+ 116792
@@ -12155,7 +12163,7 @@
1
2
- 116793
+ 116792
@@ -12317,7 +12325,7 @@
1
2
- 116084
+ 116083
2
@@ -12338,7 +12346,7 @@
1
2
- 116409
+ 116408
@@ -12354,7 +12362,7 @@
1
2
- 116084
+ 116083
2
@@ -12465,11 +12473,11 @@
enum_underlying_type
- 204056
+ 204054
enum_id
- 204056
+ 204054
underlying_type_id
@@ -12487,7 +12495,7 @@
1
2
- 204056
+ 204054
@@ -12548,15 +12556,15 @@
delegate_return_type
- 1214025
+ 1214014
delegate_id
- 1214025
+ 1214014
return_type_id
- 609581
+ 609575
@@ -12570,7 +12578,7 @@
1
2
- 1214025
+ 1214014
@@ -12586,12 +12594,12 @@
1
2
- 578365
+ 578359
2
2134
- 31216
+ 31215
@@ -12669,15 +12677,15 @@
extend
- 3912749
+ 3912712
sub
- 3912749
+ 3912712
super
- 608567
+ 608561
@@ -12691,7 +12699,7 @@
1
2
- 3912749
+ 3912712
@@ -12707,12 +12715,12 @@
1
2
- 412779
+ 412775
2
3
- 97451
+ 97450
3
@@ -12722,12 +12730,12 @@
5
107
- 45654
+ 45653
107
31892
- 1447
+ 1446
@@ -12748,15 +12756,15 @@
implement
- 12929395
+ 12929274
sub
- 4515705
+ 4515663
super
- 2758958
+ 2758932
@@ -12770,32 +12778,32 @@
1
2
- 1532610
+ 1532595
2
3
- 1232578
+ 1232567
3
4
- 844694
+ 844686
4
6
- 367567
+ 367564
6
9
- 339011
+ 339008
9
32
- 199243
+ 199241
@@ -12811,27 +12819,27 @@
1
2
- 1324507
+ 1324495
2
3
- 815340
+ 815333
3
5
- 236392
+ 236390
5
6
- 215396
+ 215394
6
90747
- 167320
+ 167318
@@ -12841,11 +12849,11 @@
type_location
- 6161742
+ 6161685
id
- 6071408
+ 6071351
loc
@@ -12863,7 +12871,7 @@
1
2
- 6041080
+ 6041024
2
@@ -12944,15 +12952,15 @@
tuple_underlying_type
- 37858
+ 37857
tuple
- 37858
+ 37857
struct
- 37858
+ 37857
@@ -12966,7 +12974,7 @@
1
2
- 37858
+ 37857
@@ -12982,7 +12990,7 @@
1
2
- 37858
+ 37857
@@ -12992,7 +13000,7 @@
tuple_element
- 99961
+ 99960
tuple
@@ -13004,7 +13012,7 @@
field
- 99961
+ 99960
@@ -13322,7 +13330,7 @@
1
2
- 99961
+ 99960
@@ -13338,7 +13346,7 @@
1
2
- 99961
+ 99960
@@ -13348,11 +13356,11 @@
attributes
- 14554229
+ 14554093
id
- 14554229
+ 14554093
kind
@@ -13364,7 +13372,7 @@
target
- 12720347
+ 12720228
@@ -13378,7 +13386,7 @@
1
2
- 14554229
+ 14554093
@@ -13394,7 +13402,7 @@
1
2
- 14554229
+ 14554093
@@ -13410,7 +13418,7 @@
1
2
- 14554229
+ 14554093
@@ -13534,7 +13542,7 @@
14
23
- 1447
+ 1446
23
@@ -13544,7 +13552,7 @@
40
86
- 1447
+ 1446
88
@@ -13651,7 +13659,7 @@
152
380
- 1447
+ 1446
385
@@ -13677,12 +13685,12 @@
1
2
- 11789749
+ 11789638
2
3520
- 930598
+ 930589
@@ -13698,7 +13706,7 @@
1
2
- 12664594
+ 12664475
2
@@ -13719,12 +13727,12 @@
1
2
- 11960465
+ 11960353
2
29
- 759882
+ 759875
@@ -13734,11 +13742,11 @@
attribute_location
- 14556089
+ 14555953
id
- 14554229
+ 14554093
loc
@@ -13756,7 +13764,7 @@
1
2
- 14552752
+ 14552616
2
@@ -13847,19 +13855,19 @@
type_mention
- 2667838
+ 2667808
id
- 2667838
+ 2667808
type_id
- 76163
+ 76156
parent
- 2110780
+ 2110766
@@ -13873,7 +13881,7 @@
1
2
- 2667838
+ 2667808
@@ -13889,7 +13897,7 @@
1
2
- 2667838
+ 2667808
@@ -13905,17 +13913,17 @@
1
2
- 13028
+ 13027
2
3
- 14823
+ 14820
3
4
- 8378
+ 8377
4
@@ -13930,7 +13938,7 @@
6
7
- 5252
+ 5251
7
@@ -13945,17 +13953,17 @@
16
36
- 5803
+ 5802
36
- 760
- 5714
+ 758
+ 5711
- 762
+ 759
97094
- 360
+ 362
@@ -13971,12 +13979,12 @@
1
2
- 23361
+ 23359
2
3
- 12267
+ 12264
3
@@ -13986,7 +13994,7 @@
4
5
- 6013
+ 6012
5
@@ -14001,7 +14009,7 @@
8
13
- 5964
+ 5963
13
@@ -14010,13 +14018,13 @@
30
- 609
- 5714
+ 607
+ 5711
- 612
- 73794
- 383
+ 608
+ 73798
+ 385
@@ -14032,17 +14040,17 @@
1
2
- 1801358
+ 1801339
2
3
- 219426
+ 219408
3
613
- 89995
+ 90019
@@ -14058,12 +14066,12 @@
1
2
- 2067454
+ 2067445
2
38
- 43325
+ 43320
@@ -14073,15 +14081,15 @@
type_mention_location
- 2667838
+ 2667808
id
- 2667838
+ 2667808
loc
- 2358635
+ 2358655
@@ -14095,7 +14103,7 @@
1
2
- 2667838
+ 2667808
@@ -14111,12 +14119,12 @@
1
2
- 2217587
+ 2217592
2
205
- 141048
+ 141062
@@ -14126,11 +14134,11 @@
type_annotation
- 1259639
+ 1259627
id
- 1259639
+ 1259627
annotation
@@ -14148,7 +14156,7 @@
1
2
- 1259639
+ 1259627
@@ -14543,15 +14551,15 @@
type_nullability
- 44405235
+ 44404820
id
- 44402076
+ 44401660
nullability
- 28113
+ 28112
@@ -14565,7 +14573,7 @@
1
2
- 44399034
+ 44398619
2
@@ -14586,7 +14594,7 @@
1
2
- 10129
+ 10128
2
@@ -14596,7 +14604,7 @@
3
4
- 2894
+ 2893
4
@@ -14636,11 +14644,11 @@
expr_flowstate
- 5429110
+ 5429197
id
- 5429110
+ 5429197
state
@@ -14658,7 +14666,7 @@
1
2
- 5429110
+ 5429197
@@ -14672,13 +14680,13 @@
12
- 223701
- 223702
+ 223736
+ 223737
2
- 2337771
- 2337772
+ 2337938
+ 2337939
2
@@ -14689,11 +14697,11 @@
type_parameters
- 991372
+ 991363
id
- 991372
+ 991363
index
@@ -14701,7 +14709,7 @@
generic_id
- 758317
+ 758309
variance
@@ -14719,7 +14727,7 @@
1
2
- 991372
+ 991363
@@ -14735,7 +14743,7 @@
1
2
- 991372
+ 991363
@@ -14751,7 +14759,7 @@
1
2
- 991372
+ 991363
@@ -14915,12 +14923,12 @@
1
2
- 592797
+ 592792
2
3
- 137258
+ 137257
3
@@ -14941,12 +14949,12 @@
1
2
- 592797
+ 592792
2
3
- 137258
+ 137257
3
@@ -14967,7 +14975,7 @@
1
2
- 757135
+ 757128
2
@@ -15060,11 +15068,11 @@
type_arguments
- 24843956
+ 24843724
id
- 789924
+ 789917
index
@@ -15072,7 +15080,7 @@
constructed_id
- 2591723
+ 2591698
@@ -15086,17 +15094,17 @@
1
2
- 216091
+ 216089
2
3
- 548605
+ 548600
3
8
- 25228
+ 25227
@@ -15112,22 +15120,22 @@
1
2
- 82752
+ 82751
2
3
- 587919
+ 587914
3
10
- 61303
+ 61302
10
3477
- 57949
+ 57948
@@ -15325,37 +15333,37 @@
1
2
- 408050
+ 408047
2
3
- 1236259
+ 1236248
3
19
- 213081
+ 213079
19
24
- 198798
+ 198796
24
28
- 230194
+ 230192
28
31
- 221032
+ 221030
31
33
- 84306
+ 84305
@@ -15371,37 +15379,37 @@
1
2
- 403306
+ 403302
2
3
- 1238582
+ 1238571
3
19
- 215502
+ 215500
19
24
- 198798
+ 198796
24
28
- 230194
+ 230192
28
31
- 221032
+ 221030
31
33
- 84306
+ 84305
@@ -15411,15 +15419,15 @@
constructed_generic
- 5258135
+ 5258085
constructed
- 5258135
+ 5258085
generic
- 108318
+ 108317
@@ -15433,7 +15441,7 @@
1
2
- 5258135
+ 5258085
@@ -15459,7 +15467,7 @@
3
4
- 10631
+ 10630
4
@@ -15489,7 +15497,7 @@
149
19826
- 3396
+ 3395
@@ -15499,15 +15507,15 @@
type_parameter_constraints
- 991372
+ 991363
id
- 991372
+ 991363
param_id
- 991372
+ 991363
@@ -15521,7 +15529,7 @@
1
2
- 991372
+ 991363
@@ -15537,7 +15545,7 @@
1
2
- 991372
+ 991363
@@ -15583,11 +15591,11 @@
general_type_parameter_constraints
- 283258
+ 283256
id
- 282033
+ 282031
kind
@@ -15605,7 +15613,7 @@
1
2
- 280808
+ 280806
2
@@ -15656,11 +15664,11 @@
specific_type_parameter_constraints
- 302127
+ 302125
id
- 295217
+ 295214
base_id
@@ -15678,7 +15686,7 @@
1
2
- 290167
+ 290165
2
@@ -15699,7 +15707,7 @@
1
2
- 24776
+ 24775
2
@@ -15739,7 +15747,7 @@
specific_type_parameter_nullability
- 35626
+ 35625
id
@@ -16126,11 +16134,11 @@
has_modifiers
- 100736682
+ 100735739
id
- 66663238
+ 66662615
mod_id
@@ -16148,17 +16156,17 @@
1
2
- 34234237
+ 34233917
2
3
- 30788810
+ 30788522
3
5
- 1640190
+ 1640174
@@ -16249,11 +16257,11 @@
compiler_generated
- 1278339
+ 1278327
id
- 1278339
+ 1278327
@@ -16348,19 +16356,19 @@
nested_types
- 2161819
+ 2161798
id
- 2161819
+ 2161798
declaring_type_id
- 867580
+ 867572
unbound_id
- 1812914
+ 1812897
@@ -16374,7 +16382,7 @@
1
2
- 2161819
+ 2161798
@@ -16390,7 +16398,7 @@
1
2
- 2161819
+ 2161798
@@ -16406,12 +16414,12 @@
1
2
- 507720
+ 507715
2
3
- 151344
+ 151343
3
@@ -16447,27 +16455,27 @@
1
2
- 509816
+ 509812
2
3
- 152023
+ 152022
3
4
- 71848
+ 71847
4
6
- 65587
+ 65586
6
26
- 65085
+ 65084
26
@@ -16488,12 +16496,12 @@
1
2
- 1746795
+ 1746779
2
490
- 66119
+ 66118
@@ -16509,7 +16517,7 @@
1
2
- 1757397
+ 1757380
2
@@ -16524,27 +16532,27 @@
properties
- 6642412
+ 6642350
id
- 6642412
+ 6642350
name
- 1540642
+ 1540628
declaring_type_id
- 1854464
+ 1854447
type_id
- 737232
+ 737225
unbound_id
- 5942802
+ 5942747
@@ -16558,7 +16566,7 @@
1
2
- 6642412
+ 6642350
@@ -16574,7 +16582,7 @@
1
2
- 6642412
+ 6642350
@@ -16590,7 +16598,7 @@
1
2
- 6642412
+ 6642350
@@ -16606,7 +16614,7 @@
1
2
- 6642412
+ 6642350
@@ -16622,27 +16630,27 @@
1
2
- 972266
+ 972257
2
3
- 248204
+ 248202
3
4
- 95265
+ 95264
4
8
- 124087
+ 124086
8
8341
- 100817
+ 100816
@@ -16658,27 +16666,27 @@
1
2
- 972266
+ 972257
2
3
- 248559
+ 248556
3
4
- 95118
+ 95117
4
8
- 124412
+ 124411
8
4889
- 100286
+ 100285
@@ -16694,12 +16702,12 @@
1
2
- 1346951
+ 1346938
2
3
- 111448
+ 111447
3
@@ -16720,12 +16728,12 @@
1
2
- 980741
+ 980732
2
3
- 254051
+ 254049
3
@@ -16735,12 +16743,12 @@
4
8
- 120130
+ 120129
8
7118
- 90275
+ 90274
@@ -16756,37 +16764,37 @@
1
2
- 660127
+ 660121
2
3
- 435281
+ 435277
3
4
- 247023
+ 247021
4
5
- 156837
+ 156835
5
7
- 156010
+ 156008
7
14
- 142130
+ 142129
14
2090
- 57053
+ 57052
@@ -16802,37 +16810,37 @@
1
2
- 762392
+ 762385
2
3
- 334641
+ 334637
3
4
- 247407
+ 247405
4
5
- 159435
+ 159434
5
7
- 155951
+ 155949
7
14
- 139916
+ 139914
14
2090
- 54720
+ 54719
@@ -16848,27 +16856,27 @@
1
2
- 764990
+ 764983
2
3
- 530281
+ 530276
3
4
- 228389
+ 228387
4
5
- 122552
+ 122550
5
9
- 154563
+ 154561
9
@@ -16889,37 +16897,37 @@
1
2
- 660127
+ 660121
2
3
- 435281
+ 435277
3
4
- 247023
+ 247021
4
5
- 156837
+ 156835
5
7
- 156010
+ 156008
7
14
- 142130
+ 142129
14
2090
- 57053
+ 57052
@@ -16935,17 +16943,17 @@
1
2
- 402738
+ 402734
2
3
- 152023
+ 152022
3
4
- 49375
+ 49374
4
@@ -16955,7 +16963,7 @@
7
32
- 55340
+ 55339
32
@@ -16976,12 +16984,12 @@
1
2
- 589136
+ 589130
2
3
- 82449
+ 82448
3
@@ -17007,12 +17015,12 @@
1
2
- 421756
+ 421752
2
3
- 145733
+ 145732
3
@@ -17027,7 +17035,7 @@
7
51
- 55399
+ 55398
51
@@ -17048,12 +17056,12 @@
1
2
- 404923
+ 404920
2
3
- 154268
+ 154266
3
@@ -17063,12 +17071,12 @@
4
7
- 62575
+ 62574
7
40
- 55399
+ 55398
40
@@ -17089,12 +17097,12 @@
1
2
- 5841365
+ 5841310
2
1206
- 101437
+ 101436
@@ -17110,7 +17118,7 @@
1
2
- 5942802
+ 5942747
@@ -17126,12 +17134,12 @@
1
2
- 5841365
+ 5841310
2
1206
- 101437
+ 101436
@@ -17147,12 +17155,12 @@
1
2
- 5921038
+ 5920983
2
1206
- 21764
+ 21763
@@ -17162,15 +17170,15 @@
property_location
- 6657089
+ 6657027
id
- 6642412
+ 6642350
loc
- 10926
+ 10955
@@ -17184,7 +17192,7 @@
1
2
- 6631840
+ 6631778
2
@@ -17205,7 +17213,7 @@
1
5
- 885
+ 915
5
@@ -17280,11 +17288,11 @@
indexers
- 105719
+ 105718
id
- 105719
+ 105718
name
@@ -17292,7 +17300,7 @@
declaring_type_id
- 92814
+ 92813
type_id
@@ -17314,7 +17322,7 @@
1
2
- 105719
+ 105718
@@ -17330,7 +17338,7 @@
1
2
- 105719
+ 105718
@@ -17346,7 +17354,7 @@
1
2
- 105719
+ 105718
@@ -17362,7 +17370,7 @@
1
2
- 105719
+ 105718
@@ -17563,7 +17571,7 @@
1
2
- 92726
+ 92725
2
@@ -17584,7 +17592,7 @@
1
2
- 86731
+ 86730
2
@@ -17688,7 +17696,7 @@
1
2
- 14027
+ 14026
2
@@ -17818,7 +17826,7 @@
1
2
- 35968
+ 35967
2
@@ -17833,11 +17841,11 @@
indexer_location
- 106044
+ 106043
id
- 105719
+ 105718
loc
@@ -17855,7 +17863,7 @@
1
2
- 105394
+ 105393
2
@@ -17926,11 +17934,11 @@
accessors
- 7915360
+ 7915286
id
- 7915360
+ 7915286
kind
@@ -17938,15 +17946,15 @@
name
- 2102196
+ 2102177
declaring_member_id
- 6746921
+ 6746858
unbound_id
- 7039570
+ 7039504
@@ -17960,7 +17968,7 @@
1
2
- 7915360
+ 7915286
@@ -17976,7 +17984,7 @@
1
2
- 7915360
+ 7915286
@@ -17992,7 +18000,7 @@
1
2
- 7915360
+ 7915286
@@ -18008,7 +18016,7 @@
1
2
- 7915360
+ 7915286
@@ -18108,27 +18116,27 @@
1
2
- 1367179
+ 1367166
2
3
- 330831
+ 330828
3
5
- 191653
+ 191651
5
17
- 160587
+ 160586
17
3385
- 51944
+ 51943
@@ -18144,7 +18152,7 @@
1
2
- 2102196
+ 2102177
@@ -18160,27 +18168,27 @@
1
2
- 1367179
+ 1367166
2
3
- 330831
+ 330828
3
5
- 191653
+ 191651
5
17
- 160587
+ 160586
17
3385
- 51944
+ 51943
@@ -18196,22 +18204,22 @@
1
2
- 1382003
+ 1381990
2
3
- 339690
+ 339687
3
5
- 189616
+ 189614
5
24
- 158786
+ 158784
24
@@ -18232,12 +18240,12 @@
1
2
- 5578483
+ 5578431
2
3
- 1168438
+ 1168427
@@ -18253,12 +18261,12 @@
1
2
- 5578483
+ 5578431
2
3
- 1168438
+ 1168427
@@ -18274,12 +18282,12 @@
1
2
- 5578483
+ 5578431
2
3
- 1168438
+ 1168427
@@ -18295,12 +18303,12 @@
1
2
- 5578483
+ 5578431
2
3
- 1168438
+ 1168427
@@ -18316,12 +18324,12 @@
1
2
- 6919853
+ 6919788
2
1206
- 119717
+ 119716
@@ -18337,7 +18345,7 @@
1
2
- 7039570
+ 7039504
@@ -18353,7 +18361,7 @@
1
2
- 7039570
+ 7039504
@@ -18369,12 +18377,12 @@
1
2
- 6919853
+ 6919788
2
1206
- 119717
+ 119716
@@ -18395,15 +18403,15 @@
accessor_location
- 7933078
+ 7933004
id
- 7915360
+ 7915286
loc
- 10926
+ 10955
@@ -18417,7 +18425,7 @@
1
2
- 7901923
+ 7901849
2
@@ -18438,67 +18446,67 @@
1
6
- 885
+ 944
6
- 12
+ 13
+ 974
+
+
+ 13
+ 26
+ 856
+
+
+ 26
+ 43
826
- 12
- 22
+ 44
+ 68
826
- 22
- 38
- 885
-
-
- 38
- 66
- 915
-
-
- 67
- 105
+ 68
+ 106
826
- 105
- 161
+ 116
+ 167
826
- 164
- 269
+ 168
+ 273
+ 856
+
+
+ 275
+ 373
826
- 269
- 361
+ 373
+ 492
826
- 364
- 464
+ 517
+ 1154
826
- 477
- 1105
+ 1167
+ 2661
826
- 1105
- 2387
- 826
-
-
- 2455
+ 2853
13984
- 797
+ 708
@@ -18520,7 +18528,7 @@
declaring_type_id
- 33842
+ 33841
type_id
@@ -18528,7 +18536,7 @@
unbound_id
- 70637
+ 70636
@@ -18791,7 +18799,7 @@
3
4
- 3396
+ 3395
4
@@ -18945,7 +18953,7 @@
3
262
- 1447
+ 1446
@@ -19007,7 +19015,7 @@
3
4
- 3396
+ 3395
4
@@ -19033,7 +19041,7 @@
1
2
- 68127
+ 68126
2
@@ -19054,7 +19062,7 @@
1
2
- 70637
+ 70636
@@ -19070,7 +19078,7 @@
1
2
- 68127
+ 68126
2
@@ -19199,11 +19207,11 @@
event_accessors
- 160823
+ 160822
id
- 160823
+ 160822
kind
@@ -19211,7 +19219,7 @@
name
- 68688
+ 68687
declaring_event_id
@@ -19219,7 +19227,7 @@
unbound_id
- 141274
+ 141273
@@ -19233,7 +19241,7 @@
1
2
- 160823
+ 160822
@@ -19249,7 +19257,7 @@
1
2
- 160823
+ 160822
@@ -19265,7 +19273,7 @@
1
2
- 160823
+ 160822
@@ -19281,7 +19289,7 @@
1
2
- 160823
+ 160822
@@ -19397,7 +19405,7 @@
1
2
- 68688
+ 68687
@@ -19549,7 +19557,7 @@
1
2
- 136254
+ 136253
2
@@ -19570,7 +19578,7 @@
1
2
- 141274
+ 141273
@@ -19586,7 +19594,7 @@
1
2
- 141274
+ 141273
@@ -19602,7 +19610,7 @@
1
2
- 136254
+ 136253
2
@@ -19617,11 +19625,11 @@
event_accessor_location
- 160823
+ 160822
id
- 160823
+ 160822
loc
@@ -19639,7 +19647,7 @@
1
2
- 160823
+ 160822
@@ -19710,11 +19718,11 @@
operators
- 629721
+ 629715
id
- 629721
+ 629715
name
@@ -19726,11 +19734,11 @@
declaring_type_id
- 75488
+ 75487
type_id
- 30578
+ 30577
unbound_id
@@ -19748,7 +19756,7 @@
1
2
- 629721
+ 629715
@@ -19764,7 +19772,7 @@
1
2
- 629721
+ 629715
@@ -19780,7 +19788,7 @@
1
2
- 629721
+ 629715
@@ -19796,7 +19804,7 @@
1
2
- 629721
+ 629715
@@ -19812,7 +19820,7 @@
1
2
- 629721
+ 629715
@@ -20443,7 +20451,7 @@
7
16
- 5808
+ 5807
16
@@ -20552,7 +20560,7 @@
7
16
- 5808
+ 5807
16
@@ -20813,7 +20821,7 @@
1
2
- 66686
+ 66685
2
@@ -20871,7 +20879,7 @@
1
2
- 66686
+ 66685
2
@@ -20917,15 +20925,15 @@
operator_location
- 1210557
+ 1210545
id
- 586251
+ 586245
loc
- 10667
+ 10683
@@ -20944,12 +20952,12 @@
2
3
- 567174
+ 567169
3
7
- 15248
+ 15247
@@ -20985,7 +20993,7 @@
39
50
- 916
+ 899
52
@@ -21010,7 +21018,7 @@
79
83
- 850
+ 867
85
@@ -21025,12 +21033,12 @@
97
279
- 801
+ 834
- 345
- 17300
- 65
+ 664
+ 17251
+ 49
@@ -21040,15 +21048,15 @@
constant_value
- 3875422
+ 3875386
id
- 3873680
+ 3873643
value
- 1314319
+ 1314307
@@ -21062,7 +21070,7 @@
1
2
- 3872528
+ 3872492
2
@@ -21083,17 +21091,17 @@
1
2
- 1062512
+ 1062502
2
3
- 130820
+ 130819
3
10
- 101821
+ 101820
10
@@ -21108,27 +21116,27 @@
methods
- 20454980
+ 20454789
id
- 20454980
+ 20454789
name
- 5761337
+ 5761283
declaring_type_id
- 4275208
+ 4275168
type_id
- 1360564
+ 1360551
unbound_id
- 16901323
+ 16901165
@@ -21142,7 +21150,7 @@
1
2
- 20454980
+ 20454789
@@ -21158,7 +21166,7 @@
1
2
- 20454980
+ 20454789
@@ -21174,7 +21182,7 @@
1
2
- 20454980
+ 20454789
@@ -21190,7 +21198,7 @@
1
2
- 20454980
+ 20454789
@@ -21206,22 +21214,22 @@
1
2
- 4128352
+ 4128313
2
3
- 674804
+ 674798
3
5
- 458551
+ 458547
5
26
- 434749
+ 434745
26
@@ -21242,22 +21250,22 @@
1
2
- 4308282
+ 4308242
2
3
- 587629
+ 587624
3
6
- 515220
+ 515216
6
10142
- 350203
+ 350200
@@ -21273,17 +21281,17 @@
1
2
- 5249541
+ 5249492
2
7
- 440360
+ 440356
7
2905
- 71434
+ 71433
@@ -21299,22 +21307,22 @@
1
2
- 4191695
+ 4191656
2
3
- 694589
+ 694583
3
5
- 457960
+ 457956
5
8458
- 417090
+ 417086
@@ -21330,42 +21338,42 @@
1
2
- 1491562
+ 1491548
2
3
- 954902
+ 954893
3
4
- 425388
+ 425384
4
5
- 301773
+ 301770
5
6
- 243096
+ 243093
6
9
- 373828
+ 373824
9
18
- 328971
+ 328968
18
8066
- 155685
+ 155684
@@ -21381,37 +21389,37 @@
1
2
- 1548261
+ 1548246
2
3
- 987947
+ 987937
3
4
- 436728
+ 436724
4
5
- 342466
+ 342463
5
6
- 264771
+ 264769
6
10
- 361484
+ 361481
10
70
- 320850
+ 320847
70
@@ -21432,32 +21440,32 @@
1
2
- 2042987
+ 2042968
2
3
- 1046683
+ 1046673
3
4
- 428371
+ 428367
4
5
- 350735
+ 350731
5
10
- 321559
+ 321556
10
848
- 84871
+ 84870
@@ -21473,42 +21481,42 @@
1
2
- 1491592
+ 1491578
2
3
- 954872
+ 954863
3
4
- 425388
+ 425384
4
5
- 301773
+ 301770
5
6
- 243096
+ 243093
6
9
- 373828
+ 373824
9
18
- 328971
+ 328968
18
8066
- 155685
+ 155684
@@ -21524,32 +21532,32 @@
1
2
- 771576
+ 771569
2
3
- 224580
+ 224578
3
4
- 98868
+ 98867
4
7
- 120691
+ 120690
7
23
- 102766
+ 102765
23
192615
- 42081
+ 42080
@@ -21565,22 +21573,22 @@
1
2
- 948848
+ 948839
2
3
- 179546
+ 179544
3
5
- 116380
+ 116379
5
27
- 102235
+ 102234
27
@@ -21601,22 +21609,22 @@
1
2
- 883290
+ 883282
2
3
- 215160
+ 215158
3
4
- 88798
+ 88797
4
9
- 108554
+ 108553
9
@@ -21637,22 +21645,22 @@
1
2
- 774322
+ 774315
2
3
- 226381
+ 226379
3
4
- 99163
+ 99162
4
7
- 121607
+ 121605
7
@@ -21662,7 +21670,7 @@
24
167300
- 36913
+ 36912
@@ -21678,12 +21686,12 @@
1
2
- 16368679
+ 16368526
2
3017
- 532643
+ 532638
@@ -21699,7 +21707,7 @@
1
2
- 16901323
+ 16901165
@@ -21715,12 +21723,12 @@
1
2
- 16368797
+ 16368644
2
3017
- 532525
+ 532520
@@ -21736,12 +21744,12 @@
1
2
- 16731877
+ 16731720
2
1636
- 169446
+ 169445
@@ -21751,11 +21759,11 @@
method_location
- 20553553
+ 20553361
id
- 20454980
+ 20454789
loc
@@ -21773,7 +21781,7 @@
1
2
- 20387030
+ 20386839
2
@@ -21864,23 +21872,23 @@
constructors
- 5991233
+ 5991176
id
- 5991233
+ 5991176
name
- 2792770
+ 2792744
declaring_type_id
- 4484787
+ 4484745
unbound_id
- 5562625
+ 5562573
@@ -21894,7 +21902,7 @@
1
2
- 5991233
+ 5991176
@@ -21910,7 +21918,7 @@
1
2
- 5991233
+ 5991176
@@ -21926,7 +21934,7 @@
1
2
- 5991233
+ 5991176
@@ -21942,17 +21950,17 @@
1
2
- 2023704
+ 2023685
2
3
- 507720
+ 507715
3
7
- 213388
+ 213386
7
@@ -21973,17 +21981,17 @@
1
2
- 2556289
+ 2556265
2
6
- 210435
+ 210433
6
11806
- 26046
+ 26045
@@ -21999,17 +22007,17 @@
1
2
- 2053914
+ 2053895
2
3
- 509344
+ 509339
3
10
- 211291
+ 211289
10
@@ -22030,17 +22038,17 @@
1
2
- 3341745
+ 3341713
2
3
- 968752
+ 968743
3
55
- 174289
+ 174288
@@ -22056,7 +22064,7 @@
1
2
- 4484787
+ 4484745
@@ -22072,17 +22080,17 @@
1
2
- 3341745
+ 3341713
2
3
- 968752
+ 968743
3
55
- 174289
+ 174288
@@ -22098,7 +22106,7 @@
1
2
- 5506044
+ 5505993
2
@@ -22119,7 +22127,7 @@
1
2
- 5562625
+ 5562573
@@ -22135,7 +22143,7 @@
1
2
- 5506044
+ 5505993
2
@@ -22150,11 +22158,11 @@
constructor_location
- 6040667
+ 6040610
id
- 5991233
+ 5991176
loc
@@ -22172,7 +22180,7 @@
1
2
- 5971329
+ 5971273
2
@@ -22526,7 +22534,7 @@
1
2
- 6290
+ 6289
2
@@ -22582,15 +22590,15 @@
overrides
- 4832155
+ 4832110
id
- 4832155
+ 4832110
base_id
- 1569700
+ 1569685
@@ -22604,7 +22612,7 @@
1
2
- 4832155
+ 4832110
@@ -22620,22 +22628,22 @@
1
2
- 1071371
+ 1071361
2
3
- 247171
+ 247169
3
5
- 127336
+ 127334
5
44
- 117738
+ 117737
44
@@ -22650,15 +22658,15 @@
explicitly_implements
- 1824372
+ 1824355
id
- 1823811
+ 1823794
interface_id
- 134836
+ 134835
@@ -22672,7 +22680,7 @@
1
2
- 1823250
+ 1823233
2
@@ -22693,7 +22701,7 @@
1
2
- 69072
+ 69071
2
@@ -22713,12 +22721,12 @@
6
10
- 10188
+ 10187
10
35
- 10188
+ 10187
35
@@ -23077,11 +23085,11 @@
fields
- 14976517
+ 14976377
id
- 14976517
+ 14976377
kind
@@ -23089,19 +23097,19 @@
name
- 6219416
+ 6219358
declaring_type_id
- 3386631
+ 3386599
type_id
- 2968123
+ 2968095
unbound_id
- 14485511
+ 14485376
@@ -23115,7 +23123,7 @@
1
2
- 14976517
+ 14976377
@@ -23131,7 +23139,7 @@
1
2
- 14976517
+ 14976377
@@ -23147,7 +23155,7 @@
1
2
- 14976517
+ 14976377
@@ -23163,7 +23171,7 @@
1
2
- 14976517
+ 14976377
@@ -23179,7 +23187,7 @@
1
2
- 14976517
+ 14976377
@@ -23300,22 +23308,22 @@
1
2
- 4898363
+ 4898317
2
3
- 694826
+ 694819
3
8
- 467558
+ 467554
8
12308
- 158668
+ 158666
@@ -23331,12 +23339,12 @@
1
2
- 6076724
+ 6076667
2
3
- 142691
+ 142690
@@ -23352,22 +23360,22 @@
1
2
- 4898363
+ 4898317
2
3
- 694855
+ 694849
3
8
- 467528
+ 467524
8
12308
- 158668
+ 158666
@@ -23383,17 +23391,17 @@
1
2
- 5453627
+ 5453576
2
3
- 467587
+ 467583
3
12308
- 298200
+ 298197
@@ -23409,22 +23417,22 @@
1
2
- 4931319
+ 4931273
2
3
- 696538
+ 696532
3
10
- 479636
+ 479631
10
12308
- 111921
+ 111920
@@ -23440,42 +23448,42 @@
1
2
- 934142
+ 934133
2
3
- 866074
+ 866066
3
4
- 480847
+ 480842
4
5
- 296428
+ 296425
5
6
- 198859
+ 198857
6
8
- 247466
+ 247464
8
15
- 263619
+ 263617
15
6823
- 99193
+ 99192
@@ -23491,12 +23499,12 @@
1
2
- 3183076
+ 3183047
2
3
- 203554
+ 203552
@@ -23512,42 +23520,42 @@
1
2
- 934142
+ 934133
2
3
- 866103
+ 866095
3
4
- 480817
+ 480813
4
5
- 296428
+ 296425
5
6
- 198859
+ 198857
6
8
- 247466
+ 247464
8
15
- 263619
+ 263617
15
6823
- 99193
+ 99192
@@ -23563,32 +23571,32 @@
1
2
- 1290399
+ 1290387
2
3
- 940550
+ 940541
3
4
- 442309
+ 442305
4
5
- 234473
+ 234470
5
8
- 310957
+ 310954
8
524
- 167940
+ 167939
@@ -23604,42 +23612,42 @@
1
2
- 934142
+ 934133
2
3
- 866074
+ 866066
3
4
- 480847
+ 480842
4
5
- 296428
+ 296425
5
6
- 198859
+ 198857
6
8
- 247466
+ 247464
8
15
- 263619
+ 263617
15
6823
- 99193
+ 99192
@@ -23655,22 +23663,22 @@
1
2
- 2017945
+ 2017927
2
3
- 365766
+ 365762
3
5
- 273335
+ 273332
5
14
- 225436
+ 225434
14
@@ -23691,12 +23699,12 @@
1
2
- 2881953
+ 2881926
2
3
- 86170
+ 86169
@@ -23712,22 +23720,22 @@
1
2
- 2161080
+ 2161060
2
3
- 352477
+ 352474
3
5
- 233675
+ 233673
5
33041
- 220889
+ 220887
@@ -23743,22 +23751,22 @@
1
2
- 2240193
+ 2240172
2
3
- 357172
+ 357169
3
6
- 229600
+ 229598
6
19141
- 141156
+ 141155
@@ -23774,27 +23782,27 @@
1
2
- 2022907
+ 2022888
2
3
- 368453
+ 368450
3
5
- 271356
+ 271354
5
15
- 228626
+ 228623
15
56593
- 76779
+ 76778
@@ -23810,12 +23818,12 @@
1
2
- 14401378
+ 14401244
2
1016
- 84132
+ 84131
@@ -23831,7 +23839,7 @@
1
2
- 14485511
+ 14485376
@@ -23847,7 +23855,7 @@
1
2
- 14485511
+ 14485376
@@ -23863,12 +23871,12 @@
1
2
- 14401378
+ 14401244
2
1016
- 84132
+ 84131
@@ -23884,7 +23892,7 @@
1
2
- 14459317
+ 14459182
2
@@ -23899,11 +23907,11 @@
field_location
- 14965266
+ 14965126
id
- 14877383
+ 14877243
loc
@@ -23921,12 +23929,12 @@
1
2
- 14824434
+ 14824296
2
22
- 52948
+ 52947
@@ -24017,11 +24025,11 @@
localvars
- 499216
+ 499212
id
- 499216
+ 499212
kind
@@ -24029,7 +24037,7 @@
name
- 91306
+ 91305
implicitly_typed
@@ -24041,7 +24049,7 @@
parent_id
- 499216
+ 499212
@@ -24055,7 +24063,7 @@
1
2
- 499216
+ 499212
@@ -24071,7 +24079,7 @@
1
2
- 499216
+ 499212
@@ -24087,7 +24095,7 @@
1
2
- 499216
+ 499212
@@ -24103,7 +24111,7 @@
1
2
- 499216
+ 499212
@@ -24119,7 +24127,7 @@
1
2
- 499216
+ 499212
@@ -24240,7 +24248,7 @@
1
2
- 57798
+ 57797
2
@@ -24276,7 +24284,7 @@
1
2
- 91122
+ 91121
2
@@ -24318,7 +24326,7 @@
1
2
- 78906
+ 78905
2
@@ -24344,7 +24352,7 @@
1
2
- 57798
+ 57797
2
@@ -24593,7 +24601,7 @@
1
2
- 18824
+ 18823
2
@@ -24660,7 +24668,7 @@
1
2
- 499216
+ 499212
@@ -24676,7 +24684,7 @@
1
2
- 499216
+ 499212
@@ -24692,7 +24700,7 @@
1
2
- 499216
+ 499212
@@ -24708,7 +24716,7 @@
1
2
- 499216
+ 499212
@@ -24724,7 +24732,7 @@
1
2
- 499216
+ 499212
@@ -24734,15 +24742,15 @@
localvar_location
- 499216
+ 499212
id
- 499216
+ 499212
loc
- 499216
+ 499212
@@ -24756,7 +24764,7 @@
1
2
- 499216
+ 499212
@@ -24772,7 +24780,7 @@
1
2
- 499216
+ 499212
@@ -24782,19 +24790,19 @@
params
- 37386455
+ 37386105
id
- 37386455
+ 37386105
name
- 2196576
+ 2196556
type_id
- 2827941
+ 2827915
index
@@ -24806,11 +24814,11 @@
parent_id
- 20722350
+ 20722157
unbound_id
- 30114153
+ 30113872
@@ -24824,7 +24832,7 @@
1
2
- 37386455
+ 37386105
@@ -24840,7 +24848,7 @@
1
2
- 37386455
+ 37386105
@@ -24856,7 +24864,7 @@
1
2
- 37386455
+ 37386105
@@ -24872,7 +24880,7 @@
1
2
- 37386455
+ 37386105
@@ -24888,7 +24896,7 @@
1
2
- 37386455
+ 37386105
@@ -24904,7 +24912,7 @@
1
2
- 37386455
+ 37386105
@@ -24920,37 +24928,37 @@
1
2
- 981598
+ 981588
2
3
- 381535
+ 381532
3
4
- 185481
+ 185480
4
6
- 196585
+ 196583
6
10
- 173876
+ 173874
10
25
- 165666
+ 165665
25
74292
- 111832
+ 111831
@@ -24966,22 +24974,22 @@
1
2
- 1784417
+ 1784401
2
3
- 214156
+ 214154
3
13
- 166995
+ 166994
13
13366
- 31007
+ 31006
@@ -24997,22 +25005,22 @@
1
2
- 1518996
+ 1518982
2
3
- 374596
+ 374592
3
4
- 146294
+ 146293
4
21
- 156689
+ 156688
@@ -25028,12 +25036,12 @@
1
2
- 2031234
+ 2031215
2
6
- 164928
+ 164927
6
@@ -25054,37 +25062,37 @@
1
2
- 981598
+ 981588
2
3
- 381535
+ 381532
3
4
- 185481
+ 185480
4
6
- 196585
+ 196583
6
10
- 173876
+ 173874
10
25
- 165666
+ 165665
25
74292
- 111832
+ 111831
@@ -25100,37 +25108,37 @@
1
2
- 1002151
+ 1002142
2
3
- 388504
+ 388501
3
4
- 199951
+ 199950
4
6
- 201103
+ 201101
6
10
- 166050
+ 166049
10
35
- 166670
+ 166669
35
63585
- 72143
+ 72142
@@ -25146,37 +25154,37 @@
1
2
- 1386197
+ 1386184
2
3
- 410623
+ 410619
3
4
- 235861
+ 235858
4
5
- 175736
+ 175735
5
8
- 215278
+ 215276
8
19
- 219383
+ 219380
19
90397
- 184861
+ 184860
@@ -25192,22 +25200,22 @@
1
2
- 1901536
+ 1901518
2
3
- 477539
+ 477535
3
4
- 203436
+ 203434
4
13
- 212650
+ 212648
13
@@ -25228,22 +25236,22 @@
1
2
- 2062921
+ 2062901
2
3
- 482589
+ 482585
3
6
- 239670
+ 239668
6
54
- 42760
+ 42759
@@ -25259,12 +25267,12 @@
1
2
- 2663278
+ 2663253
2
6
- 164662
+ 164661
@@ -25280,37 +25288,37 @@
1
2
- 1428366
+ 1428353
2
3
- 383720
+ 383717
3
4
- 237012
+ 237010
4
5
- 173403
+ 173402
5
9
- 247850
+ 247848
9
24
- 214362
+ 214360
24
74138
- 143223
+ 143222
@@ -25326,37 +25334,37 @@
1
2
- 1394672
+ 1394659
2
3
- 412158
+ 412155
3
4
- 252280
+ 252277
4
5
- 174703
+ 174701
5
8
- 225377
+ 225375
8
19
- 214185
+ 214183
19
84336
- 154563
+ 154561
@@ -25964,27 +25972,27 @@
1
2
- 11717399
+ 11717289
2
3
- 5233890
+ 5233841
3
4
- 2032032
+ 2032013
4
8
- 1570586
+ 1570571
8
56
- 168442
+ 168441
@@ -26000,27 +26008,27 @@
1
2
- 11717369
+ 11717259
2
3
- 5233890
+ 5233841
3
4
- 2032032
+ 2032013
4
8
- 1570616
+ 1570601
8
56
- 168442
+ 168441
@@ -26036,22 +26044,22 @@
1
2
- 12389722
+ 12389607
2
3
- 5150023
+ 5149975
3
4
- 1884349
+ 1884331
4
43
- 1298255
+ 1298242
@@ -26067,27 +26075,27 @@
1
2
- 11717399
+ 11717289
2
3
- 5233890
+ 5233841
3
4
- 2032032
+ 2032013
4
8
- 1570586
+ 1570571
8
56
- 168442
+ 168441
@@ -26103,12 +26111,12 @@
1
2
- 19796358
+ 19796173
2
5
- 925991
+ 925983
@@ -26124,27 +26132,27 @@
1
2
- 11717399
+ 11717289
2
3
- 5233890
+ 5233841
3
4
- 2032032
+ 2032013
4
8
- 1570586
+ 1570571
8
56
- 168442
+ 168441
@@ -26160,12 +26168,12 @@
1
2
- 29105919
+ 29105646
2
17584
- 1008234
+ 1008225
@@ -26181,7 +26189,7 @@
1
2
- 30114065
+ 30113783
2
@@ -26202,12 +26210,12 @@
1
2
- 29808925
+ 29808646
2
9835
- 305228
+ 305225
@@ -26223,7 +26231,7 @@
1
2
- 30114153
+ 30113872
@@ -26239,7 +26247,7 @@
1
2
- 30114153
+ 30113872
@@ -26255,12 +26263,12 @@
1
2
- 29105919
+ 29105646
2
17584
- 1008234
+ 1008225
@@ -26270,11 +26278,11 @@
param_location
- 37558973
+ 37558621
id
- 37386071
+ 37385721
loc
@@ -26292,12 +26300,12 @@
1
2
- 37269041
+ 37268692
2
70
- 117029
+ 117028
@@ -26383,11 +26391,11 @@
statements
- 2457863
+ 2457840
id
- 2457863
+ 2457840
kind
@@ -26405,7 +26413,7 @@
1
2
- 2457863
+ 2457840
@@ -26501,11 +26509,11 @@
stmt_parent
- 2097112
+ 2097092
stmt
- 2097112
+ 2097092
index
@@ -26513,7 +26521,7 @@
parent
- 1004054
+ 1004045
@@ -26527,7 +26535,7 @@
1
2
- 2097112
+ 2097092
@@ -26543,7 +26551,7 @@
1
2
- 2097112
+ 2097092
@@ -26671,27 +26679,27 @@
1
2
- 647155
+ 647149
2
3
- 190657
+ 190656
3
4
- 62747
+ 62746
4
9
- 80168
+ 80167
9
3407
- 23326
+ 23325
@@ -26707,27 +26715,27 @@
1
2
- 647155
+ 647149
2
3
- 190657
+ 190656
3
4
- 62747
+ 62746
4
9
- 80168
+ 80167
9
3407
- 23326
+ 23325
@@ -26737,11 +26745,11 @@
stmt_parent_top_level
- 360750
+ 360747
stmt
- 360750
+ 360747
index
@@ -26749,7 +26757,7 @@
parent
- 340705
+ 340702
@@ -26763,7 +26771,7 @@
1
2
- 360750
+ 360747
@@ -26779,7 +26787,7 @@
1
2
- 360750
+ 360747
@@ -26827,12 +26835,12 @@
1
2
- 322204
+ 322201
2
5
- 18501
+ 18500
@@ -26848,7 +26856,7 @@
1
2
- 340705
+ 340702
@@ -26858,15 +26866,15 @@
stmt_location
- 2457857
+ 2457834
id
- 2457857
+ 2457834
loc
- 2376792
+ 2376770
@@ -26880,7 +26888,7 @@
1
2
- 2457857
+ 2457834
@@ -26896,7 +26904,7 @@
1
2
- 2300098
+ 2300076
2
@@ -27130,7 +27138,7 @@
foreach_stmt_desugar
- 133866
+ 133865
id
@@ -27311,11 +27319,11 @@
expressions
- 9729220
+ 9729129
id
- 9729220
+ 9729129
kind
@@ -27337,7 +27345,7 @@
1
2
- 9729220
+ 9729129
@@ -27353,7 +27361,7 @@
1
2
- 9729220
+ 9729129
@@ -27562,7 +27570,7 @@
1
2
- 33100
+ 33099
2
@@ -27602,19 +27610,19 @@
expr_parent
- 9420716
+ 9420628
expr
- 9420716
+ 9420628
index
- 32816
+ 32815
parent
- 6308266
+ 6308207
@@ -27628,7 +27636,7 @@
1
2
- 9420716
+ 9420628
@@ -27644,7 +27652,7 @@
1
2
- 9420716
+ 9420628
@@ -27665,7 +27673,7 @@
4
5
- 17079
+ 17078
5
@@ -27711,7 +27719,7 @@
4
5
- 17079
+ 17078
5
@@ -27752,17 +27760,17 @@
1
2
- 4096813
+ 4096774
2
3
- 1896471
+ 1896453
3
22534
- 314982
+ 314979
@@ -27778,17 +27786,17 @@
1
2
- 4096813
+ 4096774
2
3
- 1896471
+ 1896453
3
22534
- 314982
+ 314979
@@ -27798,11 +27806,11 @@
expr_parent_top_level
- 5483306
+ 5483254
expr
- 5483306
+ 5483254
index
@@ -27810,7 +27818,7 @@
parent
- 3999864
+ 3999827
@@ -27824,7 +27832,7 @@
1
2
- 5483306
+ 5483254
@@ -27840,7 +27848,7 @@
1
2
- 5483306
+ 5483254
@@ -27998,17 +28006,17 @@
1
2
- 3335573
+ 3335541
2
3
- 383809
+ 383805
3
14
- 280481
+ 280479
@@ -28024,17 +28032,17 @@
1
2
- 3339559
+ 3339528
2
3
- 380649
+ 380646
3
12
- 279655
+ 279652
@@ -28141,26 +28149,26 @@
expr_compiler_generated
- 9719652
+ 9719561
id
- 9719652
+ 9719561
expr_value
- 6749402
+ 6749339
id
- 6749402
+ 6749339
value
- 838197
+ 838189
@@ -28174,7 +28182,7 @@
1
2
- 6749402
+ 6749339
@@ -28190,17 +28198,17 @@
1
2
- 578711
+ 578706
2
3
- 137760
+ 137759
3
4
- 66857
+ 66856
4
@@ -28215,15 +28223,15 @@
expr_call
- 1585560
+ 1585545
caller_id
- 1585560
+ 1585545
target_id
- 207402
+ 207400
@@ -28237,7 +28245,7 @@
1
2
- 1585560
+ 1585545
@@ -28253,17 +28261,17 @@
1
2
- 110904
+ 110903
2
3
- 41217
+ 41218
3
4
- 15565
+ 15563
4
@@ -28288,15 +28296,15 @@
expr_access
- 3615705
+ 3615672
accesser_id
- 3615705
+ 3615672
target_id
- 874845
+ 874837
@@ -28310,7 +28318,7 @@
1
2
- 3615705
+ 3615672
@@ -28326,32 +28334,32 @@
1
2
- 292104
+ 292101
2
3
- 190758
+ 190756
3
4
- 134524
+ 134523
4
5
- 82548
+ 82547
5
7
- 80286
+ 80285
7
15
- 68016
+ 68015
15
@@ -28366,15 +28374,15 @@
expr_location
- 9729220
+ 9729129
id
- 9729220
+ 9729129
loc
- 7546334
+ 7546264
@@ -28388,7 +28396,7 @@
1
2
- 9729220
+ 9729129
@@ -28404,17 +28412,17 @@
1
2
- 6528710
+ 6528648
2
3
- 981628
+ 981619
3
9211
- 35996
+ 35995
@@ -28576,11 +28584,11 @@
expr_argument_name
- 731798
+ 731791
id
- 731798
+ 731791
name
@@ -28598,7 +28606,7 @@
1
2
- 731798
+ 731791
@@ -29248,11 +29256,11 @@
xmlElements
- 60596893
+ 60596686
id
- 60596893
+ 60596686
name
@@ -29260,7 +29268,7 @@
parentid
- 24508816
+ 24508733
idx
@@ -29282,7 +29290,7 @@
1
2
- 60596893
+ 60596686
@@ -29298,7 +29306,7 @@
1
2
- 60596893
+ 60596686
@@ -29314,7 +29322,7 @@
1
2
- 60596893
+ 60596686
@@ -29330,7 +29338,7 @@
1
2
- 60596893
+ 60596686
@@ -29520,27 +29528,27 @@
1
2
- 14236583
+ 14236534
2
3
- 4770003
+ 4769987
3
4
- 2178795
+ 2178787
4
6
- 2111342
+ 2111335
6
17196
- 1212092
+ 1212088
@@ -29556,22 +29564,22 @@
1
2
- 16928804
+ 16928747
2
3
- 4145902
+ 4145888
3
4
- 2094945
+ 2094938
4
125
- 1339163
+ 1339158
@@ -29587,27 +29595,27 @@
1
2
- 14236583
+ 14236534
2
3
- 4770003
+ 4769987
3
4
- 2178795
+ 2178787
4
6
- 2111342
+ 2111335
6
17196
- 1212092
+ 1212088
@@ -29623,7 +29631,7 @@
1
2
- 24508816
+ 24508733
@@ -30211,15 +30219,15 @@
xmlAttrs
- 41517960
+ 41517819
id
- 41517960
+ 41517819
elementid
- 41169454
+ 41169314
name
@@ -30227,7 +30235,7 @@
value
- 884047
+ 884044
idx
@@ -30249,7 +30257,7 @@
1
2
- 41517960
+ 41517819
@@ -30265,7 +30273,7 @@
1
2
- 41517960
+ 41517819
@@ -30281,7 +30289,7 @@
1
2
- 41517960
+ 41517819
@@ -30297,7 +30305,7 @@
1
2
- 41517960
+ 41517819
@@ -30313,7 +30321,7 @@
1
2
- 41517960
+ 41517819
@@ -30329,7 +30337,7 @@
1
2
- 40983430
+ 40983290
2
@@ -30350,7 +30358,7 @@
1
2
- 40983430
+ 40983290
2
@@ -30371,12 +30379,12 @@
1
2
- 40983630
+ 40983491
2
13
- 185823
+ 185822
@@ -30392,7 +30400,7 @@
1
2
- 40983430
+ 40983290
2
@@ -30413,7 +30421,7 @@
1
2
- 41169454
+ 41169314
@@ -30714,7 +30722,7 @@
2
3
- 308689
+ 308688
3
@@ -30739,12 +30747,12 @@
8
13
- 75195
+ 75194
13
29
- 70437
+ 70436
29
@@ -30775,7 +30783,7 @@
2
3
- 308696
+ 308695
3
@@ -30785,12 +30793,12 @@
4
5
- 76925
+ 76924
5
6
- 38840
+ 38839
6
@@ -30815,7 +30823,7 @@
150
471089
- 33754
+ 33753
@@ -30831,7 +30839,7 @@
1
2
- 781511
+ 781509
2
@@ -30857,7 +30865,7 @@
1
2
- 882313
+ 882310
2
@@ -30883,7 +30891,7 @@
2
3
- 365376
+ 365375
3
@@ -30913,7 +30921,7 @@
28
159
- 69846
+ 69845
159
@@ -31461,7 +31469,7 @@
2
3
- 20057
+ 20056
3
@@ -31481,7 +31489,7 @@
6
71
- 3414
+ 3413
@@ -31994,11 +32002,11 @@
xmlHasNs
- 501577
+ 501573
elementId
- 501577
+ 501573
nsId
@@ -32020,7 +32028,7 @@
1
2
- 501577
+ 501573
@@ -32036,7 +32044,7 @@
1
2
- 501577
+ 501573
@@ -32516,19 +32524,19 @@
xmlChars
- 45379511
+ 45379357
id
- 45379511
+ 45379357
text
- 1700662
+ 1700656
parentid
- 28480349
+ 28480252
idx
@@ -32554,7 +32562,7 @@
1
2
- 45379511
+ 45379357
@@ -32570,7 +32578,7 @@
1
2
- 45379511
+ 45379357
@@ -32586,7 +32594,7 @@
1
2
- 45379511
+ 45379357
@@ -32602,7 +32610,7 @@
1
2
- 45379511
+ 45379357
@@ -32618,7 +32626,7 @@
1
2
- 45379511
+ 45379357
@@ -32639,7 +32647,7 @@
2
3
- 421882
+ 421881
3
@@ -32659,12 +32667,12 @@
6
8
- 141441
+ 141440
8
9
- 87852
+ 87851
9
@@ -32674,7 +32682,7 @@
12
15
- 83186
+ 83185
15
@@ -32705,12 +32713,12 @@
1
2
- 165834
+ 165833
2
3
- 421942
+ 421941
3
@@ -32720,7 +32728,7 @@
4
5
- 175866
+ 175865
5
@@ -32740,7 +32748,7 @@
9
12
- 148677
+ 148676
12
@@ -32755,12 +32763,12 @@
19
54
- 127684
+ 127683
54
918936
- 93732
+ 93731
@@ -32776,12 +32784,12 @@
1
2
- 1668609
+ 1668603
2
33
- 32053
+ 32052
@@ -32797,7 +32805,7 @@
1
2
- 1700660
+ 1700654
2
@@ -32823,12 +32831,12 @@
2
3
- 498940
+ 498938
3
4
- 94931
+ 94930
4
@@ -32843,12 +32851,12 @@
6
8
- 145526
+ 145525
8
10
- 153688
+ 153687
10
@@ -32863,7 +32871,7 @@
17
14127
- 118981
+ 118980
@@ -32879,22 +32887,22 @@
1
2
- 17038280
+ 17038222
2
3
- 8292992
+ 8292964
3
4
- 2084035
+ 2084028
4
61
- 1065041
+ 1065037
@@ -32910,22 +32918,22 @@
1
2
- 17040164
+ 17040106
2
3
- 8301726
+ 8301698
3
4
- 2100188
+ 2100181
4
47
- 1038269
+ 1038266
@@ -32941,22 +32949,22 @@
1
2
- 17038280
+ 17038222
2
3
- 8292992
+ 8292964
3
4
- 2084035
+ 2084028
4
61
- 1065041
+ 1065037
@@ -32972,7 +32980,7 @@
1
2
- 28479968
+ 28479871
2
@@ -32993,7 +33001,7 @@
1
2
- 28480349
+ 28480252
@@ -33688,15 +33696,15 @@
xmllocations
- 147551916
+ 147551414
xmlElement
- 147546832
+ 147546330
location
- 128989681
+ 128989242
@@ -33710,7 +33718,7 @@
1
2
- 147546786
+ 147546284
2
@@ -33731,17 +33739,17 @@
1
2
- 110766476
+ 110766100
2
3
- 18041929
+ 18041868
3
15
- 181275
+ 181274
@@ -33751,11 +33759,11 @@
commentline
- 1542316
+ 1542302
id
- 1542316
+ 1542302
kind
@@ -33763,11 +33771,11 @@
text
- 576331
+ 576326
rawtext
- 581672
+ 581666
@@ -33781,7 +33789,7 @@
1
2
- 1542316
+ 1542302
@@ -33797,7 +33805,7 @@
1
2
- 1542316
+ 1542302
@@ -33813,7 +33821,7 @@
1
2
- 1542316
+ 1542302
@@ -33907,7 +33915,7 @@
1
2
- 482114
+ 482110
2
@@ -33917,7 +33925,7 @@
3
21079
- 40791
+ 40790
@@ -33933,7 +33941,7 @@
1
2
- 574463
+ 574458
2
@@ -33954,12 +33962,12 @@
1
2
- 572802
+ 572797
2
40
- 3529
+ 3528
@@ -33975,12 +33983,12 @@
1
2
- 487842
+ 487837
2
3
- 52897
+ 52896
3
@@ -34001,7 +34009,7 @@
1
2
- 581672
+ 581666
@@ -34017,7 +34025,7 @@
1
2
- 581672
+ 581666
@@ -34027,15 +34035,15 @@
commentline_location
- 1542316
+ 1542302
id
- 1542316
+ 1542302
loc
- 1542316
+ 1542302
@@ -34049,7 +34057,7 @@
1
2
- 1542316
+ 1542302
@@ -34065,7 +34073,7 @@
1
2
- 1542316
+ 1542302
@@ -34075,26 +34083,26 @@
commentblock
- 374970
+ 374967
id
- 374970
+ 374967
commentblock_location
- 374970
+ 374967
id
- 374970
+ 374967
loc
- 374970
+ 374967
@@ -34108,7 +34116,7 @@
1
2
- 374970
+ 374967
@@ -34124,7 +34132,7 @@
1
2
- 374970
+ 374967
@@ -34134,15 +34142,15 @@
commentblock_binding
- 1356034
+ 1356021
id
- 374970
+ 374967
entity
- 587088
+ 587083
bindtype
@@ -34165,12 +34173,12 @@
2
3
- 86989
+ 86988
3
4
- 264873
+ 264871
@@ -34186,17 +34194,17 @@
1
3
- 23382
+ 23381
3
4
- 86715
+ 86714
4
5
- 264873
+ 264871
@@ -34212,17 +34220,17 @@
1
2
- 415337
+ 415333
2
3
- 139839
+ 139837
3
524
- 31912
+ 31911
@@ -34238,17 +34246,17 @@
1
2
- 222402
+ 222400
2
3
- 230404
+ 230402
3
4
- 124694
+ 124693
4
@@ -34325,15 +34333,15 @@
commentblock_child
- 1901595
+ 1901577
id
- 374970
+ 374967
commentline
- 1541684
+ 1541669
index
@@ -34351,17 +34359,17 @@
1
2
- 116560
+ 116559
2
3
- 36356
+ 36355
3
4
- 86073
+ 86072
4
@@ -34371,12 +34379,12 @@
5
6
- 48132
+ 48131
6
10
- 32865
+ 32864
10
@@ -34402,7 +34410,7 @@
2
3
- 114183
+ 114182
3
@@ -34448,7 +34456,7 @@
1
2
- 1541684
+ 1541669
@@ -34464,12 +34472,12 @@
1
2
- 1181773
+ 1181761
2
3
- 359911
+ 359907
@@ -34581,11 +34589,11 @@
asp_elements
- 148402
+ 148401
id
- 148402
+ 148401
kind
@@ -34593,7 +34601,7 @@
loc
- 148402
+ 148401
@@ -34607,7 +34615,7 @@
1
2
- 148402
+ 148401
@@ -34623,7 +34631,7 @@
1
2
- 148402
+ 148401
@@ -34751,7 +34759,7 @@
1
2
- 148402
+ 148401
@@ -34767,7 +34775,7 @@
1
2
- 148402
+ 148401
@@ -35368,11 +35376,11 @@
asp_element_body
- 118618
+ 118617
element
- 118618
+ 118617
body
@@ -35390,7 +35398,7 @@
1
2
- 118618
+ 118617
@@ -36216,11 +36224,11 @@
cil_instruction
- 504260704
+ 504255988
id
- 504260704
+ 504255988
opcode
@@ -36228,11 +36236,11 @@
index
- 1697213
+ 1697197
impl
- 23978900
+ 23978675
@@ -36246,7 +36254,7 @@
1
2
- 504260704
+ 504255988
@@ -36262,7 +36270,7 @@
1
2
- 504260704
+ 504255988
@@ -36278,7 +36286,7 @@
1
2
- 504260704
+ 504255988
@@ -36522,47 +36530,47 @@
1
2
- 352005
+ 352001
2
3
- 5788
+ 5787
3
4
- 466938
+ 466933
4
5
- 116203
+ 116201
5
6
- 205090
+ 205088
6
15
- 83276
+ 83275
15
16
- 145172
+ 145171
16
20
- 144670
+ 144669
20
126
- 127395
+ 127393
126
@@ -36583,42 +36591,42 @@
1
2
- 713164
+ 713158
2
3
- 246078
+ 246076
3
4
- 152584
+ 152583
4
7
- 101880
+ 101879
7
9
- 152496
+ 152494
9
11
- 130052
+ 130051
11
29
- 129462
+ 129461
29
177
- 71493
+ 71492
@@ -36634,47 +36642,47 @@
1
2
- 352005
+ 352001
2
3
- 5788
+ 5787
3
4
- 466938
+ 466933
4
5
- 116203
+ 116201
5
6
- 205090
+ 205088
6
15
- 83276
+ 83275
15
16
- 145172
+ 145171
16
20
- 144670
+ 144669
20
126
- 127395
+ 127393
126
@@ -36695,57 +36703,57 @@
1
3
- 1768175
+ 1768159
3
4
- 5292243
+ 5292193
4
5
- 2487040
+ 2487016
5
6
- 1620227
+ 1620212
6
8
- 1895748
+ 1895730
8
11
- 1892411
+ 1892393
11
16
- 1968659
+ 1968640
16
23
- 1813062
+ 1813045
23
35
- 1856944
+ 1856927
35
67
- 1825790
+ 1825773
67
57474
- 1558597
+ 1558582
@@ -36761,52 +36769,52 @@
1
3
- 1771808
+ 1771791
3
4
- 5485048
+ 5484997
4
5
- 2836594
+ 2836567
5
6
- 2484441
+ 2484418
6
7
- 1600973
+ 1600958
7
9
- 2124669
+ 2124649
9
12
- 2168581
+ 2168561
12
16
- 2034335
+ 2034316
16
24
- 1878207
+ 1878189
24
77
- 1594240
+ 1594225
@@ -36822,57 +36830,57 @@
1
3
- 1768175
+ 1768159
3
4
- 5292243
+ 5292193
4
5
- 2487040
+ 2487016
5
6
- 1620227
+ 1620212
6
8
- 1895748
+ 1895730
8
11
- 1892411
+ 1892393
11
16
- 1968659
+ 1968640
16
23
- 1813062
+ 1813045
23
35
- 1856944
+ 1856927
35
67
- 1825790
+ 1825773
67
57474
- 1558597
+ 1558582
@@ -36882,15 +36890,15 @@
cil_jump
- 38654205
+ 38653843
instruction
- 38654205
+ 38653843
target
- 29345826
+ 29345551
@@ -36904,7 +36912,7 @@
1
2
- 38654205
+ 38653843
@@ -36920,17 +36928,17 @@
1
2
- 24482485
+ 24482256
2
3
- 3200027
+ 3199997
3
473
- 1663312
+ 1663297
@@ -36940,15 +36948,15 @@
cil_access
- 205357557
+ 205355636
instruction
- 205357557
+ 205355636
target
- 48924367
+ 48923909
@@ -36962,7 +36970,7 @@
1
2
- 205357557
+ 205355636
@@ -36978,32 +36986,32 @@
1
2
- 20166732
+ 20166543
2
3
- 12282703
+ 12282589
3
4
- 5954349
+ 5954293
4
5
- 3067877
+ 3067849
5
8
- 4125074
+ 4125035
8
72956
- 3327629
+ 3327598
@@ -37013,15 +37021,15 @@
cil_value
- 19775953
+ 19775768
instruction
- 19775953
+ 19775768
value
- 4923700
+ 4923654
@@ -37035,7 +37043,7 @@
1
2
- 19775953
+ 19775768
@@ -37051,22 +37059,22 @@
1
2
- 3687282
+ 3687248
2
3
- 676753
+ 676747
3
7
- 372292
+ 372289
7
182148
- 187371
+ 187370
@@ -37076,19 +37084,19 @@
cil_switch
- 4070472
+ 4070434
instruction
- 272685
+ 272683
index
- 141510
+ 141509
target
- 1795403
+ 1795386
@@ -37107,17 +37115,17 @@
3
4
- 75037
+ 75036
4
5
- 45979
+ 45978
5
6
- 32454
+ 32453
6
@@ -37168,12 +37176,12 @@
2
3
- 33340
+ 33339
3
4
- 96919
+ 96918
4
@@ -37219,7 +37227,7 @@
6
7
- 70489
+ 70488
7
@@ -37234,7 +37242,7 @@
15
655
- 10631
+ 10630
688
@@ -37260,7 +37268,7 @@
6
7
- 70489
+ 70488
7
@@ -37275,7 +37283,7 @@
15
645
- 10631
+ 10630
675
@@ -37296,12 +37304,12 @@
1
2
- 1771690
+ 1771673
2
18
- 23713
+ 23712
@@ -37317,12 +37325,12 @@
1
2
- 1596219
+ 1596204
2
6
- 141422
+ 141420
6
@@ -37379,15 +37387,15 @@
cil_type_location
- 4842462
+ 4842416
id
- 4842462
+ 4842416
loc
- 14588
+ 14587
@@ -37401,7 +37409,7 @@
1
2
- 4842462
+ 4842416
@@ -37477,11 +37485,11 @@
cil_method_location
- 29356250
+ 29355975
id
- 29356250
+ 29355975
loc
@@ -37499,7 +37507,7 @@
1
2
- 29356250
+ 29355975
@@ -37590,15 +37598,15 @@
cil_type
- 12399763
+ 12399647
id
- 12399763
+ 12399647
name
- 3497607
+ 3497574
kind
@@ -37606,11 +37614,11 @@
parent
- 2509483
+ 2509459
sourceDecl
- 6934884
+ 6934819
@@ -37624,7 +37632,7 @@
1
2
- 12399763
+ 12399647
@@ -37640,7 +37648,7 @@
1
2
- 12399763
+ 12399647
@@ -37656,7 +37664,7 @@
1
2
- 12399763
+ 12399647
@@ -37672,7 +37680,7 @@
1
2
- 12399763
+ 12399647
@@ -37688,17 +37696,17 @@
1
2
- 3073163
+ 3073135
2
4
- 292855
+ 292852
4
45085
- 131588
+ 131587
@@ -37714,7 +37722,7 @@
1
2
- 3497607
+ 3497574
@@ -37730,12 +37738,12 @@
1
2
- 3232334
+ 3232303
2
48
- 262409
+ 262406
48
@@ -37756,17 +37764,17 @@
1
2
- 3194150
+ 3194121
2
5
- 271947
+ 271945
5
45085
- 31509
+ 31508
@@ -37921,27 +37929,27 @@
1
2
- 1632423
+ 1632408
2
3
- 460795
+ 460791
3
5
- 196792
+ 196790
5
28
- 189025
+ 189023
28
56074
- 30446
+ 30445
@@ -37957,22 +37965,22 @@
1
2
- 1641164
+ 1641149
2
3
- 468149
+ 468144
3
5
- 196821
+ 196819
5
38
- 188671
+ 188669
38
@@ -37993,12 +38001,12 @@
1
2
- 2470739
+ 2470716
2
4
- 38744
+ 38743
@@ -38014,22 +38022,22 @@
1
2
- 1640633
+ 1640617
2
3
- 467971
+ 467967
3
5
- 196821
+ 196819
5
38
- 188700
+ 188698
38
@@ -38050,12 +38058,12 @@
1
2
- 6636063
+ 6636001
2
23276
- 298820
+ 298817
@@ -38071,7 +38079,7 @@
1
2
- 6934884
+ 6934819
@@ -38087,7 +38095,7 @@
1
2
- 6934884
+ 6934819
@@ -38103,12 +38111,12 @@
1
2
- 6836960
+ 6836896
2
1652
- 97923
+ 97922
@@ -38166,15 +38174,15 @@
cil_array_type
- 181790
+ 181788
id
- 181790
+ 181788
element_type
- 181199
+ 181198
rank
@@ -38192,7 +38200,7 @@
1
2
- 181790
+ 181788
@@ -38208,7 +38216,7 @@
1
2
- 181790
+ 181788
@@ -38224,7 +38232,7 @@
1
2
- 180668
+ 180666
2
@@ -38245,7 +38253,7 @@
1
2
- 180668
+ 180666
2
@@ -38385,23 +38393,23 @@
cil_method
- 39373777
+ 39373409
id
- 39373777
+ 39373409
name
- 7889520
+ 7889447
parent
- 7602010
+ 7601939
return_type
- 3365930
+ 3365899
@@ -38415,7 +38423,7 @@
1
2
- 39373777
+ 39373409
@@ -38431,7 +38439,7 @@
1
2
- 39373777
+ 39373409
@@ -38447,7 +38455,7 @@
1
2
- 39373777
+ 39373409
@@ -38463,27 +38471,27 @@
1
2
- 5260940
+ 5260891
2
3
- 1204170
+ 1204159
3
5
- 695180
+ 695174
5
19
- 592856
+ 592851
19
206309
- 136372
+ 136371
@@ -38499,22 +38507,22 @@
1
2
- 5492194
+ 5492143
2
3
- 1123167
+ 1123157
3
5
- 645244
+ 645238
5
48
- 591941
+ 591935
48
@@ -38535,17 +38543,17 @@
1
2
- 7115788
+ 7115722
2
5
- 616717
+ 616711
5
10798
- 157014
+ 157012
@@ -38561,37 +38569,37 @@
1
2
- 2404058
+ 2404036
2
3
- 1743783
+ 1743767
3
4
- 872216
+ 872208
4
5
- 624395
+ 624389
5
7
- 648758
+ 648752
7
11
- 655048
+ 655042
11
39
- 572894
+ 572888
39
@@ -38612,37 +38620,37 @@
1
2
- 2458365
+ 2458342
2
3
- 1772487
+ 1772470
3
4
- 893892
+ 893883
4
5
- 633550
+ 633544
5
7
- 698104
+ 698097
7
11
- 599442
+ 599436
11
3640
- 546168
+ 546163
@@ -38658,32 +38666,32 @@
1
2
- 3242994
+ 3242964
2
3
- 2011094
+ 2011076
3
4
- 858366
+ 858358
4
5
- 456927
+ 456923
5
7
- 614059
+ 614054
7
12757
- 418567
+ 418563
@@ -38699,27 +38707,27 @@
1
2
- 2033124
+ 2033105
2
3
- 586123
+ 586118
3
4
- 222572
+ 222570
4
8
- 285561
+ 285558
8
508819
- 238548
+ 238546
@@ -38735,22 +38743,22 @@
1
2
- 2303713
+ 2303692
2
3
- 542595
+ 542590
3
5
- 273778
+ 273775
5
78481
- 245842
+ 245840
@@ -38766,27 +38774,27 @@
1
2
- 2200592
+ 2200572
2
3
- 562588
+ 562582
3
4
- 209874
+ 209872
4
9
- 261818
+ 261816
9
207300
- 131056
+ 131055
@@ -38796,15 +38804,15 @@
cil_method_source_declaration
- 34929152
+ 34928825
method
- 34929152
+ 34928825
source
- 30419382
+ 30419098
@@ -38818,7 +38826,7 @@
1
2
- 34929152
+ 34928825
@@ -38834,12 +38842,12 @@
1
2
- 28648401
+ 28648133
2
981
- 1770981
+ 1770964
@@ -38849,15 +38857,15 @@
cil_method_implementation
- 27073001
+ 27072747
id
- 27073001
+ 27072747
method
- 27049967
+ 27049714
location
@@ -38875,7 +38883,7 @@
1
2
- 27073001
+ 27072747
@@ -38891,7 +38899,7 @@
1
2
- 27073001
+ 27072747
@@ -38907,12 +38915,12 @@
1
2
- 27047073
+ 27046820
2
27
- 2894
+ 2893
@@ -38928,7 +38936,7 @@
1
2
- 27049967
+ 27049714
@@ -39090,15 +39098,15 @@
cil_implements
- 1403915
+ 1403902
id
- 1403325
+ 1403311
decl
- 259544
+ 259542
@@ -39112,7 +39120,7 @@
1
2
- 1402734
+ 1402721
2
@@ -39133,12 +39141,12 @@
1
2
- 169860
+ 169858
2
3
- 42701
+ 42700
3
@@ -39148,12 +39156,12 @@
4
10
- 19815
+ 19814
10
3161
- 10129
+ 10128
@@ -39163,23 +39171,23 @@
cil_field
- 15899467
+ 15899318
id
- 15899467
+ 15899318
parent
- 3685983
+ 3685949
name
- 6243572
+ 6243513
field_type
- 3062916
+ 3062888
@@ -39193,7 +39201,7 @@
1
2
- 15899467
+ 15899318
@@ -39209,7 +39217,7 @@
1
2
- 15899467
+ 15899318
@@ -39225,7 +39233,7 @@
1
2
- 15899467
+ 15899318
@@ -39241,42 +39249,42 @@
1
2
- 1083833
+ 1083822
2
3
- 913352
+ 913344
3
4
- 486546
+ 486542
4
5
- 328173
+ 328170
5
6
- 220977
+ 220975
6
8
- 262556
+ 262554
8
15
- 285797
+ 285794
15
6824
- 104745
+ 104744
@@ -39292,42 +39300,42 @@
1
2
- 1083833
+ 1083822
2
3
- 913352
+ 913344
3
4
- 486546
+ 486542
4
5
- 328173
+ 328170
5
6
- 220977
+ 220975
6
8
- 262556
+ 262554
8
15
- 285797
+ 285794
15
6824
- 104745
+ 104744
@@ -39343,32 +39351,32 @@
1
2
- 1248614
+ 1248602
2
3
- 1218965
+ 1218953
3
4
- 465934
+ 465929
4
5
- 247702
+ 247700
5
8
- 323921
+ 323918
8
524
- 180845
+ 180843
@@ -39384,22 +39392,22 @@
1
2
- 4788627
+ 4788582
2
3
- 792897
+ 792889
3
8
- 498152
+ 498147
8
13940
- 163894
+ 163893
@@ -39415,22 +39423,22 @@
1
2
- 4788627
+ 4788582
2
3
- 792897
+ 792889
3
8
- 498152
+ 498147
8
13940
- 163894
+ 163893
@@ -39446,17 +39454,17 @@
1
2
- 5453746
+ 5453695
2
3
- 488968
+ 488963
3
12921
- 300858
+ 300855
@@ -39472,27 +39480,27 @@
1
2
- 1844158
+ 1844140
2
3
- 591203
+ 591197
3
4
- 171750
+ 171748
4
7
- 244247
+ 244245
7
58308
- 211557
+ 211555
@@ -39508,22 +39516,22 @@
1
2
- 2063098
+ 2063079
2
3
- 593654
+ 593648
3
6
- 251807
+ 251805
6
22697
- 154356
+ 154355
@@ -39539,22 +39547,22 @@
1
2
- 2244002
+ 2243981
2
3
- 356316
+ 356313
3
5
- 237987
+ 237985
5
33056
- 224609
+ 224607
@@ -39564,15 +39572,15 @@
cil_parameter
- 75119038
+ 75118336
id
- 75119038
+ 75118336
parameterizable
- 37743421
+ 37743068
index
@@ -39580,7 +39588,7 @@
param_type
- 9706924
+ 9706833
@@ -39594,7 +39602,7 @@
1
2
- 75119038
+ 75118336
@@ -39610,7 +39618,7 @@
1
2
- 75119038
+ 75118336
@@ -39626,7 +39634,7 @@
1
2
- 75119038
+ 75118336
@@ -39642,27 +39650,27 @@
1
2
- 16498466
+ 16498312
2
3
- 12068636
+ 12068523
3
4
- 5792078
+ 5792024
4
7
- 2932037
+ 2932009
7
57
- 452202
+ 452198
@@ -39678,27 +39686,27 @@
1
2
- 16498466
+ 16498312
2
3
- 12068636
+ 12068523
3
4
- 5792078
+ 5792024
4
7
- 2932037
+ 2932009
7
57
- 452202
+ 452198
@@ -39714,22 +39722,22 @@
1
2
- 16985988
+ 16985829
2
3
- 12300274
+ 12300159
3
4
- 5685768
+ 5685715
4
43
- 2771390
+ 2771364
@@ -39928,42 +39936,42 @@
1
2
- 2729575
+ 2729549
2
3
- 2863142
+ 2863115
3
4
- 1063663
+ 1063653
4
5
- 653955
+ 653949
5
7
- 740805
+ 740798
7
11
- 735224
+ 735217
11
36
- 733481
+ 733474
36
108909
- 187076
+ 187074
@@ -39979,42 +39987,42 @@
1
2
- 2768466
+ 2768441
2
3
- 2861370
+ 2861343
3
4
- 1055365
+ 1055355
4
5
- 645096
+ 645090
5
7
- 739919
+ 739912
7
11
- 731916
+ 731909
11
37
- 728668
+ 728661
37
89965
- 176120
+ 176119
@@ -40030,17 +40038,17 @@
1
2
- 6826329
+ 6826265
2
3
- 2083267
+ 2083248
3
6
- 729111
+ 729104
6
@@ -40055,37 +40063,37 @@
cil_parameter_in
- 358354
+ 358350
id
- 358354
+ 358350
cil_parameter_out
- 683899
+ 683893
id
- 683899
+ 683893
cil_setter
- 1074353
+ 1074343
prop
- 1074353
+ 1074343
method
- 1074353
+ 1074343
@@ -40099,7 +40107,7 @@
1
2
- 1074353
+ 1074343
@@ -40115,7 +40123,7 @@
1
2
- 1074353
+ 1074343
@@ -40125,11 +40133,11 @@
cil_custom_modifiers
- 217995
+ 217993
id
- 197796
+ 197794
modifier
@@ -40151,7 +40159,7 @@
1
2
- 177744
+ 177743
2
@@ -40172,12 +40180,12 @@
1
2
- 196349
+ 196347
2
3
- 1447
+ 1446
@@ -40341,11 +40349,11 @@
cil_type_annotation
- 1751904
+ 1751888
id
- 1751904
+ 1751888
annotation
@@ -40363,7 +40371,7 @@
1
2
- 1751904
+ 1751888
@@ -40389,15 +40397,15 @@
cil_getter
- 5994363
+ 5994307
prop
- 5994363
+ 5994307
method
- 5994363
+ 5994307
@@ -40411,7 +40419,7 @@
1
2
- 5994363
+ 5994307
@@ -40427,7 +40435,7 @@
1
2
- 5994363
+ 5994307
@@ -40437,15 +40445,15 @@
cil_adder
- 70696
+ 70695
event
- 70696
+ 70695
method
- 70873
+ 70872
@@ -40459,7 +40467,7 @@
1
2
- 70696
+ 70695
@@ -40475,7 +40483,7 @@
1
2
- 70873
+ 70872
@@ -40485,15 +40493,15 @@
cil_remover
- 70696
+ 70695
event
- 70696
+ 70695
method
- 70873
+ 70872
@@ -40507,7 +40515,7 @@
1
2
- 70696
+ 70695
@@ -40523,7 +40531,7 @@
1
2
- 70873
+ 70872
@@ -40581,23 +40589,23 @@
cil_property
- 6002749
+ 6002693
id
- 6002749
+ 6002693
parent
- 1591435
+ 1591420
name
- 1540967
+ 1540952
property_type
- 706667
+ 706661
@@ -40611,7 +40619,7 @@
1
2
- 6002749
+ 6002693
@@ -40627,7 +40635,7 @@
1
2
- 6002749
+ 6002693
@@ -40643,7 +40651,7 @@
1
2
- 6002749
+ 6002693
@@ -40659,32 +40667,32 @@
1
2
- 521629
+ 521624
2
3
- 392402
+ 392399
3
4
- 215484
+ 215482
4
5
- 137258
+ 137257
5
7
- 139502
+ 139501
7
13
- 124442
+ 124440
13
@@ -40705,37 +40713,37 @@
1
2
- 624838
+ 624832
2
3
- 291408
+ 291405
3
4
- 215544
+ 215542
4
5
- 136520
+ 136518
5
7
- 139738
+ 139737
7
13
- 124087
+ 124086
13
2090
- 59297
+ 59296
@@ -40751,27 +40759,27 @@
1
2
- 615625
+ 615619
2
3
- 481851
+ 481846
3
4
- 202137
+ 202135
4
5
- 101053
+ 101052
5
8
- 125268
+ 125267
8
@@ -40792,27 +40800,27 @@
1
2
- 979206
+ 979196
2
3
- 254760
+ 254758
3
4
- 95118
+ 95117
4
8
- 120248
+ 120247
8
7161
- 91633
+ 91632
@@ -40828,27 +40836,27 @@
1
2
- 979206
+ 979196
2
3
- 255203
+ 255201
3
4
- 95177
+ 95176
4
8
- 120219
+ 120218
8
3695
- 91161
+ 91160
@@ -40864,17 +40872,17 @@
1
2
- 1346862
+ 1346849
2
3
- 113161
+ 113160
3
1330
- 80943
+ 80942
@@ -40890,17 +40898,17 @@
1
2
- 410209
+ 410206
2
3
- 125239
+ 125238
3
4
- 46038
+ 46037
4
@@ -40910,7 +40918,7 @@
7
34
- 53096
+ 53095
34
@@ -40931,12 +40939,12 @@
1
2
- 430172
+ 430168
2
3
- 118831
+ 118830
3
@@ -40951,12 +40959,12 @@
7
64
- 53007
+ 53006
64
17546
- 4843
+ 4842
@@ -40972,12 +40980,12 @@
1
2
- 559812
+ 559806
2
3
- 81534
+ 81533
3
@@ -40997,15 +41005,15 @@
cil_event
- 70696
+ 70695
id
- 70696
+ 70695
parent
- 30062
+ 30061
name
@@ -41013,7 +41021,7 @@
event_type
- 21380
+ 21379
@@ -41027,7 +41035,7 @@
1
2
- 70696
+ 70695
@@ -41043,7 +41051,7 @@
1
2
- 70696
+ 70695
@@ -41059,7 +41067,7 @@
1
2
- 70696
+ 70695
@@ -41075,7 +41083,7 @@
1
2
- 16478
+ 16477
2
@@ -41116,7 +41124,7 @@
1
2
- 16478
+ 16477
2
@@ -41157,7 +41165,7 @@
1
2
- 19815
+ 19814
2
@@ -41265,7 +41273,7 @@
1
2
- 30121
+ 30120
2
@@ -41296,7 +41304,7 @@
2
3
- 4341
+ 4340
3
@@ -41378,15 +41386,15 @@
cil_local_variable
- 23026507
+ 23026292
id
- 23026507
+ 23026292
impl
- 6649736
+ 6649674
index
@@ -41394,7 +41402,7 @@
var_type
- 2957964
+ 2957937
@@ -41408,7 +41416,7 @@
1
2
- 23026507
+ 23026292
@@ -41424,7 +41432,7 @@
1
2
- 23026507
+ 23026292
@@ -41440,7 +41448,7 @@
1
2
- 23026507
+ 23026292
@@ -41456,37 +41464,37 @@
1
2
- 2714986
+ 2714961
2
3
- 1154972
+ 1154961
3
4
- 783477
+ 783469
4
5
- 524995
+ 524990
5
6
- 385197
+ 385193
6
9
- 558778
+ 558773
9
29
- 498801
+ 498797
29
@@ -41507,37 +41515,37 @@
1
2
- 2714986
+ 2714961
2
3
- 1154972
+ 1154961
3
4
- 783477
+ 783469
4
5
- 524995
+ 524990
5
6
- 385197
+ 385193
6
9
- 558778
+ 558773
9
29
- 498801
+ 498797
29
@@ -41558,37 +41566,37 @@
1
2
- 2973084
+ 2973056
2
3
- 1271618
+ 1271606
3
4
- 818854
+ 818847
4
5
- 500130
+ 500126
5
7
- 537339
+ 537334
7
16
- 498831
+ 498826
16
163
- 49877
+ 49876
@@ -41762,27 +41770,27 @@
1
2
- 1877350
+ 1877333
2
3
- 375954
+ 375950
3
4
- 175411
+ 175410
4
7
- 232849
+ 232846
7
29
- 223664
+ 223662
29
@@ -41803,27 +41811,27 @@
1
2
- 1959652
+ 1959634
2
3
- 358679
+ 358675
3
5
- 267754
+ 267751
5
12
- 222070
+ 222068
12
44190
- 149808
+ 149807
@@ -41839,27 +41847,27 @@
1
2
- 2018536
+ 2018517
2
3
- 391103
+ 391099
3
4
- 185275
+ 185273
4
8
- 239434
+ 239432
8
217
- 123615
+ 123614
@@ -41869,11 +41877,11 @@
cil_function_pointer_calling_conventions
- 39912
+ 39911
id
- 39912
+ 39911
kind
@@ -41891,7 +41899,7 @@
1
2
- 39912
+ 39911
@@ -41922,15 +41930,15 @@
cil_handler
- 2378514
+ 2378492
id
- 2378514
+ 2378492
impl
- 1552395
+ 1552381
index
@@ -41942,15 +41950,15 @@
try_start
- 2323145
+ 2323123
try_end
- 2349486
+ 2349464
handler_start
- 2378514
+ 2378492
@@ -41964,7 +41972,7 @@
1
2
- 2378514
+ 2378492
@@ -41980,7 +41988,7 @@
1
2
- 2378514
+ 2378492
@@ -41996,7 +42004,7 @@
1
2
- 2378514
+ 2378492
@@ -42012,7 +42020,7 @@
1
2
- 2378514
+ 2378492
@@ -42028,7 +42036,7 @@
1
2
- 2378514
+ 2378492
@@ -42044,7 +42052,7 @@
1
2
- 2378514
+ 2378492
@@ -42060,22 +42068,22 @@
1
2
- 1142805
+ 1142795
2
3
- 247407
+ 247405
3
5
- 119658
+ 119656
5
83
- 42524
+ 42523
@@ -42091,22 +42099,22 @@
1
2
- 1142805
+ 1142795
2
3
- 247407
+ 247405
3
5
- 119658
+ 119656
5
83
- 42524
+ 42523
@@ -42122,12 +42130,12 @@
1
2
- 1453556
+ 1453543
2
4
- 98839
+ 98838
@@ -42143,17 +42151,17 @@
1
2
- 1161321
+ 1161310
2
3
- 240615
+ 240613
3
6
- 125918
+ 125917
6
@@ -42174,22 +42182,22 @@
1
2
- 1153171
+ 1153160
2
3
- 244070
+ 244068
3
6
- 128989
+ 128988
6
83
- 26164
+ 26163
@@ -42205,22 +42213,22 @@
1
2
- 1142805
+ 1142795
2
3
- 247407
+ 247405
3
5
- 119658
+ 119656
5
83
- 42524
+ 42523
@@ -42758,12 +42766,12 @@
1
2
- 2279616
+ 2279595
2
9
- 43528
+ 43527
@@ -42779,7 +42787,7 @@
1
2
- 2323145
+ 2323123
@@ -42795,12 +42803,12 @@
1
2
- 2279616
+ 2279595
2
9
- 43528
+ 43527
@@ -42816,7 +42824,7 @@
1
2
- 2305987
+ 2305966
2
@@ -42837,7 +42845,7 @@
1
2
- 2299727
+ 2299705
2
@@ -42858,12 +42866,12 @@
1
2
- 2279616
+ 2279595
2
9
- 43528
+ 43527
@@ -42879,7 +42887,7 @@
1
2
- 2326836
+ 2326814
2
@@ -42900,7 +42908,7 @@
1
2
- 2349486
+ 2349464
@@ -42916,7 +42924,7 @@
1
2
- 2326836
+ 2326814
2
@@ -42937,7 +42945,7 @@
1
2
- 2347537
+ 2347515
2
@@ -42958,7 +42966,7 @@
1
2
- 2349486
+ 2349464
@@ -42974,7 +42982,7 @@
1
2
- 2326836
+ 2326814
2
@@ -42995,7 +43003,7 @@
1
2
- 2378514
+ 2378492
@@ -43011,7 +43019,7 @@
1
2
- 2378514
+ 2378492
@@ -43027,7 +43035,7 @@
1
2
- 2378514
+ 2378492
@@ -43043,7 +43051,7 @@
1
2
- 2378514
+ 2378492
@@ -43059,7 +43067,7 @@
1
2
- 2378514
+ 2378492
@@ -43075,7 +43083,7 @@
1
2
- 2378514
+ 2378492
@@ -43133,11 +43141,11 @@
cil_handler_type
- 400819
+ 400815
id
- 400819
+ 400815
catch_type
@@ -43155,7 +43163,7 @@
1
2
- 400819
+ 400815
@@ -43216,11 +43224,11 @@
cil_method_stack_size
- 27072292
+ 27072039
method
- 27072292
+ 27072039
size
@@ -43238,7 +43246,7 @@
1
2
- 27072292
+ 27072039
@@ -43309,121 +43317,121 @@
cil_public
- 30557526
+ 30557240
id
- 30557526
+ 30557240
cil_private
- 15498766
+ 15498621
id
- 15498766
+ 15498621
cil_protected
- 28744228
+ 28743959
id
- 28744228
+ 28743959
cil_internal
- 986884
+ 986874
id
- 986884
+ 986874
cil_static
- 14521686
+ 14521550
id
- 14521686
+ 14521550
cil_sealed
- 6359922
+ 6359863
id
- 6359922
+ 6359863
cil_virtual
- 11734704
+ 11734594
id
- 11734704
+ 11734594
cil_abstract
- 2826199
+ 2826172
id
- 2826199
+ 2826172
cil_class
- 4475041
+ 4475000
id
- 4475041
+ 4475000
cil_interface
- 367479
+ 367475
id
- 367479
+ 367475
cil_security
- 48814
+ 48813
id
- 48814
+ 48813
@@ -43441,37 +43449,37 @@
cil_specialname
- 12520543
+ 12520426
id
- 12520543
+ 12520426
cil_newslot
- 7370933
+ 7370864
id
- 7370933
+ 7370864
cil_base_class
- 4460424
+ 4460382
id
- 4460424
+ 4460382
base
- 462242
+ 462238
@@ -43485,7 +43493,7 @@
1
2
- 4460424
+ 4460382
@@ -43501,12 +43509,12 @@
1
2
- 280600
+ 280597
2
3
- 90068
+ 90067
3
@@ -43516,7 +43524,7 @@
4
8
- 38242
+ 38241
8
@@ -43531,15 +43539,15 @@
cil_base_interface
- 2925894
+ 2925867
id
- 1244479
+ 1244468
base
- 538638
+ 538633
@@ -43553,32 +43561,32 @@
1
2
- 703478
+ 703472
2
3
- 199095
+ 199093
3
4
- 95531
+ 95530
4
5
- 46540
+ 46539
5
6
- 123792
+ 123791
6
32
- 76041
+ 76040
@@ -43594,7 +43602,7 @@
1
2
- 358649
+ 358646
2
@@ -43604,12 +43612,12 @@
3
4
- 31834
+ 31833
4
8
- 43203
+ 43202
8
@@ -43629,11 +43637,11 @@
cil_enum_underlying_type
- 203849
+ 203848
id
- 203849
+ 203848
underlying
@@ -43651,7 +43659,7 @@
1
2
- 203849
+ 203848
@@ -43712,11 +43720,11 @@
cil_type_parameter
- 1773609
+ 1773592
unbound
- 1331358
+ 1331346
index
@@ -43724,7 +43732,7 @@
param
- 1773609
+ 1773592
@@ -43738,17 +43746,17 @@
1
2
- 994443
+ 994434
2
3
- 282460
+ 282457
3
43
- 54454
+ 54453
@@ -43764,17 +43772,17 @@
1
2
- 994443
+ 994434
2
3
- 282460
+ 282457
3
43
- 54454
+ 54453
@@ -43912,7 +43920,7 @@
1
2
- 1773609
+ 1773592
@@ -43928,7 +43936,7 @@
1
2
- 1773609
+ 1773592
@@ -43938,11 +43946,11 @@
cil_type_argument
- 11206076
+ 11205971
bound
- 8383213
+ 8383135
index
@@ -43950,7 +43958,7 @@
t
- 2800094
+ 2800068
@@ -43964,17 +43972,17 @@
1
2
- 5919148
+ 5919093
2
3
- 2202955
+ 2202934
3
43
- 261109
+ 261107
@@ -43990,17 +43998,17 @@
1
2
- 6030449
+ 6030393
2
3
- 2159013
+ 2158993
3
43
- 193750
+ 193748
@@ -44133,32 +44141,32 @@
1
2
- 1210194
+ 1210183
2
3
- 732418
+ 732411
3
4
- 295483
+ 295480
4
6
- 237455
+ 237453
6
12
- 215160
+ 215158
12
14769
- 109381
+ 109380
@@ -44174,17 +44182,17 @@
1
2
- 2254043
+ 2254022
2
3
- 502079
+ 502075
3
10
- 43971
+ 43970
@@ -44285,19 +44293,19 @@
cil_attribute
- 5874527
+ 5874473
attributeid
- 5874527
+ 5874473
element
- 5184131
+ 5184082
constructor
- 27995
+ 27994
@@ -44311,7 +44319,7 @@
1
2
- 5874527
+ 5874473
@@ -44327,7 +44335,7 @@
1
2
- 5874527
+ 5874473
@@ -44343,12 +44351,12 @@
1
2
- 4807940
+ 4807895
2
3520
- 376190
+ 376187
@@ -44364,12 +44372,12 @@
1
2
- 4812458
+ 4812413
2
9
- 371672
+ 371669
@@ -44521,11 +44529,11 @@
cil_attribute_named_argument
- 261818
+ 261816
attribute_id
- 161089
+ 161088
param
@@ -44533,7 +44541,7 @@
value
- 119569
+ 119568
@@ -44547,7 +44555,7 @@
1
2
- 97510
+ 97509
2
@@ -44562,7 +44570,7 @@
4
6
- 12137
+ 12136
7
@@ -44583,7 +44591,7 @@
1
2
- 103711
+ 103710
2
@@ -44746,7 +44754,7 @@
1
2
- 101171
+ 101170
2
@@ -44772,7 +44780,7 @@
1
2
- 112925
+ 112924
2
@@ -44787,11 +44795,11 @@
cil_attribute_positional_argument
- 1757367
+ 1757351
attribute_id
- 1528150
+ 1528136
index
@@ -44799,7 +44807,7 @@
value
- 440478
+ 440474
@@ -44813,12 +44821,12 @@
1
2
- 1317006
+ 1316994
2
3
- 194104
+ 194103
3
@@ -44839,12 +44847,12 @@
1
2
- 1318276
+ 1318264
2
3
- 194222
+ 194221
3
@@ -44932,12 +44940,12 @@
1
2
- 324925
+ 324922
2
3
- 75273
+ 75272
3
@@ -44963,7 +44971,7 @@
1
2
- 400848
+ 400845
2
@@ -44983,19 +44991,19 @@
metadata_handle
- 109731032
+ 109730006
entity
- 109393999
+ 109392976
location
- 14588
+ 14587
handle
- 2756447
+ 2756422
@@ -45009,12 +45017,12 @@
1
2
- 109222337
+ 109221316
2
495
- 171661
+ 171659
@@ -45030,12 +45038,12 @@
1
2
- 109225527
+ 109224505
2
104
- 168472
+ 168470
@@ -45198,7 +45206,7 @@
2
3
- 373149
+ 373145
3
@@ -45208,57 +45216,57 @@
4
5
- 360687
+ 360683
5
8
- 210051
+ 210049
8
11
- 237367
+ 237364
11
15
- 233026
+ 233024
15
22
- 101939
+ 101938
22
25
- 223103
+ 223101
25
39
- 216105
+ 216103
39
51
- 211143
+ 211142
51
73
- 210317
+ 210315
73
137
- 207807
+ 207805
137
732
- 169801
+ 169799
@@ -45274,62 +45282,62 @@
1
2
- 373651
+ 373647
2
3
- 362134
+ 362130
3
4
- 205326
+ 205324
4
6
- 242092
+ 242089
6
8
- 233026
+ 233024
8
11
- 101733
+ 101732
11
13
- 223192
+ 223190
13
20
- 216134
+ 216132
20
26
- 210523
+ 210521
26
37
- 210996
+ 210994
37
70
- 209903
+ 209901
70
495
- 167733
+ 167732
diff --git a/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/old.dbscheme b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/old.dbscheme
new file mode 100644
index 00000000000..83aca6b3e4f
--- /dev/null
+++ b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/old.dbscheme
@@ -0,0 +1,2067 @@
+/* This is a dummy line to alter the dbscheme, so we can make a database upgrade
+ * without actually changing any of the dbscheme predicates. It contains a date
+ * to allow for such updates in the future as well.
+ *
+ * 2021-07-14
+ *
+ * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a
+ * previously seen state (matching a previously seen SHA), which would make the upgrade
+ * mechanism not work properly.
+ */
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | --compiler
+ * 1 | *path to compiler*
+ * 2 | f1.cs
+ * 3 | f2.cs
+ * 4 | f3.cs
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.cs
+ * 1 | f2.cs
+ * 2 | f3.cs
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The references used by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | ref1.dll
+ * 1 | ref2.dll
+ * 2 | ref3.dll
+ */
+#keyset[id, num]
+compilation_referencing_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+extractor_messages(
+ unique int id: @extractor_message,
+ int severity: int ref,
+ string origin : string ref,
+ string text : string ref,
+ string entity : string ref,
+ int location: @location_default ref,
+ string stack_trace : string ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+compilation_assembly(
+ unique int id : @compilation ref,
+ int assembly: @assembly ref
+)
+
+// Populated by the CSV extractor
+externalData(
+ int id: @externalDataElement,
+ string path: string ref,
+ int column: int ref,
+ string value: string ref);
+
+sourceLocationPrefix(
+ string prefix: string ref);
+
+/*
+ * C# dbscheme
+ */
+
+/** ELEMENTS **/
+
+@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration
+ | @using_directive | @type_parameter_constraints | @externalDataElement
+ | @xmllocatable | @asp_element | @namespace | @preprocessor_directive;
+
+@declaration = @callable | @generic | @assignable | @namespace;
+
+@named_element = @namespace | @declaration;
+
+@declaration_with_accessors = @property | @indexer | @event;
+
+@assignable = @variable | @assignable_with_accessors | @event;
+
+@assignable_with_accessors = @property | @indexer;
+
+@attributable = @assembly | @field | @parameter | @operator | @method | @constructor
+ | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors
+ | @local_function | @lambda_expr;
+
+/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/
+
+@location = @location_default | @assembly;
+
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+locations_mapped(
+ unique int id: @location_default ref,
+ int mapped_to: @location_default ref);
+
+@sourceline = @file | @callable | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref);
+
+assemblies(
+ unique int id: @assembly,
+ int file: @file ref,
+ string fullname: string ref,
+ string name: string ref,
+ string version: string ref);
+
+files(
+ unique int id: @file,
+ string name: string ref);
+
+folders(
+ unique int id: @folder,
+ string name: string ref);
+
+@container = @folder | @file ;
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref);
+
+file_extraction_mode(
+ unique int file: @file ref,
+ int mode: int ref
+ /* 0 = normal, 1 = standalone extractor */
+ );
+
+/** NAMESPACES **/
+
+@type_container = @namespace | @type;
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref);
+
+namespace_declarations(
+ unique int id: @namespace_declaration,
+ int namespace_id: @namespace ref);
+
+namespace_declaration_location(
+ unique int id: @namespace_declaration ref,
+ int loc: @location ref);
+
+parent_namespace(
+ unique int child_id: @type_container ref,
+ int namespace_id: @namespace ref);
+
+@declaration_or_directive = @namespace_declaration | @type | @using_directive;
+
+parent_namespace_declaration(
+ int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes
+ int namespace_id: @namespace_declaration ref);
+
+@using_directive = @using_namespace_directive | @using_static_directive;
+
+using_global(
+ unique int id: @using_directive ref
+);
+
+using_namespace_directives(
+ unique int id: @using_namespace_directive,
+ int namespace_id: @namespace ref);
+
+using_static_directives(
+ unique int id: @using_static_directive,
+ int type_id: @type_or_ref ref);
+
+using_directive_location(
+ unique int id: @using_directive ref,
+ int loc: @location ref);
+
+@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning
+ | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if
+ | @directive_elif | @directive_else | @directive_endif;
+
+@conditional_directive = @directive_if | @directive_elif;
+@branch_directive = @directive_if | @directive_elif | @directive_else;
+
+directive_ifs(
+ unique int id: @directive_if,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref); /* 0: false, 1: true */
+
+directive_elifs(
+ unique int id: @directive_elif,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+directive_elses(
+ unique int id: @directive_else,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+#keyset[id, start]
+directive_endifs(
+ unique int id: @directive_endif,
+ unique int start: @directive_if ref);
+
+directive_define_symbols(
+ unique int id: @define_symbol_expr ref,
+ string name: string ref);
+
+directive_regions(
+ unique int id: @directive_region,
+ string name: string ref);
+
+#keyset[id, start]
+directive_endregions(
+ unique int id: @directive_endregion,
+ unique int start: @directive_region ref);
+
+directive_lines(
+ unique int id: @directive_line,
+ int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */
+
+directive_line_value(
+ unique int id: @directive_line ref,
+ int line: int ref);
+
+directive_line_file(
+ unique int id: @directive_line ref,
+ int file: @file ref);
+
+directive_line_offset(
+ unique int id: @directive_line ref,
+ int offset: int ref);
+
+directive_line_span(
+ unique int id: @directive_line ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+directive_nullables(
+ unique int id: @directive_nullable,
+ int setting: int ref, /* 0: disable, 1: enable, 2: restore */
+ int target: int ref); /* 0: none, 1: annotations, 2: warnings */
+
+directive_warnings(
+ unique int id: @directive_warning,
+ string message: string ref);
+
+directive_errors(
+ unique int id: @directive_error,
+ string message: string ref);
+
+directive_undefines(
+ unique int id: @directive_undefine,
+ string name: string ref);
+
+directive_defines(
+ unique int id: @directive_define,
+ string name: string ref);
+
+pragma_checksums(
+ unique int id: @pragma_checksum,
+ int file: @file ref,
+ string guid: string ref,
+ string bytes: string ref);
+
+pragma_warnings(
+ unique int id: @pragma_warning,
+ int kind: int ref /* 0 = disable, 1 = restore */);
+
+#keyset[id, index]
+pragma_warning_error_codes(
+ int id: @pragma_warning ref,
+ string errorCode: string ref,
+ int index: int ref);
+
+preprocessor_directive_location(
+ unique int id: @preprocessor_directive ref,
+ int loc: @location ref);
+
+preprocessor_directive_compilation(
+ unique int id: @preprocessor_directive ref,
+ int compilation: @compilation ref);
+
+preprocessor_directive_active(
+ unique int id: @preprocessor_directive ref,
+ int active: int ref); /* 0: false, 1: true */
+
+/** TYPES **/
+
+types(
+ unique int id: @type,
+ int kind: int ref,
+ string name: string ref);
+
+case @type.kind of
+ 1 = @bool_type
+| 2 = @char_type
+| 3 = @decimal_type
+| 4 = @sbyte_type
+| 5 = @short_type
+| 6 = @int_type
+| 7 = @long_type
+| 8 = @byte_type
+| 9 = @ushort_type
+| 10 = @uint_type
+| 11 = @ulong_type
+| 12 = @float_type
+| 13 = @double_type
+| 14 = @enum_type
+| 15 = @struct_type
+| 17 = @class_type
+| 19 = @interface_type
+| 20 = @delegate_type
+| 21 = @null_type
+| 22 = @type_parameter
+| 23 = @pointer_type
+| 24 = @nullable_type
+| 25 = @array_type
+| 26 = @void_type
+| 27 = @int_ptr_type
+| 28 = @uint_ptr_type
+| 29 = @dynamic_type
+| 30 = @arglist_type
+| 31 = @unknown_type
+| 32 = @tuple_type
+| 33 = @function_pointer_type
+ ;
+
+@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type;
+@integral_type = @signed_integral_type | @unsigned_integral_type;
+@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type;
+@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type;
+@floating_point_type = @float_type | @double_type;
+@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type
+ | @uint_ptr_type | @tuple_type;
+@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type
+ | @dynamic_type;
+@value_or_ref_type = @value_type | @ref_type;
+
+typerefs(
+ unique int id: @typeref,
+ string name: string ref);
+
+typeref_type(
+ int id: @typeref ref,
+ unique int typeId: @type ref);
+
+@type_or_ref = @type | @typeref;
+
+array_element_type(
+ unique int array: @array_type ref,
+ int dimension: int ref,
+ int rank: int ref,
+ int element: @type_or_ref ref);
+
+nullable_underlying_type(
+ unique int nullable: @nullable_type ref,
+ int underlying: @type_or_ref ref);
+
+pointer_referent_type(
+ unique int pointer: @pointer_type ref,
+ int referent: @type_or_ref ref);
+
+enum_underlying_type(
+ unique int enum_id: @enum_type ref,
+ int underlying_type_id: @type_or_ref ref);
+
+delegate_return_type(
+ unique int delegate_id: @delegate_type ref,
+ int return_type_id: @type_or_ref ref);
+
+function_pointer_return_type(
+ unique int function_pointer_id: @function_pointer_type ref,
+ int return_type_id: @type_or_ref ref);
+
+extend(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+anonymous_types(
+ unique int id: @type ref);
+
+@interface_or_ref = @interface_type | @typeref;
+
+implement(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+type_location(
+ int id: @type ref,
+ int loc: @location ref);
+
+tuple_underlying_type(
+ unique int tuple: @tuple_type ref,
+ int struct: @type_or_ref ref);
+
+#keyset[tuple, index]
+tuple_element(
+ int tuple: @tuple_type ref,
+ int index: int ref,
+ unique int field: @field ref);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ int type_id: @type_or_ref ref,
+ int target: @attributable ref);
+
+case @attribute.kind of
+ 0 = @attribute_default
+| 1 = @attribute_return
+| 2 = @attribute_assembly
+| 3 = @attribute_module
+;
+
+attribute_location(
+ int id: @attribute ref,
+ int loc: @location ref);
+
+@type_mention_parent = @element | @type_mention;
+
+type_mention(
+ unique int id: @type_mention,
+ int type_id: @type_or_ref ref,
+ int parent: @type_mention_parent ref);
+
+type_mention_location(
+ unique int id: @type_mention ref,
+ int loc: @location ref);
+
+@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type;
+
+/**
+ * A direct annotation on an entity, for example `string? x;`.
+ *
+ * Annotations:
+ * 2 = reftype is not annotated "!"
+ * 3 = reftype is annotated "?"
+ * 4 = readonly ref type / in parameter
+ * 5 = ref type parameter, return or local variable
+ * 6 = out parameter
+ *
+ * Note that the annotation depends on the element it annotates.
+ * @assignable: The annotation is on the type of the assignable, for example the variable type.
+ * @type_parameter: The annotation is on the reftype constraint
+ * @callable: The annotation is on the return type
+ * @array_type: The annotation is on the element type
+ */
+type_annotation(int id: @has_type_annotation ref, int annotation: int ref);
+
+nullability(unique int nullability: @nullability, int kind: int ref);
+
+case @nullability.kind of
+ 0 = @oblivious
+| 1 = @not_annotated
+| 2 = @annotated
+;
+
+#keyset[parent, index]
+nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref)
+
+type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref);
+
+/**
+ * The nullable flow state of an expression, as determined by Roslyn.
+ * 0 = none (default, not populated)
+ * 1 = not null
+ * 2 = maybe null
+ */
+expr_flowstate(unique int id: @expr ref, int state: int ref);
+
+/** GENERICS **/
+
+@generic = @type | @method | @local_function;
+
+type_parameters(
+ unique int id: @type_parameter ref,
+ int index: int ref,
+ int generic_id: @generic ref,
+ int variance: int ref /* none = 0, out = 1, in = 2 */);
+
+#keyset[constructed_id, index]
+type_arguments(
+ int id: @type_or_ref ref,
+ int index: int ref,
+ int constructed_id: @generic_or_ref ref);
+
+@generic_or_ref = @generic | @typeref;
+
+constructed_generic(
+ unique int constructed: @generic ref,
+ int generic: @generic_or_ref ref);
+
+type_parameter_constraints(
+ unique int id: @type_parameter_constraints,
+ int param_id: @type_parameter ref);
+
+type_parameter_constraints_location(
+ int id: @type_parameter_constraints ref,
+ int loc: @location ref);
+
+general_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int kind: int ref /* class = 1, struct = 2, new = 3 */);
+
+specific_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref);
+
+specific_type_parameter_nullability(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref,
+ int nullability: @nullability ref);
+
+/** FUNCTION POINTERS */
+
+function_pointer_calling_conventions(
+ int id: @function_pointer_type ref,
+ int kind: int ref);
+
+#keyset[id, index]
+has_unmanaged_calling_conventions(
+ int id: @function_pointer_type ref,
+ int index: int ref,
+ int conv_id: @type_or_ref ref);
+
+/** MODIFIERS */
+
+@modifiable = @modifiable_direct | @event_accessor;
+
+@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr;
+
+modifiers(
+ unique int id: @modifier,
+ string name: string ref);
+
+has_modifiers(
+ int id: @modifiable_direct ref,
+ int mod_id: @modifier ref);
+
+compiler_generated(unique int id: @modifiable ref);
+
+/** MEMBERS **/
+
+@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type;
+
+@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr;
+
+@virtualizable = @method | @property | @indexer | @event;
+
+exprorstmt_name(
+ unique int parent_id: @named_exprorstmt ref,
+ string name: string ref);
+
+nested_types(
+ unique int id: @type ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @type ref);
+
+properties(
+ unique int id: @property,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @property ref);
+
+property_location(
+ int id: @property ref,
+ int loc: @location ref);
+
+indexers(
+ unique int id: @indexer,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @indexer ref);
+
+indexer_location(
+ int id: @indexer ref,
+ int loc: @location ref);
+
+accessors(
+ unique int id: @accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_member_id: @member ref,
+ int unbound_id: @accessor ref);
+
+case @accessor.kind of
+ 1 = @getter
+| 2 = @setter
+ ;
+
+init_only_accessors(
+ unique int id: @accessor ref);
+
+accessor_location(
+ int id: @accessor ref,
+ int loc: @location ref);
+
+events(
+ unique int id: @event,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @event ref);
+
+event_location(
+ int id: @event ref,
+ int loc: @location ref);
+
+event_accessors(
+ unique int id: @event_accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_event_id: @event ref,
+ int unbound_id: @event_accessor ref);
+
+case @event_accessor.kind of
+ 1 = @add_event_accessor
+| 2 = @remove_event_accessor
+ ;
+
+event_accessor_location(
+ int id: @event_accessor ref,
+ int loc: @location ref);
+
+operators(
+ unique int id: @operator,
+ string name: string ref,
+ string symbol: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @operator ref);
+
+operator_location(
+ int id: @operator ref,
+ int loc: @location ref);
+
+constant_value(
+ int id: @variable ref,
+ string value: string ref);
+
+/** CALLABLES **/
+
+@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function;
+
+@callable_accessor = @accessor | @event_accessor;
+
+methods(
+ unique int id: @method,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @method ref);
+
+method_location(
+ int id: @method ref,
+ int loc: @location ref);
+
+constructors(
+ unique int id: @constructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @constructor ref);
+
+constructor_location(
+ int id: @constructor ref,
+ int loc: @location ref);
+
+destructors(
+ unique int id: @destructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @destructor ref);
+
+destructor_location(
+ int id: @destructor ref,
+ int loc: @location ref);
+
+overrides(
+ int id: @callable ref,
+ int base_id: @callable ref);
+
+explicitly_implements(
+ int id: @member ref,
+ int interface_id: @interface_or_ref ref);
+
+local_functions(
+ unique int id: @local_function,
+ string name: string ref,
+ int return_type: @type ref,
+ int unbound_id: @local_function ref);
+
+local_function_stmts(
+ unique int fn: @local_function_stmt ref,
+ int stmt: @local_function ref);
+
+/** VARIABLES **/
+
+@variable = @local_scope_variable | @field;
+
+@local_scope_variable = @local_variable | @parameter;
+
+fields(
+ unique int id: @field,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @field ref);
+
+case @field.kind of
+ 1 = @addressable_field
+| 2 = @constant
+ ;
+
+field_location(
+ int id: @field ref,
+ int loc: @location ref);
+
+localvars(
+ unique int id: @local_variable,
+ int kind: int ref,
+ string name: string ref,
+ int implicitly_typed: int ref /* 0 = no, 1 = yes */,
+ int type_id: @type_or_ref ref,
+ int parent_id: @local_var_decl_expr ref);
+
+case @local_variable.kind of
+ 1 = @addressable_local_variable
+| 2 = @local_constant
+| 3 = @local_variable_ref
+ ;
+
+localvar_location(
+ unique int id: @local_variable ref,
+ int loc: @location ref);
+
+@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type;
+
+#keyset[name, parent_id]
+#keyset[index, parent_id]
+params(
+ unique int id: @parameter,
+ string name: string ref,
+ int type_id: @type_or_ref ref,
+ int index: int ref,
+ int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */
+ int parent_id: @parameterizable ref,
+ int unbound_id: @parameter ref);
+
+param_location(
+ int id: @parameter ref,
+ int loc: @location ref);
+
+/** STATEMENTS **/
+
+@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent;
+
+statements(
+ unique int id: @stmt,
+ int kind: int ref);
+
+#keyset[index, parent]
+stmt_parent(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_stmt_parent = @callable;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+stmt_parent_top_level(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @top_level_stmt_parent ref);
+
+case @stmt.kind of
+ 1 = @block_stmt
+| 2 = @expr_stmt
+| 3 = @if_stmt
+| 4 = @switch_stmt
+| 5 = @while_stmt
+| 6 = @do_stmt
+| 7 = @for_stmt
+| 8 = @foreach_stmt
+| 9 = @break_stmt
+| 10 = @continue_stmt
+| 11 = @goto_stmt
+| 12 = @goto_case_stmt
+| 13 = @goto_default_stmt
+| 14 = @throw_stmt
+| 15 = @return_stmt
+| 16 = @yield_stmt
+| 17 = @try_stmt
+| 18 = @checked_stmt
+| 19 = @unchecked_stmt
+| 20 = @lock_stmt
+| 21 = @using_block_stmt
+| 22 = @var_decl_stmt
+| 23 = @const_decl_stmt
+| 24 = @empty_stmt
+| 25 = @unsafe_stmt
+| 26 = @fixed_stmt
+| 27 = @label_stmt
+| 28 = @catch
+| 29 = @case_stmt
+| 30 = @local_function_stmt
+| 31 = @using_decl_stmt
+ ;
+
+@using_stmt = @using_block_stmt | @using_decl_stmt;
+
+@labeled_stmt = @label_stmt | @case;
+
+@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt;
+
+@cond_stmt = @if_stmt | @switch_stmt;
+
+@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt;
+
+@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt
+ | @yield_stmt;
+
+@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt;
+
+
+stmt_location(
+ unique int id: @stmt ref,
+ int loc: @location ref);
+
+catch_type(
+ unique int catch_id: @catch ref,
+ int type_id: @type_or_ref ref,
+ int kind: int ref /* explicit = 1, implicit = 2 */);
+
+foreach_stmt_info(
+ unique int id: @foreach_stmt ref,
+ int kind: int ref /* non-async = 1, async = 2 */);
+
+@foreach_symbol = @method | @property | @type_or_ref;
+
+#keyset[id, kind]
+foreach_stmt_desugar(
+ int id: @foreach_stmt ref,
+ int symbol: @foreach_symbol ref,
+ int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */);
+
+/** EXPRESSIONS **/
+
+expressions(
+ unique int id: @expr,
+ int kind: int ref,
+ int type_id: @type_or_ref ref);
+
+#keyset[index, parent]
+expr_parent(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif;
+
+@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+expr_parent_top_level(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @top_level_exprorstmt_parent ref);
+
+case @expr.kind of
+/* literal */
+ 1 = @bool_literal_expr
+| 2 = @char_literal_expr
+| 3 = @decimal_literal_expr
+| 4 = @int_literal_expr
+| 5 = @long_literal_expr
+| 6 = @uint_literal_expr
+| 7 = @ulong_literal_expr
+| 8 = @float_literal_expr
+| 9 = @double_literal_expr
+| 10 = @string_literal_expr
+| 11 = @null_literal_expr
+/* primary & unary */
+| 12 = @this_access_expr
+| 13 = @base_access_expr
+| 14 = @local_variable_access_expr
+| 15 = @parameter_access_expr
+| 16 = @field_access_expr
+| 17 = @property_access_expr
+| 18 = @method_access_expr
+| 19 = @event_access_expr
+| 20 = @indexer_access_expr
+| 21 = @array_access_expr
+| 22 = @type_access_expr
+| 23 = @typeof_expr
+| 24 = @method_invocation_expr
+| 25 = @delegate_invocation_expr
+| 26 = @operator_invocation_expr
+| 27 = @cast_expr
+| 28 = @object_creation_expr
+| 29 = @explicit_delegate_creation_expr
+| 30 = @implicit_delegate_creation_expr
+| 31 = @array_creation_expr
+| 32 = @default_expr
+| 33 = @plus_expr
+| 34 = @minus_expr
+| 35 = @bit_not_expr
+| 36 = @log_not_expr
+| 37 = @post_incr_expr
+| 38 = @post_decr_expr
+| 39 = @pre_incr_expr
+| 40 = @pre_decr_expr
+/* multiplicative */
+| 41 = @mul_expr
+| 42 = @div_expr
+| 43 = @rem_expr
+/* additive */
+| 44 = @add_expr
+| 45 = @sub_expr
+/* shift */
+| 46 = @lshift_expr
+| 47 = @rshift_expr
+/* relational */
+| 48 = @lt_expr
+| 49 = @gt_expr
+| 50 = @le_expr
+| 51 = @ge_expr
+/* equality */
+| 52 = @eq_expr
+| 53 = @ne_expr
+/* logical */
+| 54 = @bit_and_expr
+| 55 = @bit_xor_expr
+| 56 = @bit_or_expr
+| 57 = @log_and_expr
+| 58 = @log_or_expr
+/* type testing */
+| 59 = @is_expr
+| 60 = @as_expr
+/* null coalescing */
+| 61 = @null_coalescing_expr
+/* conditional */
+| 62 = @conditional_expr
+/* assignment */
+| 63 = @simple_assign_expr
+| 64 = @assign_add_expr
+| 65 = @assign_sub_expr
+| 66 = @assign_mul_expr
+| 67 = @assign_div_expr
+| 68 = @assign_rem_expr
+| 69 = @assign_and_expr
+| 70 = @assign_xor_expr
+| 71 = @assign_or_expr
+| 72 = @assign_lshift_expr
+| 73 = @assign_rshift_expr
+/* more */
+| 74 = @object_init_expr
+| 75 = @collection_init_expr
+| 76 = @array_init_expr
+| 77 = @checked_expr
+| 78 = @unchecked_expr
+| 79 = @constructor_init_expr
+| 80 = @add_event_expr
+| 81 = @remove_event_expr
+| 82 = @par_expr
+| 83 = @local_var_decl_expr
+| 84 = @lambda_expr
+| 85 = @anonymous_method_expr
+| 86 = @namespace_expr
+/* dynamic */
+| 92 = @dynamic_element_access_expr
+| 93 = @dynamic_member_access_expr
+/* unsafe */
+| 100 = @pointer_indirection_expr
+| 101 = @address_of_expr
+| 102 = @sizeof_expr
+/* async */
+| 103 = @await_expr
+/* C# 6.0 */
+| 104 = @nameof_expr
+| 105 = @interpolated_string_expr
+| 106 = @unknown_expr
+/* C# 7.0 */
+| 107 = @throw_expr
+| 108 = @tuple_expr
+| 109 = @local_function_invocation_expr
+| 110 = @ref_expr
+| 111 = @discard_expr
+/* C# 8.0 */
+| 112 = @range_expr
+| 113 = @index_expr
+| 114 = @switch_expr
+| 115 = @recursive_pattern_expr
+| 116 = @property_pattern_expr
+| 117 = @positional_pattern_expr
+| 118 = @switch_case_expr
+| 119 = @assign_coalesce_expr
+| 120 = @suppress_nullable_warning_expr
+| 121 = @namespace_access_expr
+/* C# 9.0 */
+| 122 = @lt_pattern_expr
+| 123 = @gt_pattern_expr
+| 124 = @le_pattern_expr
+| 125 = @ge_pattern_expr
+| 126 = @not_pattern_expr
+| 127 = @and_pattern_expr
+| 128 = @or_pattern_expr
+| 129 = @function_pointer_invocation_expr
+| 130 = @with_expr
+/* C# 11.0 */
+| 131 = @list_pattern_expr
+| 132 = @slice_pattern_expr
+/* Preprocessor */
+| 999 = @define_symbol_expr
+;
+
+@switch = @switch_stmt | @switch_expr;
+@case = @case_stmt | @switch_case_expr;
+@pattern_match = @case | @is_expr;
+@unary_pattern_expr = @not_pattern_expr;
+@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr;
+@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr;
+
+@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr;
+@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr;
+@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr
+ | @string_literal_expr | @null_literal_expr;
+
+@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr;
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr;
+@assign_event_expr = @add_event_expr | @remove_event_expr;
+
+@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
+ | @assign_rem_expr
+@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
+ | @assign_lshift_expr | @assign_rshift_expr;
+
+@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr
+ | @method_access_expr | @type_access_expr | @dynamic_member_access_expr;
+@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr;
+@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr;
+
+@local_variable_access = @local_variable_access_expr | @local_var_decl_expr;
+@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access;
+@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr;
+
+@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr
+ | @event_access_expr | @dynamic_member_access_expr;
+
+@objectorcollection_init_expr = @object_init_expr | @collection_init_expr;
+
+@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr;
+
+@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr;
+@incr_op_expr = @pre_incr_expr | @post_incr_expr;
+@decr_op_expr = @pre_decr_expr | @post_decr_expr;
+@mut_op_expr = @incr_op_expr | @decr_op_expr;
+@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr;
+@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr;
+
+@ternary_log_op_expr = @conditional_expr;
+@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr;
+@un_log_op_expr = @log_not_expr;
+@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr;
+
+@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr
+ | @rshift_expr;
+@un_bit_op_expr = @bit_not_expr;
+@bit_expr = @un_bit_op_expr | @bin_bit_op_expr;
+
+@equality_op_expr = @eq_expr | @ne_expr;
+@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr;
+@comp_expr = @equality_op_expr | @rel_op_expr;
+
+@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op;
+
+@ternary_op = @ternary_log_op_expr;
+@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr;
+@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr
+ | @pointer_indirection_expr | @address_of_expr;
+
+@anonymous_function_expr = @lambda_expr | @anonymous_method_expr;
+
+@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr
+ | @delegate_invocation_expr | @object_creation_expr | @call_access_expr
+ | @local_function_invocation_expr | @function_pointer_invocation_expr;
+
+@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr;
+
+@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr
+ | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr;
+
+@throw_element = @throw_expr | @throw_stmt;
+
+@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr;
+
+implicitly_typed_array_creation(
+ unique int id: @array_creation_expr ref);
+
+explicitly_sized_array_creation(
+ unique int id: @array_creation_expr ref);
+
+stackalloc_array_creation(
+ unique int id: @array_creation_expr ref);
+
+implicitly_typed_object_creation(
+ unique int id: @implicitly_typeable_object_creation_expr ref);
+
+mutator_invocation_mode(
+ unique int id: @operator_invocation_expr ref,
+ int mode: int ref /* prefix = 1, postfix = 2*/);
+
+expr_compiler_generated(
+ unique int id: @expr ref);
+
+expr_value(
+ unique int id: @expr ref,
+ string value: string ref);
+
+expr_call(
+ unique int caller_id: @expr ref,
+ int target_id: @callable ref);
+
+expr_access(
+ unique int accesser_id: @access_expr ref,
+ int target_id: @accessible ref);
+
+@accessible = @method | @assignable | @local_function | @namespace;
+
+expr_location(
+ unique int id: @expr ref,
+ int loc: @location ref);
+
+dynamic_member_name(
+ unique int id: @late_bindable_expr ref,
+ string name: string ref);
+
+@qualifiable_expr = @member_access_expr
+ | @method_invocation_expr
+ | @element_access_expr;
+
+conditional_access(
+ unique int id: @qualifiable_expr ref);
+
+expr_argument(
+ unique int id: @expr ref,
+ int mode: int ref);
+ /* mode is the same as params: value = 0, ref = 1, out = 2 */
+
+expr_argument_name(
+ unique int id: @expr ref,
+ string name: string ref);
+
+lambda_expr_return_type(
+ unique int id: @lambda_expr ref,
+ int type_id: @type_or_ref ref);
+
+/** CONTROL/DATA FLOW **/
+
+@control_flow_element = @stmt | @expr;
+
+/* XML Files */
+
+xmlEncoding (
+ unique int id: @file ref,
+ string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/* Comments */
+
+commentline(
+ unique int id: @commentline,
+ int kind: int ref,
+ string text: string ref,
+ string rawtext: string ref);
+
+case @commentline.kind of
+ 0 = @singlelinecomment
+| 1 = @xmldoccomment
+| 2 = @multilinecomment;
+
+commentline_location(
+ unique int id: @commentline ref,
+ int loc: @location ref);
+
+commentblock(
+ unique int id : @commentblock);
+
+commentblock_location(
+ unique int id: @commentblock ref,
+ int loc: @location ref);
+
+commentblock_binding(
+ int id: @commentblock ref,
+ int entity: @element ref,
+ int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */
+
+commentblock_child(
+ int id: @commentblock ref,
+ int commentline: @commentline ref,
+ int index: int ref);
+
+/* ASP.NET */
+
+case @asp_element.kind of
+ 0=@asp_close_tag
+| 1=@asp_code
+| 2=@asp_comment
+| 3=@asp_data_binding
+| 4=@asp_directive
+| 5=@asp_open_tag
+| 6=@asp_quoted_string
+| 7=@asp_text
+| 8=@asp_xml_directive;
+
+@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string;
+
+asp_elements(
+ unique int id: @asp_element,
+ int kind: int ref,
+ int loc: @location ref);
+
+asp_comment_server(unique int comment: @asp_comment ref);
+asp_code_inline(unique int code: @asp_code ref);
+asp_directive_attribute(
+ int directive: @asp_directive ref,
+ int index: int ref,
+ string name: string ref,
+ int value: @asp_quoted_string ref);
+asp_directive_name(
+ unique int directive: @asp_directive ref,
+ string name: string ref);
+asp_element_body(
+ unique int element: @asp_element ref,
+ string body: string ref);
+asp_tag_attribute(
+ int tag: @asp_open_tag ref,
+ int index: int ref,
+ string name: string ref,
+ int attribute: @asp_attribute ref);
+asp_tag_name(
+ unique int tag: @asp_open_tag ref,
+ string name: string ref);
+asp_tag_isempty(int tag: @asp_open_tag ref);
+
+/* Common Intermediate Language - CIL */
+
+case @cil_instruction.opcode of
+ 0 = @cil_nop
+| 1 = @cil_break
+| 2 = @cil_ldarg_0
+| 3 = @cil_ldarg_1
+| 4 = @cil_ldarg_2
+| 5 = @cil_ldarg_3
+| 6 = @cil_ldloc_0
+| 7 = @cil_ldloc_1
+| 8 = @cil_ldloc_2
+| 9 = @cil_ldloc_3
+| 10 = @cil_stloc_0
+| 11 = @cil_stloc_1
+| 12 = @cil_stloc_2
+| 13 = @cil_stloc_3
+| 14 = @cil_ldarg_s
+| 15 = @cil_ldarga_s
+| 16 = @cil_starg_s
+| 17 = @cil_ldloc_s
+| 18 = @cil_ldloca_s
+| 19 = @cil_stloc_s
+| 20 = @cil_ldnull
+| 21 = @cil_ldc_i4_m1
+| 22 = @cil_ldc_i4_0
+| 23 = @cil_ldc_i4_1
+| 24 = @cil_ldc_i4_2
+| 25 = @cil_ldc_i4_3
+| 26 = @cil_ldc_i4_4
+| 27 = @cil_ldc_i4_5
+| 28 = @cil_ldc_i4_6
+| 29 = @cil_ldc_i4_7
+| 30 = @cil_ldc_i4_8
+| 31 = @cil_ldc_i4_s
+| 32 = @cil_ldc_i4
+| 33 = @cil_ldc_i8
+| 34 = @cil_ldc_r4
+| 35 = @cil_ldc_r8
+| 37 = @cil_dup
+| 38 = @cil_pop
+| 39 = @cil_jmp
+| 40 = @cil_call
+| 41 = @cil_calli
+| 42 = @cil_ret
+| 43 = @cil_br_s
+| 44 = @cil_brfalse_s
+| 45 = @cil_brtrue_s
+| 46 = @cil_beq_s
+| 47 = @cil_bge_s
+| 48 = @cil_bgt_s
+| 49 = @cil_ble_s
+| 50 = @cil_blt_s
+| 51 = @cil_bne_un_s
+| 52 = @cil_bge_un_s
+| 53 = @cil_bgt_un_s
+| 54 = @cil_ble_un_s
+| 55 = @cil_blt_un_s
+| 56 = @cil_br
+| 57 = @cil_brfalse
+| 58 = @cil_brtrue
+| 59 = @cil_beq
+| 60 = @cil_bge
+| 61 = @cil_bgt
+| 62 = @cil_ble
+| 63 = @cil_blt
+| 64 = @cil_bne_un
+| 65 = @cil_bge_un
+| 66 = @cil_bgt_un
+| 67 = @cil_ble_un
+| 68 = @cil_blt_un
+| 69 = @cil_switch
+| 70 = @cil_ldind_i1
+| 71 = @cil_ldind_u1
+| 72 = @cil_ldind_i2
+| 73 = @cil_ldind_u2
+| 74 = @cil_ldind_i4
+| 75 = @cil_ldind_u4
+| 76 = @cil_ldind_i8
+| 77 = @cil_ldind_i
+| 78 = @cil_ldind_r4
+| 79 = @cil_ldind_r8
+| 80 = @cil_ldind_ref
+| 81 = @cil_stind_ref
+| 82 = @cil_stind_i1
+| 83 = @cil_stind_i2
+| 84 = @cil_stind_i4
+| 85 = @cil_stind_i8
+| 86 = @cil_stind_r4
+| 87 = @cil_stind_r8
+| 88 = @cil_add
+| 89 = @cil_sub
+| 90 = @cil_mul
+| 91 = @cil_div
+| 92 = @cil_div_un
+| 93 = @cil_rem
+| 94 = @cil_rem_un
+| 95 = @cil_and
+| 96 = @cil_or
+| 97 = @cil_xor
+| 98 = @cil_shl
+| 99 = @cil_shr
+| 100 = @cil_shr_un
+| 101 = @cil_neg
+| 102 = @cil_not
+| 103 = @cil_conv_i1
+| 104 = @cil_conv_i2
+| 105 = @cil_conv_i4
+| 106 = @cil_conv_i8
+| 107 = @cil_conv_r4
+| 108 = @cil_conv_r8
+| 109 = @cil_conv_u4
+| 110 = @cil_conv_u8
+| 111 = @cil_callvirt
+| 112 = @cil_cpobj
+| 113 = @cil_ldobj
+| 114 = @cil_ldstr
+| 115 = @cil_newobj
+| 116 = @cil_castclass
+| 117 = @cil_isinst
+| 118 = @cil_conv_r_un
+| 121 = @cil_unbox
+| 122 = @cil_throw
+| 123 = @cil_ldfld
+| 124 = @cil_ldflda
+| 125 = @cil_stfld
+| 126 = @cil_ldsfld
+| 127 = @cil_ldsflda
+| 128 = @cil_stsfld
+| 129 = @cil_stobj
+| 130 = @cil_conv_ovf_i1_un
+| 131 = @cil_conv_ovf_i2_un
+| 132 = @cil_conv_ovf_i4_un
+| 133 = @cil_conv_ovf_i8_un
+| 134 = @cil_conv_ovf_u1_un
+| 135 = @cil_conv_ovf_u2_un
+| 136 = @cil_conv_ovf_u4_un
+| 137 = @cil_conv_ovf_u8_un
+| 138 = @cil_conv_ovf_i_un
+| 139 = @cil_conv_ovf_u_un
+| 140 = @cil_box
+| 141 = @cil_newarr
+| 142 = @cil_ldlen
+| 143 = @cil_ldelema
+| 144 = @cil_ldelem_i1
+| 145 = @cil_ldelem_u1
+| 146 = @cil_ldelem_i2
+| 147 = @cil_ldelem_u2
+| 148 = @cil_ldelem_i4
+| 149 = @cil_ldelem_u4
+| 150 = @cil_ldelem_i8
+| 151 = @cil_ldelem_i
+| 152 = @cil_ldelem_r4
+| 153 = @cil_ldelem_r8
+| 154 = @cil_ldelem_ref
+| 155 = @cil_stelem_i
+| 156 = @cil_stelem_i1
+| 157 = @cil_stelem_i2
+| 158 = @cil_stelem_i4
+| 159 = @cil_stelem_i8
+| 160 = @cil_stelem_r4
+| 161 = @cil_stelem_r8
+| 162 = @cil_stelem_ref
+| 163 = @cil_ldelem
+| 164 = @cil_stelem
+| 165 = @cil_unbox_any
+| 179 = @cil_conv_ovf_i1
+| 180 = @cil_conv_ovf_u1
+| 181 = @cil_conv_ovf_i2
+| 182 = @cil_conv_ovf_u2
+| 183 = @cil_conv_ovf_i4
+| 184 = @cil_conv_ovf_u4
+| 185 = @cil_conv_ovf_i8
+| 186 = @cil_conv_ovf_u8
+| 194 = @cil_refanyval
+| 195 = @cil_ckinfinite
+| 198 = @cil_mkrefany
+| 208 = @cil_ldtoken
+| 209 = @cil_conv_u2
+| 210 = @cil_conv_u1
+| 211 = @cil_conv_i
+| 212 = @cil_conv_ovf_i
+| 213 = @cil_conv_ovf_u
+| 214 = @cil_add_ovf
+| 215 = @cil_add_ovf_un
+| 216 = @cil_mul_ovf
+| 217 = @cil_mul_ovf_un
+| 218 = @cil_sub_ovf
+| 219 = @cil_sub_ovf_un
+| 220 = @cil_endfinally
+| 221 = @cil_leave
+| 222 = @cil_leave_s
+| 223 = @cil_stind_i
+| 224 = @cil_conv_u
+| 65024 = @cil_arglist
+| 65025 = @cil_ceq
+| 65026 = @cil_cgt
+| 65027 = @cil_cgt_un
+| 65028 = @cil_clt
+| 65029 = @cil_clt_un
+| 65030 = @cil_ldftn
+| 65031 = @cil_ldvirtftn
+| 65033 = @cil_ldarg
+| 65034 = @cil_ldarga
+| 65035 = @cil_starg
+| 65036 = @cil_ldloc
+| 65037 = @cil_ldloca
+| 65038 = @cil_stloc
+| 65039 = @cil_localloc
+| 65041 = @cil_endfilter
+| 65042 = @cil_unaligned
+| 65043 = @cil_volatile
+| 65044 = @cil_tail
+| 65045 = @cil_initobj
+| 65046 = @cil_constrained
+| 65047 = @cil_cpblk
+| 65048 = @cil_initblk
+| 65050 = @cil_rethrow
+| 65052 = @cil_sizeof
+| 65053 = @cil_refanytype
+| 65054 = @cil_readonly
+;
+
+// CIL ignored instructions
+
+@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned;
+
+// CIL local/parameter/field access
+
+@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga;
+@cil_starg_any = @cil_starg | @cil_starg_s;
+
+@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca;
+@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc;
+
+@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda;
+@cil_stfld_any = @cil_stfld | @cil_stsfld;
+
+@cil_local_access = @cil_stloc_any | @cil_ldloc_any;
+@cil_arg_access = @cil_starg_any | @cil_ldarg_any;
+@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any;
+@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any;
+
+@cil_stack_access = @cil_local_access | @cil_arg_access;
+@cil_field_access = @cil_ldfld_any | @cil_stfld_any;
+
+@cil_access = @cil_read_access | @cil_write_access;
+
+// CIL constant/literal instructions
+
+@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8;
+
+@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 |
+ @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4;
+
+@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8;
+
+@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr;
+
+// Control flow
+
+@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump;
+@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s |
+ @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s |
+ @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt |
+ @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un;
+@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch;
+@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any;
+@cil_leave_any = @cil_leave | @cil_leave_s;
+@cil_jump = @cil_unconditional_jump | @cil_conditional_jump;
+
+// CIL call instructions
+
+@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj;
+
+// CIL expression instructions
+
+@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access |
+ @cil_newarr | @cil_ldtoken | @cil_sizeof |
+ @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup;
+
+@cil_unary_expr =
+ @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation|
+ @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any |
+ @cil_ldind | @cil_unbox;
+
+@cil_conversion_operation =
+ @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 |
+ @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 |
+ @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un |
+ @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un |
+ @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un |
+ @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un |
+ @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_i | @cil_conv_u | @cil_conv_r_un;
+
+@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 |
+ @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4;
+
+@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 |
+ @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref;
+
+@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation;
+
+@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl;
+
+@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un |
+ @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un |
+ @cil_sub_ovf | @cil_sub_ovf_un;
+
+@cil_unary_bitwise_operation = @cil_not;
+
+@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation;
+
+@cil_unary_arithmetic_operation = @cil_neg;
+
+@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un;
+
+// Elements that retrieve an address of something
+@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema;
+
+// CIL array instructions
+
+@cil_read_array =
+ @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i |
+ @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 |
+ @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4;
+
+@cil_write_array = @cil_stelem | @cil_stelem_ref |
+ @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 |
+ @cil_stelem_r4 | @cil_stelem_r8;
+
+@cil_throw_any = @cil_throw | @cil_rethrow;
+
+#keyset[impl, index]
+cil_instruction(
+ unique int id: @cil_instruction,
+ int opcode: int ref,
+ int index: int ref,
+ int impl: @cil_method_implementation ref);
+
+cil_jump(
+ unique int instruction: @cil_jump ref,
+ int target: @cil_instruction ref);
+
+cil_access(
+ unique int instruction: @cil_instruction ref,
+ int target: @cil_accessible ref);
+
+cil_value(
+ unique int instruction: @cil_literal ref,
+ string value: string ref);
+
+#keyset[instruction, index]
+cil_switch(
+ int instruction: @cil_switch ref,
+ int index: int ref,
+ int target: @cil_instruction ref);
+
+cil_instruction_location(
+ unique int id: @cil_instruction ref,
+ int loc: @location ref);
+
+cil_type_location(
+ int id: @cil_type ref,
+ int loc: @location ref);
+
+cil_method_location(
+ int id: @cil_method ref,
+ int loc: @location ref);
+
+@cil_namespace = @namespace;
+
+@cil_type_container = @cil_type | @cil_namespace | @cil_method;
+
+case @cil_type.kind of
+ 0 = @cil_valueorreftype
+| 1 = @cil_typeparameter
+| 2 = @cil_array_type
+| 3 = @cil_pointer_type
+| 4 = @cil_function_pointer_type
+;
+
+cil_type(
+ unique int id: @cil_type,
+ string name: string ref,
+ int kind: int ref,
+ int parent: @cil_type_container ref,
+ int sourceDecl: @cil_type ref);
+
+cil_pointer_type(
+ unique int id: @cil_pointer_type ref,
+ int pointee: @cil_type ref);
+
+cil_array_type(
+ unique int id: @cil_array_type ref,
+ int element_type: @cil_type ref,
+ int rank: int ref);
+
+cil_function_pointer_return_type(
+ unique int id: @cil_function_pointer_type ref,
+ int return_type: @cil_type ref);
+
+cil_method(
+ unique int id: @cil_method,
+ string name: string ref,
+ int parent: @cil_type ref,
+ int return_type: @cil_type ref);
+
+cil_method_source_declaration(
+ unique int method: @cil_method ref,
+ int source: @cil_method ref);
+
+cil_method_implementation(
+ unique int id: @cil_method_implementation,
+ int method: @cil_method ref,
+ int location: @assembly ref);
+
+cil_implements(
+ int id: @cil_method ref,
+ int decl: @cil_method ref);
+
+#keyset[parent, name]
+cil_field(
+ unique int id: @cil_field,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int field_type: @cil_type ref);
+
+@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace;
+@cil_named_element = @cil_declaration | @cil_namespace;
+@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member;
+@cil_accessible = @cil_declaration;
+@cil_variable = @cil_field | @cil_stack_variable;
+@cil_stack_variable = @cil_local_variable | @cil_parameter;
+@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event;
+@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type;
+@cil_parameterizable = @cil_method | @cil_function_pointer_type;
+@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type;
+
+#keyset[parameterizable, index]
+cil_parameter(
+ unique int id: @cil_parameter,
+ int parameterizable: @cil_parameterizable ref,
+ int index: int ref,
+ int param_type: @cil_type ref);
+
+cil_parameter_in(unique int id: @cil_parameter ref);
+cil_parameter_out(unique int id: @cil_parameter ref);
+
+cil_setter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+#keyset[id, modifier]
+cil_custom_modifiers(
+ int id: @cil_custom_modifier_receiver ref,
+ int modifier: @cil_type ref,
+ int kind: int ref); // modreq: 1, modopt: 0
+
+cil_type_annotation(
+ int id: @cil_has_type_annotation ref,
+ int annotation: int ref);
+
+cil_getter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+cil_adder(unique int event: @cil_event ref,
+ int method: @cil_method ref);
+
+cil_remover(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_property(
+ unique int id: @cil_property,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int property_type: @cil_type ref);
+
+#keyset[parent, name]
+cil_event(unique int id: @cil_event,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int event_type: @cil_type ref);
+
+#keyset[impl, index]
+cil_local_variable(
+ unique int id: @cil_local_variable,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int var_type: @cil_type ref);
+
+cil_function_pointer_calling_conventions(
+ int id: @cil_function_pointer_type ref,
+ int kind: int ref);
+
+// CIL handlers (exception handlers etc).
+
+case @cil_handler.kind of
+ 0 = @cil_catch_handler
+| 1 = @cil_filter_handler
+| 2 = @cil_finally_handler
+| 4 = @cil_fault_handler
+;
+
+#keyset[impl, index]
+cil_handler(
+ unique int id: @cil_handler,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int kind: int ref,
+ int try_start: @cil_instruction ref,
+ int try_end: @cil_instruction ref,
+ int handler_start: @cil_instruction ref);
+
+cil_handler_filter(
+ unique int id: @cil_handler ref,
+ int filter_start: @cil_instruction ref);
+
+cil_handler_type(
+ unique int id: @cil_handler ref,
+ int catch_type: @cil_type ref);
+
+@cil_controlflow_node = @cil_entry_point | @cil_instruction;
+
+@cil_entry_point = @cil_method_implementation | @cil_handler;
+
+@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method;
+
+cil_method_stack_size(
+ unique int method: @cil_method_implementation ref,
+ int size: int ref);
+
+// CIL modifiers
+
+cil_public(int id: @cil_member ref);
+cil_private(int id: @cil_member ref);
+cil_protected(int id: @cil_member ref);
+cil_internal(int id: @cil_member ref);
+cil_static(int id: @cil_member ref);
+cil_sealed(int id: @cil_member ref);
+cil_virtual(int id: @cil_method ref);
+cil_abstract(int id: @cil_member ref);
+cil_class(int id: @cil_type ref);
+cil_interface(int id: @cil_type ref);
+cil_security(int id: @cil_member ref);
+cil_requiresecobject(int id: @cil_method ref);
+cil_specialname(int id: @cil_method ref);
+cil_newslot(int id: @cil_method ref);
+
+cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref);
+cil_base_interface(int id: @cil_type ref, int base: @cil_type ref);
+cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref);
+
+#keyset[unbound, index]
+cil_type_parameter(
+ int unbound: @cil_member ref,
+ int index: int ref,
+ int param: @cil_typeparameter ref);
+
+#keyset[bound, index]
+cil_type_argument(
+ int bound: @cil_member ref,
+ int index: int ref,
+ int t: @cil_type ref);
+
+// CIL type parameter constraints
+
+cil_typeparam_covariant(int tp: @cil_typeparameter ref);
+cil_typeparam_contravariant(int tp: @cil_typeparameter ref);
+cil_typeparam_class(int tp: @cil_typeparameter ref);
+cil_typeparam_struct(int tp: @cil_typeparameter ref);
+cil_typeparam_new(int tp: @cil_typeparameter ref);
+cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref);
+
+// CIL attributes
+
+cil_attribute(
+ unique int attributeid: @cil_attribute,
+ int element: @cil_declaration ref,
+ int constructor: @cil_method ref);
+
+#keyset[attribute_id, param]
+cil_attribute_named_argument(
+ int attribute_id: @cil_attribute ref,
+ string param: string ref,
+ string value: string ref);
+
+#keyset[attribute_id, index]
+cil_attribute_positional_argument(
+ int attribute_id: @cil_attribute ref,
+ int index: int ref,
+ string value: string ref);
+
+
+// Common .Net data model covering both C# and CIL
+
+// Common elements
+@dotnet_element = @element | @cil_element;
+@dotnet_named_element = @named_element | @cil_named_element;
+@dotnet_callable = @callable | @cil_method;
+@dotnet_variable = @variable | @cil_variable;
+@dotnet_field = @field | @cil_field;
+@dotnet_parameter = @parameter | @cil_parameter;
+@dotnet_declaration = @declaration | @cil_declaration;
+@dotnet_member = @member | @cil_member;
+@dotnet_event = @event | @cil_event;
+@dotnet_property = @property | @cil_property | @indexer;
+@dotnet_parameterizable = @parameterizable | @cil_parameterizable;
+
+// Common types
+@dotnet_type = @type | @cil_type;
+@dotnet_call = @call | @cil_call_any;
+@dotnet_throw = @throw_element | @cil_throw_any;
+@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type;
+@dotnet_typeparameter = @type_parameter | @cil_typeparameter;
+@dotnet_array_type = @array_type | @cil_array_type;
+@dotnet_pointer_type = @pointer_type | @cil_pointer_type;
+@dotnet_type_parameter = @type_parameter | @cil_typeparameter;
+@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable;
+
+// Attributes
+@dotnet_attribute = @attribute | @cil_attribute;
+
+// Expressions
+@dotnet_expr = @expr | @cil_expr;
+
+// Literals
+@dotnet_literal = @literal_expr | @cil_literal;
+@dotnet_string_literal = @string_literal_expr | @cil_ldstr;
+@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i;
+@dotnet_float_literal = @float_literal_expr | @cil_ldc_r;
+@dotnet_null_literal = @null_literal_expr | @cil_ldnull;
+
+@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property |
+ @callable | @value_or_ref_type | @void_type;
+
+#keyset[entity, location]
+metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref)
diff --git a/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/semmlecode.csharp.dbscheme
new file mode 100644
index 00000000000..d0fba103f7d
--- /dev/null
+++ b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/semmlecode.csharp.dbscheme
@@ -0,0 +1,2069 @@
+/* This is a dummy line to alter the dbscheme, so we can make a database upgrade
+ * without actually changing any of the dbscheme predicates. It contains a date
+ * to allow for such updates in the future as well.
+ *
+ * 2021-07-14
+ *
+ * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a
+ * previously seen state (matching a previously seen SHA), which would make the upgrade
+ * mechanism not work properly.
+ */
+
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ unique int id : @compilation,
+ string cwd : string ref
+);
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | --compiler
+ * 1 | *path to compiler*
+ * 2 | f1.cs
+ * 3 | f2.cs
+ * 4 | f3.cs
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | f1.cs
+ * 1 | f2.cs
+ * 2 | f3.cs
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The references used by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | ref1.dll
+ * 1 | ref2.dll
+ * 2 | ref3.dll
+ */
+#keyset[id, num]
+compilation_referencing_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+extractor_messages(
+ unique int id: @extractor_message,
+ int severity: int ref,
+ string origin : string ref,
+ string text : string ref,
+ string entity : string ref,
+ int location: @location_default ref,
+ string stack_trace : string ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+compilation_assembly(
+ unique int id : @compilation ref,
+ int assembly: @assembly ref
+)
+
+// Populated by the CSV extractor
+externalData(
+ int id: @externalDataElement,
+ string path: string ref,
+ int column: int ref,
+ string value: string ref);
+
+sourceLocationPrefix(
+ string prefix: string ref);
+
+/*
+ * C# dbscheme
+ */
+
+/** ELEMENTS **/
+
+@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration
+ | @using_directive | @type_parameter_constraints | @externalDataElement
+ | @xmllocatable | @asp_element | @namespace | @preprocessor_directive;
+
+@declaration = @callable | @generic | @assignable | @namespace;
+
+@named_element = @namespace | @declaration;
+
+@declaration_with_accessors = @property | @indexer | @event;
+
+@assignable = @variable | @assignable_with_accessors | @event;
+
+@assignable_with_accessors = @property | @indexer;
+
+@attributable = @assembly | @field | @parameter | @operator | @method | @constructor
+ | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors
+ | @local_function | @lambda_expr;
+
+/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/
+
+@location = @location_default | @assembly;
+
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+locations_mapped(
+ unique int id: @location_default ref,
+ int mapped_to: @location_default ref);
+
+@sourceline = @file | @callable | @xmllocatable;
+
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref);
+
+assemblies(
+ unique int id: @assembly,
+ int file: @file ref,
+ string fullname: string ref,
+ string name: string ref,
+ string version: string ref);
+
+files(
+ unique int id: @file,
+ string name: string ref);
+
+folders(
+ unique int id: @folder,
+ string name: string ref);
+
+@container = @folder | @file ;
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref);
+
+file_extraction_mode(
+ unique int file: @file ref,
+ int mode: int ref
+ /* 0 = normal, 1 = standalone extractor */
+ );
+
+/** NAMESPACES **/
+
+@type_container = @namespace | @type;
+
+namespaces(
+ unique int id: @namespace,
+ string name: string ref);
+
+namespace_declarations(
+ unique int id: @namespace_declaration,
+ int namespace_id: @namespace ref);
+
+namespace_declaration_location(
+ unique int id: @namespace_declaration ref,
+ int loc: @location ref);
+
+parent_namespace(
+ unique int child_id: @type_container ref,
+ int namespace_id: @namespace ref);
+
+@declaration_or_directive = @namespace_declaration | @type | @using_directive;
+
+parent_namespace_declaration(
+ int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes
+ int namespace_id: @namespace_declaration ref);
+
+@using_directive = @using_namespace_directive | @using_static_directive;
+
+using_global(
+ unique int id: @using_directive ref
+);
+
+using_namespace_directives(
+ unique int id: @using_namespace_directive,
+ int namespace_id: @namespace ref);
+
+using_static_directives(
+ unique int id: @using_static_directive,
+ int type_id: @type_or_ref ref);
+
+using_directive_location(
+ unique int id: @using_directive ref,
+ int loc: @location ref);
+
+@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning
+ | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if
+ | @directive_elif | @directive_else | @directive_endif;
+
+@conditional_directive = @directive_if | @directive_elif;
+@branch_directive = @directive_if | @directive_elif | @directive_else;
+
+directive_ifs(
+ unique int id: @directive_if,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref); /* 0: false, 1: true */
+
+directive_elifs(
+ unique int id: @directive_elif,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int conditionValue: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+directive_elses(
+ unique int id: @directive_else,
+ int branchTaken: int ref, /* 0: false, 1: true */
+ int parent: @directive_if ref,
+ int index: int ref);
+
+#keyset[id, start]
+directive_endifs(
+ unique int id: @directive_endif,
+ unique int start: @directive_if ref);
+
+directive_define_symbols(
+ unique int id: @define_symbol_expr ref,
+ string name: string ref);
+
+directive_regions(
+ unique int id: @directive_region,
+ string name: string ref);
+
+#keyset[id, start]
+directive_endregions(
+ unique int id: @directive_endregion,
+ unique int start: @directive_region ref);
+
+directive_lines(
+ unique int id: @directive_line,
+ int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */
+
+directive_line_value(
+ unique int id: @directive_line ref,
+ int line: int ref);
+
+directive_line_file(
+ unique int id: @directive_line ref,
+ int file: @file ref);
+
+directive_line_offset(
+ unique int id: @directive_line ref,
+ int offset: int ref);
+
+directive_line_span(
+ unique int id: @directive_line ref,
+ int startLine: int ref,
+ int startColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref);
+
+directive_nullables(
+ unique int id: @directive_nullable,
+ int setting: int ref, /* 0: disable, 1: enable, 2: restore */
+ int target: int ref); /* 0: none, 1: annotations, 2: warnings */
+
+directive_warnings(
+ unique int id: @directive_warning,
+ string message: string ref);
+
+directive_errors(
+ unique int id: @directive_error,
+ string message: string ref);
+
+directive_undefines(
+ unique int id: @directive_undefine,
+ string name: string ref);
+
+directive_defines(
+ unique int id: @directive_define,
+ string name: string ref);
+
+pragma_checksums(
+ unique int id: @pragma_checksum,
+ int file: @file ref,
+ string guid: string ref,
+ string bytes: string ref);
+
+pragma_warnings(
+ unique int id: @pragma_warning,
+ int kind: int ref /* 0 = disable, 1 = restore */);
+
+#keyset[id, index]
+pragma_warning_error_codes(
+ int id: @pragma_warning ref,
+ string errorCode: string ref,
+ int index: int ref);
+
+preprocessor_directive_location(
+ unique int id: @preprocessor_directive ref,
+ int loc: @location ref);
+
+preprocessor_directive_compilation(
+ unique int id: @preprocessor_directive ref,
+ int compilation: @compilation ref);
+
+preprocessor_directive_active(
+ unique int id: @preprocessor_directive ref,
+ int active: int ref); /* 0: false, 1: true */
+
+/** TYPES **/
+
+types(
+ unique int id: @type,
+ int kind: int ref,
+ string name: string ref);
+
+case @type.kind of
+ 1 = @bool_type
+| 2 = @char_type
+| 3 = @decimal_type
+| 4 = @sbyte_type
+| 5 = @short_type
+| 6 = @int_type
+| 7 = @long_type
+| 8 = @byte_type
+| 9 = @ushort_type
+| 10 = @uint_type
+| 11 = @ulong_type
+| 12 = @float_type
+| 13 = @double_type
+| 14 = @enum_type
+| 15 = @struct_type
+| 17 = @class_type
+| 19 = @interface_type
+| 20 = @delegate_type
+| 21 = @null_type
+| 22 = @type_parameter
+| 23 = @pointer_type
+| 24 = @nullable_type
+| 25 = @array_type
+| 26 = @void_type
+| 27 = @int_ptr_type
+| 28 = @uint_ptr_type
+| 29 = @dynamic_type
+| 30 = @arglist_type
+| 31 = @unknown_type
+| 32 = @tuple_type
+| 33 = @function_pointer_type
+ ;
+
+@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type;
+@integral_type = @signed_integral_type | @unsigned_integral_type;
+@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type;
+@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type;
+@floating_point_type = @float_type | @double_type;
+@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type
+ | @uint_ptr_type | @tuple_type;
+@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type
+ | @dynamic_type;
+@value_or_ref_type = @value_type | @ref_type;
+
+typerefs(
+ unique int id: @typeref,
+ string name: string ref);
+
+typeref_type(
+ int id: @typeref ref,
+ unique int typeId: @type ref);
+
+@type_or_ref = @type | @typeref;
+
+array_element_type(
+ unique int array: @array_type ref,
+ int dimension: int ref,
+ int rank: int ref,
+ int element: @type_or_ref ref);
+
+nullable_underlying_type(
+ unique int nullable: @nullable_type ref,
+ int underlying: @type_or_ref ref);
+
+pointer_referent_type(
+ unique int pointer: @pointer_type ref,
+ int referent: @type_or_ref ref);
+
+enum_underlying_type(
+ unique int enum_id: @enum_type ref,
+ int underlying_type_id: @type_or_ref ref);
+
+delegate_return_type(
+ unique int delegate_id: @delegate_type ref,
+ int return_type_id: @type_or_ref ref);
+
+function_pointer_return_type(
+ unique int function_pointer_id: @function_pointer_type ref,
+ int return_type_id: @type_or_ref ref);
+
+extend(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+anonymous_types(
+ unique int id: @type ref);
+
+@interface_or_ref = @interface_type | @typeref;
+
+implement(
+ int sub: @type ref,
+ int super: @type_or_ref ref);
+
+type_location(
+ int id: @type ref,
+ int loc: @location ref);
+
+tuple_underlying_type(
+ unique int tuple: @tuple_type ref,
+ int struct: @type_or_ref ref);
+
+#keyset[tuple, index]
+tuple_element(
+ int tuple: @tuple_type ref,
+ int index: int ref,
+ unique int field: @field ref);
+
+attributes(
+ unique int id: @attribute,
+ int kind: int ref,
+ int type_id: @type_or_ref ref,
+ int target: @attributable ref);
+
+case @attribute.kind of
+ 0 = @attribute_default
+| 1 = @attribute_return
+| 2 = @attribute_assembly
+| 3 = @attribute_module
+;
+
+attribute_location(
+ int id: @attribute ref,
+ int loc: @location ref);
+
+@type_mention_parent = @element | @type_mention;
+
+type_mention(
+ unique int id: @type_mention,
+ int type_id: @type_or_ref ref,
+ int parent: @type_mention_parent ref);
+
+type_mention_location(
+ unique int id: @type_mention ref,
+ int loc: @location ref);
+
+@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type;
+
+/**
+ * A direct annotation on an entity, for example `string? x;`.
+ *
+ * Annotations:
+ * 2 = reftype is not annotated "!"
+ * 3 = reftype is annotated "?"
+ * 4 = readonly ref type / in parameter
+ * 5 = ref type parameter, return or local variable
+ * 6 = out parameter
+ *
+ * Note that the annotation depends on the element it annotates.
+ * @assignable: The annotation is on the type of the assignable, for example the variable type.
+ * @type_parameter: The annotation is on the reftype constraint
+ * @callable: The annotation is on the return type
+ * @array_type: The annotation is on the element type
+ */
+type_annotation(int id: @has_type_annotation ref, int annotation: int ref);
+
+nullability(unique int nullability: @nullability, int kind: int ref);
+
+case @nullability.kind of
+ 0 = @oblivious
+| 1 = @not_annotated
+| 2 = @annotated
+;
+
+#keyset[parent, index]
+nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref)
+
+type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref);
+
+/**
+ * The nullable flow state of an expression, as determined by Roslyn.
+ * 0 = none (default, not populated)
+ * 1 = not null
+ * 2 = maybe null
+ */
+expr_flowstate(unique int id: @expr ref, int state: int ref);
+
+/** GENERICS **/
+
+@generic = @type | @method | @local_function;
+
+type_parameters(
+ unique int id: @type_parameter ref,
+ int index: int ref,
+ int generic_id: @generic ref,
+ int variance: int ref /* none = 0, out = 1, in = 2 */);
+
+#keyset[constructed_id, index]
+type_arguments(
+ int id: @type_or_ref ref,
+ int index: int ref,
+ int constructed_id: @generic_or_ref ref);
+
+@generic_or_ref = @generic | @typeref;
+
+constructed_generic(
+ unique int constructed: @generic ref,
+ int generic: @generic_or_ref ref);
+
+type_parameter_constraints(
+ unique int id: @type_parameter_constraints,
+ int param_id: @type_parameter ref);
+
+type_parameter_constraints_location(
+ int id: @type_parameter_constraints ref,
+ int loc: @location ref);
+
+general_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int kind: int ref /* class = 1, struct = 2, new = 3 */);
+
+specific_type_parameter_constraints(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref);
+
+specific_type_parameter_nullability(
+ int id: @type_parameter_constraints ref,
+ int base_id: @type_or_ref ref,
+ int nullability: @nullability ref);
+
+/** FUNCTION POINTERS */
+
+function_pointer_calling_conventions(
+ int id: @function_pointer_type ref,
+ int kind: int ref);
+
+#keyset[id, index]
+has_unmanaged_calling_conventions(
+ int id: @function_pointer_type ref,
+ int index: int ref,
+ int conv_id: @type_or_ref ref);
+
+/** MODIFIERS */
+
+@modifiable = @modifiable_direct | @event_accessor;
+
+@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr;
+
+modifiers(
+ unique int id: @modifier,
+ string name: string ref);
+
+has_modifiers(
+ int id: @modifiable_direct ref,
+ int mod_id: @modifier ref);
+
+compiler_generated(unique int id: @modifiable ref);
+
+/** MEMBERS **/
+
+@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type;
+
+@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr;
+
+@virtualizable = @method | @property | @indexer | @event;
+
+exprorstmt_name(
+ unique int parent_id: @named_exprorstmt ref,
+ string name: string ref);
+
+nested_types(
+ unique int id: @type ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @type ref);
+
+properties(
+ unique int id: @property,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @property ref);
+
+property_location(
+ int id: @property ref,
+ int loc: @location ref);
+
+indexers(
+ unique int id: @indexer,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @indexer ref);
+
+indexer_location(
+ int id: @indexer ref,
+ int loc: @location ref);
+
+accessors(
+ unique int id: @accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_member_id: @member ref,
+ int unbound_id: @accessor ref);
+
+case @accessor.kind of
+ 1 = @getter
+| 2 = @setter
+ ;
+
+init_only_accessors(
+ unique int id: @accessor ref);
+
+accessor_location(
+ int id: @accessor ref,
+ int loc: @location ref);
+
+events(
+ unique int id: @event,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @event ref);
+
+event_location(
+ int id: @event ref,
+ int loc: @location ref);
+
+event_accessors(
+ unique int id: @event_accessor,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_event_id: @event ref,
+ int unbound_id: @event_accessor ref);
+
+case @event_accessor.kind of
+ 1 = @add_event_accessor
+| 2 = @remove_event_accessor
+ ;
+
+event_accessor_location(
+ int id: @event_accessor ref,
+ int loc: @location ref);
+
+operators(
+ unique int id: @operator,
+ string name: string ref,
+ string symbol: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @operator ref);
+
+operator_location(
+ int id: @operator ref,
+ int loc: @location ref);
+
+constant_value(
+ int id: @variable ref,
+ string value: string ref);
+
+/** CALLABLES **/
+
+@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function;
+
+@callable_accessor = @accessor | @event_accessor;
+
+methods(
+ unique int id: @method,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @method ref);
+
+method_location(
+ int id: @method ref,
+ int loc: @location ref);
+
+constructors(
+ unique int id: @constructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @constructor ref);
+
+constructor_location(
+ int id: @constructor ref,
+ int loc: @location ref);
+
+destructors(
+ unique int id: @destructor,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int unbound_id: @destructor ref);
+
+destructor_location(
+ int id: @destructor ref,
+ int loc: @location ref);
+
+overrides(
+ int id: @callable ref,
+ int base_id: @callable ref);
+
+explicitly_implements(
+ int id: @member ref,
+ int interface_id: @interface_or_ref ref);
+
+local_functions(
+ unique int id: @local_function,
+ string name: string ref,
+ int return_type: @type ref,
+ int unbound_id: @local_function ref);
+
+local_function_stmts(
+ unique int fn: @local_function_stmt ref,
+ int stmt: @local_function ref);
+
+/** VARIABLES **/
+
+@variable = @local_scope_variable | @field;
+
+@local_scope_variable = @local_variable | @parameter;
+
+fields(
+ unique int id: @field,
+ int kind: int ref,
+ string name: string ref,
+ int declaring_type_id: @type ref,
+ int type_id: @type_or_ref ref,
+ int unbound_id: @field ref);
+
+case @field.kind of
+ 1 = @addressable_field
+| 2 = @constant
+ ;
+
+field_location(
+ int id: @field ref,
+ int loc: @location ref);
+
+localvars(
+ unique int id: @local_variable,
+ int kind: int ref,
+ string name: string ref,
+ int implicitly_typed: int ref /* 0 = no, 1 = yes */,
+ int type_id: @type_or_ref ref,
+ int parent_id: @local_var_decl_expr ref);
+
+case @local_variable.kind of
+ 1 = @addressable_local_variable
+| 2 = @local_constant
+| 3 = @local_variable_ref
+ ;
+
+localvar_location(
+ unique int id: @local_variable ref,
+ int loc: @location ref);
+
+@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type;
+
+#keyset[name, parent_id]
+#keyset[index, parent_id]
+params(
+ unique int id: @parameter,
+ string name: string ref,
+ int type_id: @type_or_ref ref,
+ int index: int ref,
+ int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */
+ int parent_id: @parameterizable ref,
+ int unbound_id: @parameter ref);
+
+param_location(
+ int id: @parameter ref,
+ int loc: @location ref);
+
+/** STATEMENTS **/
+
+@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent;
+
+statements(
+ unique int id: @stmt,
+ int kind: int ref);
+
+#keyset[index, parent]
+stmt_parent(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_stmt_parent = @callable;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+stmt_parent_top_level(
+ unique int stmt: @stmt ref,
+ int index: int ref,
+ int parent: @top_level_stmt_parent ref);
+
+case @stmt.kind of
+ 1 = @block_stmt
+| 2 = @expr_stmt
+| 3 = @if_stmt
+| 4 = @switch_stmt
+| 5 = @while_stmt
+| 6 = @do_stmt
+| 7 = @for_stmt
+| 8 = @foreach_stmt
+| 9 = @break_stmt
+| 10 = @continue_stmt
+| 11 = @goto_stmt
+| 12 = @goto_case_stmt
+| 13 = @goto_default_stmt
+| 14 = @throw_stmt
+| 15 = @return_stmt
+| 16 = @yield_stmt
+| 17 = @try_stmt
+| 18 = @checked_stmt
+| 19 = @unchecked_stmt
+| 20 = @lock_stmt
+| 21 = @using_block_stmt
+| 22 = @var_decl_stmt
+| 23 = @const_decl_stmt
+| 24 = @empty_stmt
+| 25 = @unsafe_stmt
+| 26 = @fixed_stmt
+| 27 = @label_stmt
+| 28 = @catch
+| 29 = @case_stmt
+| 30 = @local_function_stmt
+| 31 = @using_decl_stmt
+ ;
+
+@using_stmt = @using_block_stmt | @using_decl_stmt;
+
+@labeled_stmt = @label_stmt | @case;
+
+@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt;
+
+@cond_stmt = @if_stmt | @switch_stmt;
+
+@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt;
+
+@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt
+ | @yield_stmt;
+
+@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt;
+
+
+stmt_location(
+ unique int id: @stmt ref,
+ int loc: @location ref);
+
+catch_type(
+ unique int catch_id: @catch ref,
+ int type_id: @type_or_ref ref,
+ int kind: int ref /* explicit = 1, implicit = 2 */);
+
+foreach_stmt_info(
+ unique int id: @foreach_stmt ref,
+ int kind: int ref /* non-async = 1, async = 2 */);
+
+@foreach_symbol = @method | @property | @type_or_ref;
+
+#keyset[id, kind]
+foreach_stmt_desugar(
+ int id: @foreach_stmt ref,
+ int symbol: @foreach_symbol ref,
+ int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */);
+
+/** EXPRESSIONS **/
+
+expressions(
+ unique int id: @expr,
+ int kind: int ref,
+ int type_id: @type_or_ref ref);
+
+#keyset[index, parent]
+expr_parent(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @control_flow_element ref);
+
+@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif;
+
+@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent;
+
+// [index, parent] is not a keyset because the same parent may be compiled multiple times
+expr_parent_top_level(
+ unique int expr: @expr ref,
+ int index: int ref,
+ int parent: @top_level_exprorstmt_parent ref);
+
+case @expr.kind of
+/* literal */
+ 1 = @bool_literal_expr
+| 2 = @char_literal_expr
+| 3 = @decimal_literal_expr
+| 4 = @int_literal_expr
+| 5 = @long_literal_expr
+| 6 = @uint_literal_expr
+| 7 = @ulong_literal_expr
+| 8 = @float_literal_expr
+| 9 = @double_literal_expr
+| 10 = @string_literal_expr
+| 11 = @null_literal_expr
+/* primary & unary */
+| 12 = @this_access_expr
+| 13 = @base_access_expr
+| 14 = @local_variable_access_expr
+| 15 = @parameter_access_expr
+| 16 = @field_access_expr
+| 17 = @property_access_expr
+| 18 = @method_access_expr
+| 19 = @event_access_expr
+| 20 = @indexer_access_expr
+| 21 = @array_access_expr
+| 22 = @type_access_expr
+| 23 = @typeof_expr
+| 24 = @method_invocation_expr
+| 25 = @delegate_invocation_expr
+| 26 = @operator_invocation_expr
+| 27 = @cast_expr
+| 28 = @object_creation_expr
+| 29 = @explicit_delegate_creation_expr
+| 30 = @implicit_delegate_creation_expr
+| 31 = @array_creation_expr
+| 32 = @default_expr
+| 33 = @plus_expr
+| 34 = @minus_expr
+| 35 = @bit_not_expr
+| 36 = @log_not_expr
+| 37 = @post_incr_expr
+| 38 = @post_decr_expr
+| 39 = @pre_incr_expr
+| 40 = @pre_decr_expr
+/* multiplicative */
+| 41 = @mul_expr
+| 42 = @div_expr
+| 43 = @rem_expr
+/* additive */
+| 44 = @add_expr
+| 45 = @sub_expr
+/* shift */
+| 46 = @lshift_expr
+| 47 = @rshift_expr
+/* relational */
+| 48 = @lt_expr
+| 49 = @gt_expr
+| 50 = @le_expr
+| 51 = @ge_expr
+/* equality */
+| 52 = @eq_expr
+| 53 = @ne_expr
+/* logical */
+| 54 = @bit_and_expr
+| 55 = @bit_xor_expr
+| 56 = @bit_or_expr
+| 57 = @log_and_expr
+| 58 = @log_or_expr
+/* type testing */
+| 59 = @is_expr
+| 60 = @as_expr
+/* null coalescing */
+| 61 = @null_coalescing_expr
+/* conditional */
+| 62 = @conditional_expr
+/* assignment */
+| 63 = @simple_assign_expr
+| 64 = @assign_add_expr
+| 65 = @assign_sub_expr
+| 66 = @assign_mul_expr
+| 67 = @assign_div_expr
+| 68 = @assign_rem_expr
+| 69 = @assign_and_expr
+| 70 = @assign_xor_expr
+| 71 = @assign_or_expr
+| 72 = @assign_lshift_expr
+| 73 = @assign_rshift_expr
+/* more */
+| 74 = @object_init_expr
+| 75 = @collection_init_expr
+| 76 = @array_init_expr
+| 77 = @checked_expr
+| 78 = @unchecked_expr
+| 79 = @constructor_init_expr
+| 80 = @add_event_expr
+| 81 = @remove_event_expr
+| 82 = @par_expr
+| 83 = @local_var_decl_expr
+| 84 = @lambda_expr
+| 85 = @anonymous_method_expr
+| 86 = @namespace_expr
+/* dynamic */
+| 92 = @dynamic_element_access_expr
+| 93 = @dynamic_member_access_expr
+/* unsafe */
+| 100 = @pointer_indirection_expr
+| 101 = @address_of_expr
+| 102 = @sizeof_expr
+/* async */
+| 103 = @await_expr
+/* C# 6.0 */
+| 104 = @nameof_expr
+| 105 = @interpolated_string_expr
+| 106 = @unknown_expr
+/* C# 7.0 */
+| 107 = @throw_expr
+| 108 = @tuple_expr
+| 109 = @local_function_invocation_expr
+| 110 = @ref_expr
+| 111 = @discard_expr
+/* C# 8.0 */
+| 112 = @range_expr
+| 113 = @index_expr
+| 114 = @switch_expr
+| 115 = @recursive_pattern_expr
+| 116 = @property_pattern_expr
+| 117 = @positional_pattern_expr
+| 118 = @switch_case_expr
+| 119 = @assign_coalesce_expr
+| 120 = @suppress_nullable_warning_expr
+| 121 = @namespace_access_expr
+/* C# 9.0 */
+| 122 = @lt_pattern_expr
+| 123 = @gt_pattern_expr
+| 124 = @le_pattern_expr
+| 125 = @ge_pattern_expr
+| 126 = @not_pattern_expr
+| 127 = @and_pattern_expr
+| 128 = @or_pattern_expr
+| 129 = @function_pointer_invocation_expr
+| 130 = @with_expr
+/* C# 11.0 */
+| 131 = @list_pattern_expr
+| 132 = @slice_pattern_expr
+| 133 = @urshift_expr
+| 134 = @assign_urshift_expr
+/* Preprocessor */
+| 999 = @define_symbol_expr
+;
+
+@switch = @switch_stmt | @switch_expr;
+@case = @case_stmt | @switch_case_expr;
+@pattern_match = @case | @is_expr;
+@unary_pattern_expr = @not_pattern_expr;
+@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr;
+@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr;
+
+@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr;
+@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr;
+@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr
+ | @string_literal_expr | @null_literal_expr;
+
+@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr;
+@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr;
+@assign_event_expr = @add_event_expr | @remove_event_expr;
+
+@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
+ | @assign_rem_expr
+@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
+ | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr;
+
+@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr
+ | @method_access_expr | @type_access_expr | @dynamic_member_access_expr;
+@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr;
+@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr;
+
+@local_variable_access = @local_variable_access_expr | @local_var_decl_expr;
+@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access;
+@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr;
+
+@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr
+ | @event_access_expr | @dynamic_member_access_expr;
+
+@objectorcollection_init_expr = @object_init_expr | @collection_init_expr;
+
+@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr;
+
+@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr;
+@incr_op_expr = @pre_incr_expr | @post_incr_expr;
+@decr_op_expr = @pre_decr_expr | @post_decr_expr;
+@mut_op_expr = @incr_op_expr | @decr_op_expr;
+@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr;
+@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr;
+
+@ternary_log_op_expr = @conditional_expr;
+@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr;
+@un_log_op_expr = @log_not_expr;
+@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr;
+
+@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr
+ | @rshift_expr | @urshift_expr;
+@un_bit_op_expr = @bit_not_expr;
+@bit_expr = @un_bit_op_expr | @bin_bit_op_expr;
+
+@equality_op_expr = @eq_expr | @ne_expr;
+@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr;
+@comp_expr = @equality_op_expr | @rel_op_expr;
+
+@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op;
+
+@ternary_op = @ternary_log_op_expr;
+@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr;
+@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr
+ | @pointer_indirection_expr | @address_of_expr;
+
+@anonymous_function_expr = @lambda_expr | @anonymous_method_expr;
+
+@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr
+ | @delegate_invocation_expr | @object_creation_expr | @call_access_expr
+ | @local_function_invocation_expr | @function_pointer_invocation_expr;
+
+@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr;
+
+@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr
+ | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr;
+
+@throw_element = @throw_expr | @throw_stmt;
+
+@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr;
+
+implicitly_typed_array_creation(
+ unique int id: @array_creation_expr ref);
+
+explicitly_sized_array_creation(
+ unique int id: @array_creation_expr ref);
+
+stackalloc_array_creation(
+ unique int id: @array_creation_expr ref);
+
+implicitly_typed_object_creation(
+ unique int id: @implicitly_typeable_object_creation_expr ref);
+
+mutator_invocation_mode(
+ unique int id: @operator_invocation_expr ref,
+ int mode: int ref /* prefix = 1, postfix = 2*/);
+
+expr_compiler_generated(
+ unique int id: @expr ref);
+
+expr_value(
+ unique int id: @expr ref,
+ string value: string ref);
+
+expr_call(
+ unique int caller_id: @expr ref,
+ int target_id: @callable ref);
+
+expr_access(
+ unique int accesser_id: @access_expr ref,
+ int target_id: @accessible ref);
+
+@accessible = @method | @assignable | @local_function | @namespace;
+
+expr_location(
+ unique int id: @expr ref,
+ int loc: @location ref);
+
+dynamic_member_name(
+ unique int id: @late_bindable_expr ref,
+ string name: string ref);
+
+@qualifiable_expr = @member_access_expr
+ | @method_invocation_expr
+ | @element_access_expr;
+
+conditional_access(
+ unique int id: @qualifiable_expr ref);
+
+expr_argument(
+ unique int id: @expr ref,
+ int mode: int ref);
+ /* mode is the same as params: value = 0, ref = 1, out = 2 */
+
+expr_argument_name(
+ unique int id: @expr ref,
+ string name: string ref);
+
+lambda_expr_return_type(
+ unique int id: @lambda_expr ref,
+ int type_id: @type_or_ref ref);
+
+/** CONTROL/DATA FLOW **/
+
+@control_flow_element = @stmt | @expr;
+
+/* XML Files */
+
+xmlEncoding (
+ unique int id: @file ref,
+ string encoding: string ref);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/* Comments */
+
+commentline(
+ unique int id: @commentline,
+ int kind: int ref,
+ string text: string ref,
+ string rawtext: string ref);
+
+case @commentline.kind of
+ 0 = @singlelinecomment
+| 1 = @xmldoccomment
+| 2 = @multilinecomment;
+
+commentline_location(
+ unique int id: @commentline ref,
+ int loc: @location ref);
+
+commentblock(
+ unique int id : @commentblock);
+
+commentblock_location(
+ unique int id: @commentblock ref,
+ int loc: @location ref);
+
+commentblock_binding(
+ int id: @commentblock ref,
+ int entity: @element ref,
+ int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */
+
+commentblock_child(
+ int id: @commentblock ref,
+ int commentline: @commentline ref,
+ int index: int ref);
+
+/* ASP.NET */
+
+case @asp_element.kind of
+ 0=@asp_close_tag
+| 1=@asp_code
+| 2=@asp_comment
+| 3=@asp_data_binding
+| 4=@asp_directive
+| 5=@asp_open_tag
+| 6=@asp_quoted_string
+| 7=@asp_text
+| 8=@asp_xml_directive;
+
+@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string;
+
+asp_elements(
+ unique int id: @asp_element,
+ int kind: int ref,
+ int loc: @location ref);
+
+asp_comment_server(unique int comment: @asp_comment ref);
+asp_code_inline(unique int code: @asp_code ref);
+asp_directive_attribute(
+ int directive: @asp_directive ref,
+ int index: int ref,
+ string name: string ref,
+ int value: @asp_quoted_string ref);
+asp_directive_name(
+ unique int directive: @asp_directive ref,
+ string name: string ref);
+asp_element_body(
+ unique int element: @asp_element ref,
+ string body: string ref);
+asp_tag_attribute(
+ int tag: @asp_open_tag ref,
+ int index: int ref,
+ string name: string ref,
+ int attribute: @asp_attribute ref);
+asp_tag_name(
+ unique int tag: @asp_open_tag ref,
+ string name: string ref);
+asp_tag_isempty(int tag: @asp_open_tag ref);
+
+/* Common Intermediate Language - CIL */
+
+case @cil_instruction.opcode of
+ 0 = @cil_nop
+| 1 = @cil_break
+| 2 = @cil_ldarg_0
+| 3 = @cil_ldarg_1
+| 4 = @cil_ldarg_2
+| 5 = @cil_ldarg_3
+| 6 = @cil_ldloc_0
+| 7 = @cil_ldloc_1
+| 8 = @cil_ldloc_2
+| 9 = @cil_ldloc_3
+| 10 = @cil_stloc_0
+| 11 = @cil_stloc_1
+| 12 = @cil_stloc_2
+| 13 = @cil_stloc_3
+| 14 = @cil_ldarg_s
+| 15 = @cil_ldarga_s
+| 16 = @cil_starg_s
+| 17 = @cil_ldloc_s
+| 18 = @cil_ldloca_s
+| 19 = @cil_stloc_s
+| 20 = @cil_ldnull
+| 21 = @cil_ldc_i4_m1
+| 22 = @cil_ldc_i4_0
+| 23 = @cil_ldc_i4_1
+| 24 = @cil_ldc_i4_2
+| 25 = @cil_ldc_i4_3
+| 26 = @cil_ldc_i4_4
+| 27 = @cil_ldc_i4_5
+| 28 = @cil_ldc_i4_6
+| 29 = @cil_ldc_i4_7
+| 30 = @cil_ldc_i4_8
+| 31 = @cil_ldc_i4_s
+| 32 = @cil_ldc_i4
+| 33 = @cil_ldc_i8
+| 34 = @cil_ldc_r4
+| 35 = @cil_ldc_r8
+| 37 = @cil_dup
+| 38 = @cil_pop
+| 39 = @cil_jmp
+| 40 = @cil_call
+| 41 = @cil_calli
+| 42 = @cil_ret
+| 43 = @cil_br_s
+| 44 = @cil_brfalse_s
+| 45 = @cil_brtrue_s
+| 46 = @cil_beq_s
+| 47 = @cil_bge_s
+| 48 = @cil_bgt_s
+| 49 = @cil_ble_s
+| 50 = @cil_blt_s
+| 51 = @cil_bne_un_s
+| 52 = @cil_bge_un_s
+| 53 = @cil_bgt_un_s
+| 54 = @cil_ble_un_s
+| 55 = @cil_blt_un_s
+| 56 = @cil_br
+| 57 = @cil_brfalse
+| 58 = @cil_brtrue
+| 59 = @cil_beq
+| 60 = @cil_bge
+| 61 = @cil_bgt
+| 62 = @cil_ble
+| 63 = @cil_blt
+| 64 = @cil_bne_un
+| 65 = @cil_bge_un
+| 66 = @cil_bgt_un
+| 67 = @cil_ble_un
+| 68 = @cil_blt_un
+| 69 = @cil_switch
+| 70 = @cil_ldind_i1
+| 71 = @cil_ldind_u1
+| 72 = @cil_ldind_i2
+| 73 = @cil_ldind_u2
+| 74 = @cil_ldind_i4
+| 75 = @cil_ldind_u4
+| 76 = @cil_ldind_i8
+| 77 = @cil_ldind_i
+| 78 = @cil_ldind_r4
+| 79 = @cil_ldind_r8
+| 80 = @cil_ldind_ref
+| 81 = @cil_stind_ref
+| 82 = @cil_stind_i1
+| 83 = @cil_stind_i2
+| 84 = @cil_stind_i4
+| 85 = @cil_stind_i8
+| 86 = @cil_stind_r4
+| 87 = @cil_stind_r8
+| 88 = @cil_add
+| 89 = @cil_sub
+| 90 = @cil_mul
+| 91 = @cil_div
+| 92 = @cil_div_un
+| 93 = @cil_rem
+| 94 = @cil_rem_un
+| 95 = @cil_and
+| 96 = @cil_or
+| 97 = @cil_xor
+| 98 = @cil_shl
+| 99 = @cil_shr
+| 100 = @cil_shr_un
+| 101 = @cil_neg
+| 102 = @cil_not
+| 103 = @cil_conv_i1
+| 104 = @cil_conv_i2
+| 105 = @cil_conv_i4
+| 106 = @cil_conv_i8
+| 107 = @cil_conv_r4
+| 108 = @cil_conv_r8
+| 109 = @cil_conv_u4
+| 110 = @cil_conv_u8
+| 111 = @cil_callvirt
+| 112 = @cil_cpobj
+| 113 = @cil_ldobj
+| 114 = @cil_ldstr
+| 115 = @cil_newobj
+| 116 = @cil_castclass
+| 117 = @cil_isinst
+| 118 = @cil_conv_r_un
+| 121 = @cil_unbox
+| 122 = @cil_throw
+| 123 = @cil_ldfld
+| 124 = @cil_ldflda
+| 125 = @cil_stfld
+| 126 = @cil_ldsfld
+| 127 = @cil_ldsflda
+| 128 = @cil_stsfld
+| 129 = @cil_stobj
+| 130 = @cil_conv_ovf_i1_un
+| 131 = @cil_conv_ovf_i2_un
+| 132 = @cil_conv_ovf_i4_un
+| 133 = @cil_conv_ovf_i8_un
+| 134 = @cil_conv_ovf_u1_un
+| 135 = @cil_conv_ovf_u2_un
+| 136 = @cil_conv_ovf_u4_un
+| 137 = @cil_conv_ovf_u8_un
+| 138 = @cil_conv_ovf_i_un
+| 139 = @cil_conv_ovf_u_un
+| 140 = @cil_box
+| 141 = @cil_newarr
+| 142 = @cil_ldlen
+| 143 = @cil_ldelema
+| 144 = @cil_ldelem_i1
+| 145 = @cil_ldelem_u1
+| 146 = @cil_ldelem_i2
+| 147 = @cil_ldelem_u2
+| 148 = @cil_ldelem_i4
+| 149 = @cil_ldelem_u4
+| 150 = @cil_ldelem_i8
+| 151 = @cil_ldelem_i
+| 152 = @cil_ldelem_r4
+| 153 = @cil_ldelem_r8
+| 154 = @cil_ldelem_ref
+| 155 = @cil_stelem_i
+| 156 = @cil_stelem_i1
+| 157 = @cil_stelem_i2
+| 158 = @cil_stelem_i4
+| 159 = @cil_stelem_i8
+| 160 = @cil_stelem_r4
+| 161 = @cil_stelem_r8
+| 162 = @cil_stelem_ref
+| 163 = @cil_ldelem
+| 164 = @cil_stelem
+| 165 = @cil_unbox_any
+| 179 = @cil_conv_ovf_i1
+| 180 = @cil_conv_ovf_u1
+| 181 = @cil_conv_ovf_i2
+| 182 = @cil_conv_ovf_u2
+| 183 = @cil_conv_ovf_i4
+| 184 = @cil_conv_ovf_u4
+| 185 = @cil_conv_ovf_i8
+| 186 = @cil_conv_ovf_u8
+| 194 = @cil_refanyval
+| 195 = @cil_ckinfinite
+| 198 = @cil_mkrefany
+| 208 = @cil_ldtoken
+| 209 = @cil_conv_u2
+| 210 = @cil_conv_u1
+| 211 = @cil_conv_i
+| 212 = @cil_conv_ovf_i
+| 213 = @cil_conv_ovf_u
+| 214 = @cil_add_ovf
+| 215 = @cil_add_ovf_un
+| 216 = @cil_mul_ovf
+| 217 = @cil_mul_ovf_un
+| 218 = @cil_sub_ovf
+| 219 = @cil_sub_ovf_un
+| 220 = @cil_endfinally
+| 221 = @cil_leave
+| 222 = @cil_leave_s
+| 223 = @cil_stind_i
+| 224 = @cil_conv_u
+| 65024 = @cil_arglist
+| 65025 = @cil_ceq
+| 65026 = @cil_cgt
+| 65027 = @cil_cgt_un
+| 65028 = @cil_clt
+| 65029 = @cil_clt_un
+| 65030 = @cil_ldftn
+| 65031 = @cil_ldvirtftn
+| 65033 = @cil_ldarg
+| 65034 = @cil_ldarga
+| 65035 = @cil_starg
+| 65036 = @cil_ldloc
+| 65037 = @cil_ldloca
+| 65038 = @cil_stloc
+| 65039 = @cil_localloc
+| 65041 = @cil_endfilter
+| 65042 = @cil_unaligned
+| 65043 = @cil_volatile
+| 65044 = @cil_tail
+| 65045 = @cil_initobj
+| 65046 = @cil_constrained
+| 65047 = @cil_cpblk
+| 65048 = @cil_initblk
+| 65050 = @cil_rethrow
+| 65052 = @cil_sizeof
+| 65053 = @cil_refanytype
+| 65054 = @cil_readonly
+;
+
+// CIL ignored instructions
+
+@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned;
+
+// CIL local/parameter/field access
+
+@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga;
+@cil_starg_any = @cil_starg | @cil_starg_s;
+
+@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca;
+@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc;
+
+@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda;
+@cil_stfld_any = @cil_stfld | @cil_stsfld;
+
+@cil_local_access = @cil_stloc_any | @cil_ldloc_any;
+@cil_arg_access = @cil_starg_any | @cil_ldarg_any;
+@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any;
+@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any;
+
+@cil_stack_access = @cil_local_access | @cil_arg_access;
+@cil_field_access = @cil_ldfld_any | @cil_stfld_any;
+
+@cil_access = @cil_read_access | @cil_write_access;
+
+// CIL constant/literal instructions
+
+@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8;
+
+@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 |
+ @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4;
+
+@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8;
+
+@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr;
+
+// Control flow
+
+@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump;
+@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s |
+ @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s |
+ @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt |
+ @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un;
+@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch;
+@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any;
+@cil_leave_any = @cil_leave | @cil_leave_s;
+@cil_jump = @cil_unconditional_jump | @cil_conditional_jump;
+
+// CIL call instructions
+
+@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj;
+
+// CIL expression instructions
+
+@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access |
+ @cil_newarr | @cil_ldtoken | @cil_sizeof |
+ @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup;
+
+@cil_unary_expr =
+ @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation|
+ @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any |
+ @cil_ldind | @cil_unbox;
+
+@cil_conversion_operation =
+ @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 |
+ @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 |
+ @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un |
+ @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un |
+ @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un |
+ @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un |
+ @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un |
+ @cil_conv_i | @cil_conv_u | @cil_conv_r_un;
+
+@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 |
+ @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4;
+
+@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 |
+ @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref;
+
+@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation;
+
+@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl;
+
+@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un |
+ @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un |
+ @cil_sub_ovf | @cil_sub_ovf_un;
+
+@cil_unary_bitwise_operation = @cil_not;
+
+@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation;
+
+@cil_unary_arithmetic_operation = @cil_neg;
+
+@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un;
+
+// Elements that retrieve an address of something
+@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema;
+
+// CIL array instructions
+
+@cil_read_array =
+ @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i |
+ @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 |
+ @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4;
+
+@cil_write_array = @cil_stelem | @cil_stelem_ref |
+ @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 |
+ @cil_stelem_r4 | @cil_stelem_r8;
+
+@cil_throw_any = @cil_throw | @cil_rethrow;
+
+#keyset[impl, index]
+cil_instruction(
+ unique int id: @cil_instruction,
+ int opcode: int ref,
+ int index: int ref,
+ int impl: @cil_method_implementation ref);
+
+cil_jump(
+ unique int instruction: @cil_jump ref,
+ int target: @cil_instruction ref);
+
+cil_access(
+ unique int instruction: @cil_instruction ref,
+ int target: @cil_accessible ref);
+
+cil_value(
+ unique int instruction: @cil_literal ref,
+ string value: string ref);
+
+#keyset[instruction, index]
+cil_switch(
+ int instruction: @cil_switch ref,
+ int index: int ref,
+ int target: @cil_instruction ref);
+
+cil_instruction_location(
+ unique int id: @cil_instruction ref,
+ int loc: @location ref);
+
+cil_type_location(
+ int id: @cil_type ref,
+ int loc: @location ref);
+
+cil_method_location(
+ int id: @cil_method ref,
+ int loc: @location ref);
+
+@cil_namespace = @namespace;
+
+@cil_type_container = @cil_type | @cil_namespace | @cil_method;
+
+case @cil_type.kind of
+ 0 = @cil_valueorreftype
+| 1 = @cil_typeparameter
+| 2 = @cil_array_type
+| 3 = @cil_pointer_type
+| 4 = @cil_function_pointer_type
+;
+
+cil_type(
+ unique int id: @cil_type,
+ string name: string ref,
+ int kind: int ref,
+ int parent: @cil_type_container ref,
+ int sourceDecl: @cil_type ref);
+
+cil_pointer_type(
+ unique int id: @cil_pointer_type ref,
+ int pointee: @cil_type ref);
+
+cil_array_type(
+ unique int id: @cil_array_type ref,
+ int element_type: @cil_type ref,
+ int rank: int ref);
+
+cil_function_pointer_return_type(
+ unique int id: @cil_function_pointer_type ref,
+ int return_type: @cil_type ref);
+
+cil_method(
+ unique int id: @cil_method,
+ string name: string ref,
+ int parent: @cil_type ref,
+ int return_type: @cil_type ref);
+
+cil_method_source_declaration(
+ unique int method: @cil_method ref,
+ int source: @cil_method ref);
+
+cil_method_implementation(
+ unique int id: @cil_method_implementation,
+ int method: @cil_method ref,
+ int location: @assembly ref);
+
+cil_implements(
+ int id: @cil_method ref,
+ int decl: @cil_method ref);
+
+#keyset[parent, name]
+cil_field(
+ unique int id: @cil_field,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int field_type: @cil_type ref);
+
+@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace;
+@cil_named_element = @cil_declaration | @cil_namespace;
+@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member;
+@cil_accessible = @cil_declaration;
+@cil_variable = @cil_field | @cil_stack_variable;
+@cil_stack_variable = @cil_local_variable | @cil_parameter;
+@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event;
+@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type;
+@cil_parameterizable = @cil_method | @cil_function_pointer_type;
+@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type;
+
+#keyset[parameterizable, index]
+cil_parameter(
+ unique int id: @cil_parameter,
+ int parameterizable: @cil_parameterizable ref,
+ int index: int ref,
+ int param_type: @cil_type ref);
+
+cil_parameter_in(unique int id: @cil_parameter ref);
+cil_parameter_out(unique int id: @cil_parameter ref);
+
+cil_setter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+#keyset[id, modifier]
+cil_custom_modifiers(
+ int id: @cil_custom_modifier_receiver ref,
+ int modifier: @cil_type ref,
+ int kind: int ref); // modreq: 1, modopt: 0
+
+cil_type_annotation(
+ int id: @cil_has_type_annotation ref,
+ int annotation: int ref);
+
+cil_getter(unique int prop: @cil_property ref,
+ int method: @cil_method ref);
+
+cil_adder(unique int event: @cil_event ref,
+ int method: @cil_method ref);
+
+cil_remover(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref);
+
+cil_property(
+ unique int id: @cil_property,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int property_type: @cil_type ref);
+
+#keyset[parent, name]
+cil_event(unique int id: @cil_event,
+ int parent: @cil_type ref,
+ string name: string ref,
+ int event_type: @cil_type ref);
+
+#keyset[impl, index]
+cil_local_variable(
+ unique int id: @cil_local_variable,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int var_type: @cil_type ref);
+
+cil_function_pointer_calling_conventions(
+ int id: @cil_function_pointer_type ref,
+ int kind: int ref);
+
+// CIL handlers (exception handlers etc).
+
+case @cil_handler.kind of
+ 0 = @cil_catch_handler
+| 1 = @cil_filter_handler
+| 2 = @cil_finally_handler
+| 4 = @cil_fault_handler
+;
+
+#keyset[impl, index]
+cil_handler(
+ unique int id: @cil_handler,
+ int impl: @cil_method_implementation ref,
+ int index: int ref,
+ int kind: int ref,
+ int try_start: @cil_instruction ref,
+ int try_end: @cil_instruction ref,
+ int handler_start: @cil_instruction ref);
+
+cil_handler_filter(
+ unique int id: @cil_handler ref,
+ int filter_start: @cil_instruction ref);
+
+cil_handler_type(
+ unique int id: @cil_handler ref,
+ int catch_type: @cil_type ref);
+
+@cil_controlflow_node = @cil_entry_point | @cil_instruction;
+
+@cil_entry_point = @cil_method_implementation | @cil_handler;
+
+@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method;
+
+cil_method_stack_size(
+ unique int method: @cil_method_implementation ref,
+ int size: int ref);
+
+// CIL modifiers
+
+cil_public(int id: @cil_member ref);
+cil_private(int id: @cil_member ref);
+cil_protected(int id: @cil_member ref);
+cil_internal(int id: @cil_member ref);
+cil_static(int id: @cil_member ref);
+cil_sealed(int id: @cil_member ref);
+cil_virtual(int id: @cil_method ref);
+cil_abstract(int id: @cil_member ref);
+cil_class(int id: @cil_type ref);
+cil_interface(int id: @cil_type ref);
+cil_security(int id: @cil_member ref);
+cil_requiresecobject(int id: @cil_method ref);
+cil_specialname(int id: @cil_method ref);
+cil_newslot(int id: @cil_method ref);
+
+cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref);
+cil_base_interface(int id: @cil_type ref, int base: @cil_type ref);
+cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref);
+
+#keyset[unbound, index]
+cil_type_parameter(
+ int unbound: @cil_member ref,
+ int index: int ref,
+ int param: @cil_typeparameter ref);
+
+#keyset[bound, index]
+cil_type_argument(
+ int bound: @cil_member ref,
+ int index: int ref,
+ int t: @cil_type ref);
+
+// CIL type parameter constraints
+
+cil_typeparam_covariant(int tp: @cil_typeparameter ref);
+cil_typeparam_contravariant(int tp: @cil_typeparameter ref);
+cil_typeparam_class(int tp: @cil_typeparameter ref);
+cil_typeparam_struct(int tp: @cil_typeparameter ref);
+cil_typeparam_new(int tp: @cil_typeparameter ref);
+cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref);
+
+// CIL attributes
+
+cil_attribute(
+ unique int attributeid: @cil_attribute,
+ int element: @cil_declaration ref,
+ int constructor: @cil_method ref);
+
+#keyset[attribute_id, param]
+cil_attribute_named_argument(
+ int attribute_id: @cil_attribute ref,
+ string param: string ref,
+ string value: string ref);
+
+#keyset[attribute_id, index]
+cil_attribute_positional_argument(
+ int attribute_id: @cil_attribute ref,
+ int index: int ref,
+ string value: string ref);
+
+
+// Common .Net data model covering both C# and CIL
+
+// Common elements
+@dotnet_element = @element | @cil_element;
+@dotnet_named_element = @named_element | @cil_named_element;
+@dotnet_callable = @callable | @cil_method;
+@dotnet_variable = @variable | @cil_variable;
+@dotnet_field = @field | @cil_field;
+@dotnet_parameter = @parameter | @cil_parameter;
+@dotnet_declaration = @declaration | @cil_declaration;
+@dotnet_member = @member | @cil_member;
+@dotnet_event = @event | @cil_event;
+@dotnet_property = @property | @cil_property | @indexer;
+@dotnet_parameterizable = @parameterizable | @cil_parameterizable;
+
+// Common types
+@dotnet_type = @type | @cil_type;
+@dotnet_call = @call | @cil_call_any;
+@dotnet_throw = @throw_element | @cil_throw_any;
+@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type;
+@dotnet_typeparameter = @type_parameter | @cil_typeparameter;
+@dotnet_array_type = @array_type | @cil_array_type;
+@dotnet_pointer_type = @pointer_type | @cil_pointer_type;
+@dotnet_type_parameter = @type_parameter | @cil_typeparameter;
+@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable;
+
+// Attributes
+@dotnet_attribute = @attribute | @cil_attribute;
+
+// Expressions
+@dotnet_expr = @expr | @cil_expr;
+
+// Literals
+@dotnet_literal = @literal_expr | @cil_literal;
+@dotnet_string_literal = @string_literal_expr | @cil_ldstr;
+@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i;
+@dotnet_float_literal = @float_literal_expr | @cil_ldc_r;
+@dotnet_null_literal = @null_literal_expr | @cil_ldnull;
+
+@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property |
+ @callable | @value_or_ref_type | @void_type;
+
+#keyset[entity, location]
+metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref)
diff --git a/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/upgrade.properties b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/upgrade.properties
new file mode 100644
index 00000000000..25d7416df1c
--- /dev/null
+++ b/csharp/ql/lib/upgrades/83aca6b3e4fa38dd2b97b9b51dfc199a2ba9c7f2/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add unsigned right shift and unsigned right shift assignment expression kinds.
+compatibility: backwards
diff --git a/csharp/ql/src/experimental/ir/implementation/Opcode.qll b/csharp/ql/src/experimental/ir/implementation/Opcode.qll
index c4134d240ab..b4def7fe4ae 100644
--- a/csharp/ql/src/experimental/ir/implementation/Opcode.qll
+++ b/csharp/ql/src/experimental/ir/implementation/Opcode.qll
@@ -30,6 +30,7 @@ private newtype TOpcode =
TNegate() or
TShiftLeft() or
TShiftRight() or
+ TUnsignedShiftRight() or
TBitAnd() or
TBitOr() or
TBitXor() or
@@ -652,6 +653,15 @@ module Opcode {
final override string toString() { result = "ShiftRight" }
}
+ /**
+ * The `Opcode` for a `UnsignedShiftRightInstruction`.
+ *
+ * See the `UnsignedShiftRightInstruction` documentation for more details.
+ */
+ class UnsignedShiftRight extends BinaryBitwiseOpcode, TUnsignedShiftRight {
+ final override string toString() { result = "UnsignedShiftRight" }
+ }
+
/**
* The `Opcode` for a `BitAndInstruction`.
*
diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll
index 7afe954023b..0aa7c552638 100644
--- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll
+++ b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll
@@ -1204,6 +1204,17 @@ class ShiftRightInstruction extends BinaryBitwiseInstruction {
ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight }
}
+/**
+ * An instruction that shifts its left operand to the right by the number of bits specified by its
+ * right operand.
+ *
+ * Both operands must have an integer type. The result has the same type as the left operand.
+ * The leftmost bits are zero-filled.
+ */
+class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction {
+ UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight }
+}
+
/**
* An instruction that performs a binary arithmetic operation involving at least one pointer
* operand.
diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll
index 1bcca401565..06391c010b4 100644
--- a/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll
+++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/TranslatedExpr.qll
@@ -1091,9 +1091,11 @@ class TranslatedCast extends TranslatedNonConstantExpr {
}
private Opcode binaryBitwiseOpcode(BinaryBitwiseOperation expr) {
- expr instanceof LShiftExpr and result instanceof Opcode::ShiftLeft
+ expr instanceof LeftShiftExpr and result instanceof Opcode::ShiftLeft
or
- expr instanceof RShiftExpr and result instanceof Opcode::ShiftRight
+ expr instanceof RightShiftExpr and result instanceof Opcode::ShiftRight
+ or
+ expr instanceof UnsignedRightShiftExpr and result instanceof Opcode::UnsignedShiftRight
or
expr instanceof BitwiseAndExpr and result instanceof Opcode::BitAnd
or
@@ -1377,8 +1379,9 @@ class TranslatedAssignOperation extends TranslatedAssignment {
private Type getConvertedLeftOperandType() {
if
- expr instanceof AssignLShiftExpr or
- expr instanceof AssignRShiftExpr
+ expr instanceof AssignLeftShiftExpr or
+ expr instanceof AssignRightShiftExpr or
+ expr instanceof AssignUnsighedRightShiftExpr
then result = this.getLeftOperand().getResultType()
else
// The right operand has already been converted to the type of the op.
@@ -1416,9 +1419,11 @@ class TranslatedAssignOperation extends TranslatedAssignment {
or
expr instanceof AssignXorExpr and result instanceof Opcode::BitXor
or
- expr instanceof AssignLShiftExpr and result instanceof Opcode::ShiftLeft
+ expr instanceof AssignLeftShiftExpr and result instanceof Opcode::ShiftLeft
or
- expr instanceof AssignRShiftExpr and result instanceof Opcode::ShiftRight
+ expr instanceof AssignRightShiftExpr and result instanceof Opcode::ShiftRight
+ or
+ expr instanceof AssignUnsighedRightShiftExpr and result instanceof Opcode::UnsignedShiftRight
}
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CSharpType resultType) {
diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll
index 7afe954023b..0aa7c552638 100644
--- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll
+++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll
@@ -1204,6 +1204,17 @@ class ShiftRightInstruction extends BinaryBitwiseInstruction {
ShiftRightInstruction() { this.getOpcode() instanceof Opcode::ShiftRight }
}
+/**
+ * An instruction that shifts its left operand to the right by the number of bits specified by its
+ * right operand.
+ *
+ * Both operands must have an integer type. The result has the same type as the left operand.
+ * The leftmost bits are zero-filled.
+ */
+class UnsignedShiftRightInstruction extends BinaryBitwiseInstruction {
+ UnsignedShiftRightInstruction() { this.getOpcode() instanceof Opcode::UnsignedShiftRight }
+}
+
/**
* An instruction that performs a binary arithmetic operation involving at least one pointer
* operand.
diff --git a/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll b/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll
index 44548e0517a..b74f7c90db5 100644
--- a/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll
+++ b/csharp/ql/src/experimental/ir/rangeanalysis/SignAnalysis.qll
@@ -522,6 +522,8 @@ module SignAnalysisCached {
i instanceof ShiftRightInstruction and
not i.getResultType().(IntegralType) instanceof SignedIntegralType and
result = s1.urshift(s2)
+ or
+ i instanceof UnsignedShiftRightInstruction and result = s1.urshift(s2)
)
or
// use hasGuard here?
diff --git a/csharp/ql/test/experimental/ir/ir/PrintAst.expected b/csharp/ql/test/experimental/ir/ir/PrintAst.expected
index 41b5b6daead..cc96a82bbc1 100644
--- a/csharp/ql/test/experimental/ir/ir/PrintAst.expected
+++ b/csharp/ql/test/experimental/ir/ir/PrintAst.expected
@@ -118,59 +118,63 @@ array.cs:
# 20| 0: [IntLiteral] 1
assignop.cs:
# 3| [Class] AssignOp
-# 4| 5: [Method] Main
-# 4| -1: [TypeMention] Void
-# 4| 4: [BlockStmt] {...}
-# 5| 0: [LocalVariableDeclStmt] ... ...;
-# 5| 0: [LocalVariableDeclAndInitExpr] Int32 a = ...
-# 5| -1: [TypeMention] int
-# 5| 0: [LocalVariableAccess] access to local variable a
-# 5| 1: [IntLiteral] 1
-# 6| 1: [LocalVariableDeclStmt] ... ...;
-# 6| 0: [LocalVariableDeclAndInitExpr] Int32 c = ...
-# 6| -1: [TypeMention] int
-# 6| 0: [LocalVariableAccess] access to local variable c
-# 6| 1: [IntLiteral] 1
-# 8| 2: [ExprStmt] ...;
-# 8| 0: [AssignAddExpr] ... += ...
+# 5| 5: [Method] Main
+# 5| -1: [TypeMention] Void
+# 6| 4: [BlockStmt] {...}
+# 7| 0: [LocalVariableDeclStmt] ... ...;
+# 7| 0: [LocalVariableDeclAndInitExpr] Int32 a = ...
+# 7| -1: [TypeMention] int
+# 7| 0: [LocalVariableAccess] access to local variable a
+# 7| 1: [IntLiteral] 1
+# 8| 1: [LocalVariableDeclStmt] ... ...;
+# 8| 0: [LocalVariableDeclAndInitExpr] Int32 c = ...
+# 8| -1: [TypeMention] int
# 8| 0: [LocalVariableAccess] access to local variable c
-# 8| 1: [LocalVariableAccess] access to local variable a
-# 9| 3: [ExprStmt] ...;
-# 9| 0: [AssignSubExpr] ... -= ...
-# 9| 0: [LocalVariableAccess] access to local variable c
-# 9| 1: [LocalVariableAccess] access to local variable a
-# 10| 4: [ExprStmt] ...;
-# 10| 0: [AssignMulExpr] ... *= ...
+# 8| 1: [IntLiteral] 1
+# 10| 2: [ExprStmt] ...;
+# 10| 0: [AssignAddExpr] ... += ...
# 10| 0: [LocalVariableAccess] access to local variable c
# 10| 1: [LocalVariableAccess] access to local variable a
-# 11| 5: [ExprStmt] ...;
-# 11| 0: [AssignDivExpr] ... /= ...
+# 11| 3: [ExprStmt] ...;
+# 11| 0: [AssignSubExpr] ... -= ...
# 11| 0: [LocalVariableAccess] access to local variable c
# 11| 1: [LocalVariableAccess] access to local variable a
-# 12| 6: [ExprStmt] ...;
-# 12| 0: [AssignRemExpr] ... %= ...
+# 12| 4: [ExprStmt] ...;
+# 12| 0: [AssignMulExpr] ... *= ...
# 12| 0: [LocalVariableAccess] access to local variable c
# 12| 1: [LocalVariableAccess] access to local variable a
-# 13| 7: [ExprStmt] ...;
-# 13| 0: [AssignLShiftExpr] ... <<= ...
+# 13| 5: [ExprStmt] ...;
+# 13| 0: [AssignDivExpr] ... /= ...
# 13| 0: [LocalVariableAccess] access to local variable c
-# 13| 1: [IntLiteral] 2
-# 14| 8: [ExprStmt] ...;
-# 14| 0: [AssignRShiftExpr] ... >>= ...
+# 13| 1: [LocalVariableAccess] access to local variable a
+# 14| 6: [ExprStmt] ...;
+# 14| 0: [AssignRemExpr] ... %= ...
# 14| 0: [LocalVariableAccess] access to local variable c
-# 14| 1: [IntLiteral] 2
-# 15| 9: [ExprStmt] ...;
-# 15| 0: [AssignAndExpr] ... &= ...
+# 14| 1: [LocalVariableAccess] access to local variable a
+# 15| 7: [ExprStmt] ...;
+# 15| 0: [AssignLeftShiftExpr] ... <<= ...
# 15| 0: [LocalVariableAccess] access to local variable c
# 15| 1: [IntLiteral] 2
-# 16| 10: [ExprStmt] ...;
-# 16| 0: [AssignXorExpr] ... ^= ...
+# 16| 8: [ExprStmt] ...;
+# 16| 0: [AssignRightShiftExpr] ... >>= ...
# 16| 0: [LocalVariableAccess] access to local variable c
# 16| 1: [IntLiteral] 2
-# 17| 11: [ExprStmt] ...;
-# 17| 0: [AssignOrExpr] ... |= ...
+# 17| 9: [ExprStmt] ...;
+# 17| 0: [AssignAndExpr] ... &= ...
# 17| 0: [LocalVariableAccess] access to local variable c
# 17| 1: [IntLiteral] 2
+# 18| 10: [ExprStmt] ...;
+# 18| 0: [AssignXorExpr] ... ^= ...
+# 18| 0: [LocalVariableAccess] access to local variable c
+# 18| 1: [IntLiteral] 2
+# 19| 11: [ExprStmt] ...;
+# 19| 0: [AssignOrExpr] ... |= ...
+# 19| 0: [LocalVariableAccess] access to local variable c
+# 19| 1: [IntLiteral] 2
+# 20| 12: [ExprStmt] ...;
+# 20| 0: [AssignUnsighedRightShiftExpr] ... >>>= ...
+# 20| 0: [LocalVariableAccess] access to local variable c
+# 20| 1: [IntLiteral] 2
casts.cs:
# 1| [Class] Casts_A
# 5| [Class] Casts_B
diff --git a/csharp/ql/test/experimental/ir/ir/assignop.cs b/csharp/ql/test/experimental/ir/ir/assignop.cs
index f5c2a6fa19d..21fdfccbcf9 100644
--- a/csharp/ql/test/experimental/ir/ir/assignop.cs
+++ b/csharp/ql/test/experimental/ir/ir/assignop.cs
@@ -1,19 +1,22 @@
using System;
-class AssignOp {
- static void Main() {
+class AssignOp
+{
+ static void Main()
+ {
int a = 1;
int c = 1;
-
- c += a;
+
+ c += a;
c -= a;
- c *= a;
+ c *= a;
c /= a;
- c %= a;
- c <<= 2;
- c >>= 2;
- c &= 2;
- c ^= 2;
+ c %= a;
+ c <<= 2;
+ c >>= 2;
+ c &= 2;
+ c ^= 2;
c |= 2;
+ c >>>= 2;
}
}
diff --git a/csharp/ql/test/experimental/ir/ir/raw_ir.expected b/csharp/ql/test/experimental/ir/ir/raw_ir.expected
index bf639694da5..2461e6602b9 100644
--- a/csharp/ql/test/experimental/ir/ir/raw_ir.expected
+++ b/csharp/ql/test/experimental/ir/ir/raw_ir.expected
@@ -145,74 +145,79 @@ array.cs:
# 13| v13_6(Void) = ExitFunction :
assignop.cs:
-# 4| System.Void AssignOp.Main()
-# 4| Block 0
-# 4| v4_1(Void) = EnterFunction :
-# 4| mu4_2() = AliasedDefinition :
-# 5| r5_1(glval) = VariableAddress[a] :
-# 5| r5_2(Int32) = Constant[1] :
-# 5| mu5_3(Int32) = Store[a] : &:r5_1, r5_2
-# 6| r6_1(glval) = VariableAddress[c] :
-# 6| r6_2(Int32) = Constant[1] :
-# 6| mu6_3(Int32) = Store[c] : &:r6_1, r6_2
-# 8| r8_1(glval) = VariableAddress[a] :
-# 8| r8_2(Int32) = Load[a] : &:r8_1, ~m?
-# 8| r8_3(glval) = VariableAddress[c] :
-# 8| r8_4(Int32) = Load[c] : &:r8_3, ~m?
-# 8| r8_5(Int32) = Add : r8_4, r8_2
-# 8| mu8_6(Int32) = Store[c] : &:r8_3, r8_5
-# 9| r9_1(glval) = VariableAddress[a] :
-# 9| r9_2(Int32) = Load[a] : &:r9_1, ~m?
-# 9| r9_3(glval) = VariableAddress[c] :
-# 9| r9_4(Int32) = Load[c] : &:r9_3, ~m?
-# 9| r9_5(Int32) = Sub : r9_4, r9_2
-# 9| mu9_6(Int32) = Store[c] : &:r9_3, r9_5
+# 5| System.Void AssignOp.Main()
+# 5| Block 0
+# 5| v5_1(Void) = EnterFunction :
+# 5| mu5_2() = AliasedDefinition :
+# 7| r7_1(glval) = VariableAddress[a] :
+# 7| r7_2(Int32) = Constant[1] :
+# 7| mu7_3(Int32) = Store[a] : &:r7_1, r7_2
+# 8| r8_1(glval) = VariableAddress[c] :
+# 8| r8_2(Int32) = Constant[1] :
+# 8| mu8_3(Int32) = Store[c] : &:r8_1, r8_2
# 10| r10_1(glval) = VariableAddress[a] :
# 10| r10_2(Int32) = Load[a] : &:r10_1, ~m?
# 10| r10_3(glval) = VariableAddress[c] :
# 10| r10_4(Int32) = Load[c] : &:r10_3, ~m?
-# 10| r10_5(Int32) = Mul : r10_4, r10_2
+# 10| r10_5(Int32) = Add : r10_4, r10_2
# 10| mu10_6(Int32) = Store[c] : &:r10_3, r10_5
# 11| r11_1(glval) = VariableAddress[a] :
# 11| r11_2(Int32) = Load[a] : &:r11_1, ~m?
# 11| r11_3(glval) = VariableAddress[c] :
# 11| r11_4(Int32) = Load[c] : &:r11_3, ~m?
-# 11| r11_5(Int32) = Div : r11_4, r11_2
+# 11| r11_5(Int32) = Sub : r11_4, r11_2
# 11| mu11_6(Int32) = Store[c] : &:r11_3, r11_5
# 12| r12_1(glval) = VariableAddress[a] :
# 12| r12_2(Int32) = Load[a] : &:r12_1, ~m?
# 12| r12_3(glval) = VariableAddress[c] :
# 12| r12_4(Int32) = Load[c] : &:r12_3, ~m?
-# 12| r12_5(Int32) = Rem : r12_4, r12_2
+# 12| r12_5(Int32) = Mul : r12_4, r12_2
# 12| mu12_6(Int32) = Store[c] : &:r12_3, r12_5
-# 13| r13_1(Int32) = Constant[2] :
-# 13| r13_2(glval) = VariableAddress[c] :
-# 13| r13_3(Int32) = Load[c] : &:r13_2, ~m?
-# 13| r13_4(Int32) = ShiftLeft : r13_3, r13_1
-# 13| mu13_5(Int32) = Store[c] : &:r13_2, r13_4
-# 14| r14_1(Int32) = Constant[2] :
-# 14| r14_2(glval) = VariableAddress[c] :
-# 14| r14_3(Int32) = Load[c] : &:r14_2, ~m?
-# 14| r14_4(Int32) = ShiftRight : r14_3, r14_1
-# 14| mu14_5(Int32) = Store[c] : &:r14_2, r14_4
+# 13| r13_1(glval) = VariableAddress[a] :
+# 13| r13_2(Int32) = Load[a] : &:r13_1, ~m?
+# 13| r13_3(glval) = VariableAddress[c] :
+# 13| r13_4(Int32) = Load[c] : &:r13_3, ~m?
+# 13| r13_5(Int32) = Div : r13_4, r13_2
+# 13| mu13_6(Int32) = Store[c] : &:r13_3, r13_5
+# 14| r14_1(glval) = VariableAddress[a] :
+# 14| r14_2(Int32) = Load[a] : &:r14_1, ~m?
+# 14| r14_3(glval) = VariableAddress[c] :
+# 14| r14_4(Int32) = Load[c] : &:r14_3, ~m?
+# 14| r14_5(Int32) = Rem : r14_4, r14_2
+# 14| mu14_6(Int32) = Store[c] : &:r14_3, r14_5
# 15| r15_1(Int32) = Constant[2] :
# 15| r15_2(glval) = VariableAddress[c] :
# 15| r15_3(Int32) = Load[c] : &:r15_2, ~m?
-# 15| r15_4(Int32) = BitAnd : r15_3, r15_1
+# 15| r15_4(Int32) = ShiftLeft : r15_3, r15_1
# 15| mu15_5(Int32) = Store[c] : &:r15_2, r15_4
# 16| r16_1(Int32) = Constant[2] :
# 16| r16_2(glval) = VariableAddress[c] :
# 16| r16_3(Int32) = Load[c] : &:r16_2, ~m?
-# 16| r16_4(Int32) = BitXor : r16_3, r16_1
+# 16| r16_4(Int32) = ShiftRight : r16_3, r16_1
# 16| mu16_5(Int32) = Store[c] : &:r16_2, r16_4
# 17| r17_1(Int32) = Constant[2] :
# 17| r17_2(glval) = VariableAddress[c] :
# 17| r17_3(Int32) = Load[c] : &:r17_2, ~m?
-# 17| r17_4(Int32) = BitOr : r17_3, r17_1
+# 17| r17_4(Int32) = BitAnd : r17_3, r17_1
# 17| mu17_5(Int32) = Store[c] : &:r17_2, r17_4
-# 4| v4_3(Void) = ReturnVoid :
-# 4| v4_4(Void) = AliasedUse : ~m?
-# 4| v4_5(Void) = ExitFunction :
+# 18| r18_1(Int32) = Constant[2] :
+# 18| r18_2(glval) = VariableAddress[c] :
+# 18| r18_3(Int32) = Load[c] : &:r18_2, ~m?
+# 18| r18_4(Int32) = BitXor : r18_3, r18_1
+# 18| mu18_5(Int32) = Store[c] : &:r18_2, r18_4
+# 19| r19_1(Int32) = Constant[2] :
+# 19| r19_2(glval) = VariableAddress[c] :
+# 19| r19_3(Int32) = Load[c] : &:r19_2, ~m?
+# 19| r19_4(Int32) = BitOr : r19_3, r19_1
+# 19| mu19_5(Int32) = Store[c] : &:r19_2, r19_4
+# 20| r20_1(Int32) = Constant[2] :
+# 20| r20_2(glval) = VariableAddress[c] :
+# 20| r20_3(Int32) = Load[c] : &:r20_2, ~m?
+# 20| r20_4(Int32) = UnsignedShiftRight : r20_3, r20_1
+# 20| mu20_5(Int32) = Store[c] : &:r20_2, r20_4
+# 5| v5_3(Void) = ReturnVoid :
+# 5| v5_4(Void) = AliasedUse : ~m?
+# 5| v5_5(Void) = ExitFunction :
casts.cs:
# 11| System.Void Casts.Main()
diff --git a/csharp/ql/test/library-tests/csharp11/Operators.cs b/csharp/ql/test/library-tests/csharp11/Operators.cs
new file mode 100644
index 00000000000..d5c4f8be091
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/Operators.cs
@@ -0,0 +1,20 @@
+
+public class MyClass
+{
+ public void M1()
+ {
+ var x1 = 1;
+ var x2 = x1 >>> 2;
+
+ var y1 = -2;
+ var y2 = y1 >>> 3;
+
+ var z = -4;
+ z >>>= 5;
+ }
+}
+
+public class MyOperatorClass
+{
+ public static MyOperatorClass operator >>>(MyOperatorClass a, MyOperatorClass b) { return null; }
+}
\ No newline at end of file
diff --git a/csharp/ql/test/library-tests/csharp11/SignAnalysis.cs b/csharp/ql/test/library-tests/csharp11/SignAnalysis.cs
new file mode 100644
index 00000000000..09e7ceb9fdc
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/SignAnalysis.cs
@@ -0,0 +1,42 @@
+public class MySignAnalysis
+{
+
+ public void UnsignedRightShiftSign(int x, int y)
+ {
+ int z;
+ if (x == 0)
+ {
+ z = x >>> y;
+ }
+
+ if (y == 0)
+ {
+ z = x >>> y;
+ }
+
+ if (x > 0 && y == 0)
+ {
+ z = x >>> y;
+ }
+
+ if (x > 0 && y > 0)
+ {
+ z = x >>> y;
+ }
+
+ if (x > 0 && y < 0)
+ {
+ z = x >>> y;
+ }
+
+ if (x < 0 && y > 0)
+ {
+ z = x >>> y;
+ }
+
+ if (x < 0 && y < 0)
+ {
+ z = x >>> y;
+ }
+ }
+}
\ No newline at end of file
diff --git a/csharp/ql/test/library-tests/csharp11/operators.expected b/csharp/ql/test/library-tests/csharp11/operators.expected
new file mode 100644
index 00000000000..2c7bda6800d
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/operators.expected
@@ -0,0 +1,8 @@
+binarybitwise
+| Operators.cs:7:18:7:25 | ... >>> ... | Operators.cs:7:18:7:19 | access to local variable x1 | Operators.cs:7:25:7:25 | 2 | >>> | UnsignedRightShiftExpr |
+| Operators.cs:10:18:10:25 | ... >>> ... | Operators.cs:10:18:10:19 | access to local variable y1 | Operators.cs:10:25:10:25 | 3 | >>> | UnsignedRightShiftExpr |
+| Operators.cs:13:9:13:16 | ... >>> ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>> | UnsignedRightShiftExpr |
+assignbitwise
+| Operators.cs:13:9:13:16 | ... >>>= ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>>= | AssignUnsighedRightShiftExpr |
+userdefined
+| Operators.cs:19:44:19:46 | >>> | op_UnsignedRightShift | UnsignedRightShiftOperator |
diff --git a/csharp/ql/test/library-tests/csharp11/operators.ql b/csharp/ql/test/library-tests/csharp11/operators.ql
new file mode 100644
index 00000000000..607efac0c26
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/operators.ql
@@ -0,0 +1,27 @@
+import csharp
+
+query predicate binarybitwise(
+ BinaryBitwiseOperation op, Expr left, Expr right, string name, string qlclass
+) {
+ op.getFile().getStem() = "Operators" and
+ left = op.getLeftOperand() and
+ right = op.getRightOperand() and
+ name = op.getOperator() and
+ qlclass = op.getAPrimaryQlClass()
+}
+
+query predicate assignbitwise(
+ AssignBitwiseOperation op, Expr left, Expr right, string name, string qlclass
+) {
+ op.getFile().getStem() = "Operators" and
+ left = op.getLValue() and
+ right = op.getRValue() and
+ name = op.getOperator() and
+ qlclass = op.getAPrimaryQlClass()
+}
+
+query predicate userdefined(Operator op, string fname, string qlclass) {
+ op.getFile().getStem() = "Operators" and
+ fname = op.getFunctionName() and
+ qlclass = op.getAPrimaryQlClass()
+}
diff --git a/csharp/ql/test/library-tests/csharp11/signAnalysis.expected b/csharp/ql/test/library-tests/csharp11/signAnalysis.expected
new file mode 100644
index 00000000000..952719939ad
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/signAnalysis.expected
@@ -0,0 +1,7 @@
+| SignAnalysis.cs:9:17:9:23 | ... >>> ... | 0 |
+| SignAnalysis.cs:14:17:14:23 | ... >>> ... | + - 0 |
+| SignAnalysis.cs:19:17:19:23 | ... >>> ... | + |
+| SignAnalysis.cs:24:17:24:23 | ... >>> ... | + 0 |
+| SignAnalysis.cs:29:17:29:23 | ... >>> ... | + 0 |
+| SignAnalysis.cs:34:17:34:23 | ... >>> ... | + - |
+| SignAnalysis.cs:39:17:39:23 | ... >>> ... | + - |
diff --git a/csharp/ql/test/library-tests/csharp11/signAnalysis.ql b/csharp/ql/test/library-tests/csharp11/signAnalysis.ql
new file mode 100644
index 00000000000..2aeb57e29fb
--- /dev/null
+++ b/csharp/ql/test/library-tests/csharp11/signAnalysis.ql
@@ -0,0 +1,9 @@
+import csharp
+import semmle.code.csharp.dataflow.internal.rangeanalysis.SignAnalysisCommon as Common
+
+from ControlFlow::Nodes::ExprNode e, Expr expr
+where
+ e.getExpr() = expr and
+ expr.getFile().getStem() = "SignAnalysis" and
+ expr instanceof UnsignedRightShiftExpr
+select e, strictconcat(string s | s = Common::exprSign(e).toString() | s, " ")
diff --git a/csharp/ql/test/library-tests/indexers/PrintAst.expected b/csharp/ql/test/library-tests/indexers/PrintAst.expected
index cd97a04290a..36f15f11909 100644
--- a/csharp/ql/test/library-tests/indexers/PrintAst.expected
+++ b/csharp/ql/test/library-tests/indexers/PrintAst.expected
@@ -25,7 +25,7 @@ indexers.cs:
# 18| -1: [TypeMention] Int32[]
# 18| 1: [TypeMention] int
# 18| 0: [AddExpr] ... + ...
-# 18| 0: [RShiftExpr] ... >> ...
+# 18| 0: [RightShiftExpr] ... >> ...
# 18| 0: [SubExpr] ... - ...
# 18| 0: [ParameterAccess] access to parameter length
# 18| 1: [IntLiteral] 1
@@ -68,10 +68,10 @@ indexers.cs:
# 32| 0: [BitwiseAndExpr] ... & ...
# 32| 0: [ArrayAccess] access to array element
# 32| -1: [FieldAccess] access to field bits
-# 32| 0: [RShiftExpr] ... >> ...
+# 32| 0: [RightShiftExpr] ... >> ...
# 32| 0: [ParameterAccess] access to parameter index
# 32| 1: [IntLiteral] 5
-# 32| 1: [LShiftExpr] ... << ...
+# 32| 1: [LeftShiftExpr] ... << ...
# 32| 0: [IntLiteral] 1
# 32| 1: [ParameterAccess] access to parameter index
# 32| 1: [IntLiteral] 0
@@ -99,10 +99,10 @@ indexers.cs:
# 42| 0: [AssignOrExpr] ... |= ...
# 42| 0: [ArrayAccess] access to array element
# 42| -1: [FieldAccess] access to field bits
-# 42| 0: [RShiftExpr] ... >> ...
+# 42| 0: [RightShiftExpr] ... >> ...
# 42| 0: [ParameterAccess] access to parameter index
# 42| 1: [IntLiteral] 5
-# 42| 1: [LShiftExpr] ... << ...
+# 42| 1: [LeftShiftExpr] ... << ...
# 42| 0: [IntLiteral] 1
# 42| 1: [ParameterAccess] access to parameter index
# 45| 2: [BlockStmt] {...}
@@ -110,11 +110,11 @@ indexers.cs:
# 46| 0: [AssignAndExpr] ... &= ...
# 46| 0: [ArrayAccess] access to array element
# 46| -1: [FieldAccess] access to field bits
-# 46| 0: [RShiftExpr] ... >> ...
+# 46| 0: [RightShiftExpr] ... >> ...
# 46| 0: [ParameterAccess] access to parameter index
# 46| 1: [IntLiteral] 5
# 46| 1: [ComplementExpr] ~...
-# 46| 0: [LShiftExpr] ... << ...
+# 46| 0: [LeftShiftExpr] ... << ...
# 46| 0: [IntLiteral] 1
# 46| 1: [ParameterAccess] access to parameter index
# 53| 2: [Class] CountPrimes
diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll
index a10da9ecc9f..78eda1dba8d 100644
--- a/java/ql/lib/semmle/code/java/Expr.qll
+++ b/java/ql/lib/semmle/code/java/Expr.qll
@@ -366,11 +366,11 @@ class CompileTimeConstantExpr extends Expr {
or
b instanceof SubExpr and result = v1 - v2
or
- b instanceof LShiftExpr and result = v1.bitShiftLeft(v2)
+ b instanceof LeftShiftExpr and result = v1.bitShiftLeft(v2)
or
- b instanceof RShiftExpr and result = v1.bitShiftRightSigned(v2)
+ b instanceof RightShiftExpr and result = v1.bitShiftRightSigned(v2)
or
- b instanceof URShiftExpr and result = v1.bitShiftRight(v2)
+ b instanceof UnsignedRightShiftExpr and result = v1.bitShiftRight(v2)
or
b instanceof AndBitwiseExpr and result = v1.bitAnd(v2)
or
@@ -623,26 +623,35 @@ class AssignXorExpr extends AssignOp, @assignxorexpr {
}
/** A compound assignment expression using the `<<=` operator. */
-class AssignLShiftExpr extends AssignOp, @assignlshiftexpr {
+class AssignLeftShiftExpr extends AssignOp, @assignlshiftexpr {
override string getOp() { result = "<<=" }
- override string getAPrimaryQlClass() { result = "AssignLShiftExpr" }
+ override string getAPrimaryQlClass() { result = "AssignLeftShiftExpr" }
}
+/** DEPRECATED: Alias for AssignLeftShiftExpr. */
+deprecated class AssignLShiftExpr = AssignLeftShiftExpr;
+
/** A compound assignment expression using the `>>=` operator. */
-class AssignRShiftExpr extends AssignOp, @assignrshiftexpr {
+class AssignRightShiftExpr extends AssignOp, @assignrshiftexpr {
override string getOp() { result = ">>=" }
- override string getAPrimaryQlClass() { result = "AssignRShiftExpr" }
+ override string getAPrimaryQlClass() { result = "AssignRightShiftExpr" }
}
+/** DEPRECATED: Alias for AssignRightShiftExpr. */
+deprecated class AssignRShiftExpr = AssignRightShiftExpr;
+
/** A compound assignment expression using the `>>>=` operator. */
-class AssignURShiftExpr extends AssignOp, @assignurshiftexpr {
+class AssignUnsignedRightShiftExpr extends AssignOp, @assignurshiftexpr {
override string getOp() { result = ">>>=" }
- override string getAPrimaryQlClass() { result = "AssignURShiftExpr" }
+ override string getAPrimaryQlClass() { result = "AssignUnsignedRightShiftExpr" }
}
+/** DEPRECATED: Alias for AssignUnsignedRightShiftExpr. */
+deprecated class AssignURShiftExpr = AssignUnsignedRightShiftExpr;
+
/** A common super-class to represent constant literals. */
class Literal extends Expr, @literal {
/**
@@ -904,26 +913,35 @@ class SubExpr extends BinaryExpr, @subexpr {
}
/** A binary expression using the `<<` operator. */
-class LShiftExpr extends BinaryExpr, @lshiftexpr {
+class LeftShiftExpr extends BinaryExpr, @lshiftexpr {
override string getOp() { result = " << " }
- override string getAPrimaryQlClass() { result = "LShiftExpr" }
+ override string getAPrimaryQlClass() { result = "LeftShiftExpr" }
}
+/** DEPRECATED: Alias for LeftShiftExpr. */
+deprecated class LShiftExpr = LeftShiftExpr;
+
/** A binary expression using the `>>` operator. */
-class RShiftExpr extends BinaryExpr, @rshiftexpr {
+class RightShiftExpr extends BinaryExpr, @rshiftexpr {
override string getOp() { result = " >> " }
- override string getAPrimaryQlClass() { result = "RShiftExpr" }
+ override string getAPrimaryQlClass() { result = "RightShiftExpr" }
}
+/** DEPRECATED: Alias for RightShiftExpr. */
+deprecated class RShiftExpr = RightShiftExpr;
+
/** A binary expression using the `>>>` operator. */
-class URShiftExpr extends BinaryExpr, @urshiftexpr {
+class UnsignedRightShiftExpr extends BinaryExpr, @urshiftexpr {
override string getOp() { result = " >>> " }
- override string getAPrimaryQlClass() { result = "URShiftExpr" }
+ override string getAPrimaryQlClass() { result = "UnsignedRightShiftExpr" }
}
+/** DEPRECATED: Alias for UnsignedRightShiftExpr. */
+deprecated class URShiftExpr = UnsignedRightShiftExpr;
+
/** A binary expression using the `&` operator. */
class AndBitwiseExpr extends BinaryExpr, @andbitexpr {
override string getOp() { result = " & " }
diff --git a/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll
index b919d143a39..5b2a39ad6c9 100644
--- a/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll
@@ -105,7 +105,7 @@ private predicate evenlyDivisibleExpr(Expr e, int factor) {
exists(ConstantIntegerExpr c, int k | k = c.getIntValue() |
e.(MulExpr).getAnOperand() = c and factor = k.abs() and factor >= 2
or
- e.(LShiftExpr).getRhs() = c and factor = 2.pow(k) and k > 0
+ e.(LeftShiftExpr).getRhs() = c and factor = 2.pow(k) and k > 0
or
e.(BitwiseAndExpr).getAnOperand() = c and factor = max(int f | andmaskFactor(k, f))
)
diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll
index 835c4a20ac3..aeb79ee99e1 100644
--- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll
@@ -528,11 +528,11 @@ private predicate boundFlowStepMul(Expr e2, Expr e1, int factor) {
or
exists(AssignMulExpr e | e = e2 and e.getDest() = c and e.getRhs() = e1 and factor = k)
or
- exists(LShiftExpr e |
+ exists(LeftShiftExpr e |
e = e2 and e.getLeftOperand() = e1 and e.getRightOperand() = c and factor = 2.pow(k)
)
or
- exists(AssignLShiftExpr e |
+ exists(AssignLeftShiftExpr e |
e = e2 and e.getDest() = e1 and e.getRhs() = c and factor = 2.pow(k)
)
)
@@ -552,19 +552,19 @@ private predicate boundFlowStepDiv(Expr e2, Expr e1, int factor) {
or
exists(AssignDivExpr e | e = e2 and e.getDest() = e1 and e.getRhs() = c and factor = k)
or
- exists(RShiftExpr e |
+ exists(RightShiftExpr e |
e = e2 and e.getLeftOperand() = e1 and e.getRightOperand() = c and factor = 2.pow(k)
)
or
- exists(AssignRShiftExpr e |
+ exists(AssignRightShiftExpr e |
e = e2 and e.getDest() = e1 and e.getRhs() = c and factor = 2.pow(k)
)
or
- exists(URShiftExpr e |
+ exists(UnsignedRightShiftExpr e |
e = e2 and e.getLeftOperand() = e1 and e.getRightOperand() = c and factor = 2.pow(k)
)
or
- exists(AssignURShiftExpr e |
+ exists(AssignUnsignedRightShiftExpr e |
e = e2 and e.getDest() = e1 and e.getRhs() = c and factor = 2.pow(k)
)
)
diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
index c5d5bc98009..7e13861c0da 100644
--- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll
@@ -72,13 +72,13 @@ module Private {
}
/** A left shift or an assign-lshift expression. */
- class LShiftExpr extends J::Expr {
- LShiftExpr() { this instanceof J::LShiftExpr or this instanceof J::AssignLShiftExpr }
+ class LeftShiftExpr extends J::Expr {
+ LeftShiftExpr() { this instanceof J::LeftShiftExpr or this instanceof J::AssignLeftShiftExpr }
/** Gets the RHS operand of this shift. */
Expr getRhs() {
- result = this.(J::LShiftExpr).getRightOperand() or
- result = this.(J::AssignLShiftExpr).getRhs()
+ result = this.(J::LeftShiftExpr).getRightOperand() or
+ result = this.(J::AssignLeftShiftExpr).getRhs()
}
}
diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll
index b2058a27114..649b4216996 100644
--- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll
@@ -18,9 +18,9 @@ newtype TBinarySignOperation =
TBitAndOp() or
TBitOrOp() or
TBitXorOp() or
- TLShiftOp() or
- TRShiftOp() or
- TURShiftOp()
+ TLeftShiftOp() or
+ TRightShiftOp() or
+ TUnsignedRightShiftOp()
/** Class representing expression signs (+, -, 0). */
class Sign extends TSign {
@@ -271,10 +271,10 @@ class Sign extends TSign {
or
op = TBitXorOp() and result = bitxor(s)
or
- op = TLShiftOp() and result = lshift(s)
+ op = TLeftShiftOp() and result = lshift(s)
or
- op = TRShiftOp() and result = rshift(s)
+ op = TRightShiftOp() and result = rshift(s)
or
- op = TURShiftOp() and result = urshift(s)
+ op = TUnsignedRightShiftOp() and result = urshift(s)
}
}
diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
index b2b63ff3633..59f7f4580a8 100644
--- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll
@@ -102,12 +102,12 @@ module Private {
this instanceof J::AssignOrExpr or
this instanceof J::XorBitwiseExpr or
this instanceof J::AssignXorExpr or
- this instanceof J::LShiftExpr or
- this instanceof J::AssignLShiftExpr or
- this instanceof J::RShiftExpr or
- this instanceof J::AssignRShiftExpr or
- this instanceof J::URShiftExpr or
- this instanceof J::AssignURShiftExpr
+ this instanceof J::LeftShiftExpr or
+ this instanceof J::AssignLeftShiftExpr or
+ this instanceof J::RightShiftExpr or
+ this instanceof J::AssignRightShiftExpr or
+ this instanceof J::UnsignedRightShiftExpr or
+ this instanceof J::AssignUnsignedRightShiftExpr
}
/** Returns the operation representing this expression. */
@@ -144,17 +144,17 @@ module Private {
or
this instanceof J::AssignXorExpr and result = TBitXorOp()
or
- this instanceof J::LShiftExpr and result = TLShiftOp()
+ this instanceof J::LeftShiftExpr and result = TLeftShiftOp()
or
- this instanceof J::AssignLShiftExpr and result = TLShiftOp()
+ this instanceof J::AssignLeftShiftExpr and result = TLeftShiftOp()
or
- this instanceof J::RShiftExpr and result = TRShiftOp()
+ this instanceof J::RightShiftExpr and result = TRightShiftOp()
or
- this instanceof J::AssignRShiftExpr and result = TRShiftOp()
+ this instanceof J::AssignRightShiftExpr and result = TRightShiftOp()
or
- this instanceof J::URShiftExpr and result = TURShiftOp()
+ this instanceof J::UnsignedRightShiftExpr and result = TUnsignedRightShiftOp()
or
- this instanceof J::AssignURShiftExpr and result = TURShiftOp()
+ this instanceof J::AssignUnsignedRightShiftExpr and result = TUnsignedRightShiftOp()
}
Expr getLeftOperand() {
diff --git a/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql b/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql
index 92bec98fd5e..f3c0b220080 100644
--- a/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql
+++ b/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql
@@ -14,7 +14,7 @@ int integralTypeWidth(IntegralType t) {
if t.hasName("long") or t.hasName("Long") then result = 64 else result = 32
}
-from LShiftExpr shift, IntegralType t, int v, string typname, int width
+from LeftShiftExpr shift, IntegralType t, int v, string typname, int width
where
shift.getLeftOperand().getType() = t and
shift.getRightOperand().(CompileTimeConstantExpr).getIntValue() = v and
diff --git a/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql b/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql
index db806ef760c..b0508b8eb38 100644
--- a/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql
+++ b/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql
@@ -33,9 +33,9 @@ class ArithmeticExpr extends BinaryExpr {
*/
class ShiftExpr extends BinaryExpr {
ShiftExpr() {
- this instanceof LShiftExpr or
- this instanceof RShiftExpr or
- this instanceof URShiftExpr
+ this instanceof LeftShiftExpr or
+ this instanceof RightShiftExpr or
+ this instanceof UnsignedRightShiftExpr
}
}
diff --git a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql
index 964a5a6060a..b4076bee00b 100644
--- a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql
+++ b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql
@@ -99,7 +99,7 @@ Expr overFlowCand() {
|
bin instanceof AddExpr or
bin instanceof MulExpr or
- bin instanceof LShiftExpr
+ bin instanceof LeftShiftExpr
)
or
exists(AssignOp op |
@@ -109,7 +109,7 @@ Expr overFlowCand() {
|
op instanceof AssignAddExpr or
op instanceof AssignMulExpr or
- op instanceof AssignLShiftExpr
+ op instanceof AssignLeftShiftExpr
)
or
exists(AddExpr add, CompileTimeConstantExpr c |
diff --git a/java/ql/src/Security/CWE/CWE-190/ArithmeticCommon.qll b/java/ql/src/Security/CWE/CWE-190/ArithmeticCommon.qll
index 8287ebc869e..122f6b75b4a 100644
--- a/java/ql/src/Security/CWE/CWE-190/ArithmeticCommon.qll
+++ b/java/ql/src/Security/CWE/CWE-190/ArithmeticCommon.qll
@@ -153,9 +153,9 @@ predicate upcastToWiderType(Expr e) {
/** Holds if the result of `exp` has certain bits filtered by a bitwise and. */
private predicate inBitwiseAnd(Expr exp) {
exists(AndBitwiseExpr a | a.getAnOperand() = exp) or
- inBitwiseAnd(exp.(LShiftExpr).getAnOperand()) or
- inBitwiseAnd(exp.(RShiftExpr).getAnOperand()) or
- inBitwiseAnd(exp.(URShiftExpr).getAnOperand())
+ inBitwiseAnd(exp.(LeftShiftExpr).getAnOperand()) or
+ inBitwiseAnd(exp.(RightShiftExpr).getAnOperand()) or
+ inBitwiseAnd(exp.(UnsignedRightShiftExpr).getAnOperand())
}
/** Holds if overflow/underflow is irrelevant for this expression. */
diff --git a/java/ql/src/Security/CWE/CWE-681/NumericCastCommon.qll b/java/ql/src/Security/CWE/CWE-681/NumericCastCommon.qll
index 4dec14a204f..5a77c0a8d6e 100644
--- a/java/ql/src/Security/CWE/CWE-681/NumericCastCommon.qll
+++ b/java/ql/src/Security/CWE/CWE-681/NumericCastCommon.qll
@@ -16,10 +16,10 @@ class NumericNarrowingCastExpr extends CastExpr {
class RightShiftOp extends Expr {
RightShiftOp() {
- this instanceof RShiftExpr or
- this instanceof URShiftExpr or
- this instanceof AssignRShiftExpr or
- this instanceof AssignURShiftExpr
+ this instanceof RightShiftExpr or
+ this instanceof UnsignedRightShiftExpr or
+ this instanceof AssignRightShiftExpr or
+ this instanceof AssignUnsignedRightShiftExpr
}
private Expr getLhs() {
diff --git a/java/ql/test/kotlin/library-tests/exprs/PrintAst.expected b/java/ql/test/kotlin/library-tests/exprs/PrintAst.expected
index 78bf583ec0d..3b4cc35d4d4 100644
--- a/java/ql/test/kotlin/library-tests/exprs/PrintAst.expected
+++ b/java/ql/test/kotlin/library-tests/exprs/PrintAst.expected
@@ -1944,17 +1944,17 @@ exprs.kt:
# 15| 1: [VarAccess] y
# 16| 5: [LocalVariableDeclStmt] var ...;
# 16| 1: [LocalVariableDeclExpr] i6
-# 16| 0: [LShiftExpr] ... << ...
+# 16| 0: [LeftShiftExpr] ... << ...
# 16| 0: [VarAccess] x
# 16| 1: [VarAccess] y
# 17| 6: [LocalVariableDeclStmt] var ...;
# 17| 1: [LocalVariableDeclExpr] i7
-# 17| 0: [RShiftExpr] ... >> ...
+# 17| 0: [RightShiftExpr] ... >> ...
# 17| 0: [VarAccess] x
# 17| 1: [VarAccess] y
# 18| 7: [LocalVariableDeclStmt] var ...;
# 18| 1: [LocalVariableDeclExpr] i8
-# 18| 0: [URShiftExpr] ... >>> ...
+# 18| 0: [UnsignedRightShiftExpr] ... >>> ...
# 18| 0: [VarAccess] x
# 18| 1: [VarAccess] y
# 19| 8: [LocalVariableDeclStmt] var ...;
@@ -2236,17 +2236,17 @@ exprs.kt:
# 72| 1: [VarAccess] ly
# 73| 59: [LocalVariableDeclStmt] var ...;
# 73| 1: [LocalVariableDeclExpr] l6
-# 73| 0: [LShiftExpr] ... << ...
+# 73| 0: [LeftShiftExpr] ... << ...
# 73| 0: [VarAccess] lx
# 73| 1: [VarAccess] y
# 74| 60: [LocalVariableDeclStmt] var ...;
# 74| 1: [LocalVariableDeclExpr] l7
-# 74| 0: [RShiftExpr] ... >> ...
+# 74| 0: [RightShiftExpr] ... >> ...
# 74| 0: [VarAccess] lx
# 74| 1: [VarAccess] y
# 75| 61: [LocalVariableDeclStmt] var ...;
# 75| 1: [LocalVariableDeclExpr] l8
-# 75| 0: [URShiftExpr] ... >>> ...
+# 75| 0: [UnsignedRightShiftExpr] ... >>> ...
# 75| 0: [VarAccess] lx
# 75| 1: [VarAccess] y
# 76| 62: [LocalVariableDeclStmt] var ...;
diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected
index 5d35293eb22..07d57c444e4 100644
--- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected
+++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected
@@ -924,15 +924,15 @@
| exprs.kt:15:18:15:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:16:9:16:10 | i6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:16:14:16:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:16:14:16:20 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LShiftExpr |
+| exprs.kt:16:14:16:20 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr |
| exprs.kt:16:20:16:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:17:9:17:10 | i7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:17:14:17:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:17:14:17:20 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RShiftExpr |
+| exprs.kt:17:14:17:20 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr |
| exprs.kt:17:20:17:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:18:9:18:10 | i8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:18:14:18:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:18:14:18:21 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | URShiftExpr |
+| exprs.kt:18:14:18:21 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr |
| exprs.kt:18:21:18:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:19:9:19:10 | i9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:19:14:19:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
@@ -1162,15 +1162,15 @@
| exprs.kt:72:19:72:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:73:9:73:10 | l6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:73:14:73:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:73:14:73:21 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LShiftExpr |
+| exprs.kt:73:14:73:21 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr |
| exprs.kt:73:21:73:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:74:9:74:10 | l7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:74:14:74:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:74:14:74:21 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RShiftExpr |
+| exprs.kt:74:14:74:21 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr |
| exprs.kt:74:21:74:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:75:9:75:10 | l8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:75:14:75:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
-| exprs.kt:75:14:75:22 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | URShiftExpr |
+| exprs.kt:75:14:75:22 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr |
| exprs.kt:75:22:75:22 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
| exprs.kt:76:9:76:10 | l9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr |
| exprs.kt:76:14:76:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess |
diff --git a/java/ql/test/library-tests/constants/PrintAst.expected b/java/ql/test/library-tests/constants/PrintAst.expected
index 241d837ea3c..63d59f7287e 100644
--- a/java/ql/test/library-tests/constants/PrintAst.expected
+++ b/java/ql/test/library-tests/constants/PrintAst.expected
@@ -376,26 +376,26 @@ constants/Values.java:
# 62| 43: [LocalVariableDeclStmt] var ...;
# 62| 0: [TypeAccess] int
# 62| 1: [LocalVariableDeclExpr] lshift
-# 62| 0: [LShiftExpr] ... << ...
+# 62| 0: [LeftShiftExpr] ... << ...
# 62| 0: [IntegerLiteral] 21
# 62| 1: [IntegerLiteral] 2
# 63| 44: [LocalVariableDeclStmt] var ...;
# 63| 0: [TypeAccess] int
# 63| 1: [LocalVariableDeclExpr] lshift_parameter
-# 63| 0: [LShiftExpr] ... << ...
+# 63| 0: [LeftShiftExpr] ... << ...
# 63| 0: [VarAccess] notConstant
# 63| 1: [VarAccess] notConstant
# 65| 45: [LocalVariableDeclStmt] var ...;
# 65| 0: [TypeAccess] int
# 65| 1: [LocalVariableDeclExpr] rshift
-# 65| 0: [RShiftExpr] ... >> ...
+# 65| 0: [RightShiftExpr] ... >> ...
# 65| 0: [MinusExpr] -...
# 65| 0: [IntegerLiteral] 1
# 65| 1: [IntegerLiteral] 2
# 66| 46: [LocalVariableDeclStmt] var ...;
# 66| 0: [TypeAccess] int
# 66| 1: [LocalVariableDeclExpr] urshift
-# 66| 0: [URShiftExpr] ... >>> ...
+# 66| 0: [UnsignedRightShiftExpr] ... >>> ...
# 66| 0: [MinusExpr] -...
# 66| 0: [IntegerLiteral] 1
# 66| 1: [IntegerLiteral] 1